HTTP(超文本传输协议)
URL
URL就是平常说的 “网址”,其组成如下:
协议方案名称://用户名:密码@服务器IP地址:端口/请求资源的路径?查询字符串#片段标识符
urlencode:对提交字符串中的特殊字符进行转义编码,防止产生歧义
urldecode:对已编码的URL进行解码
HTTP协议格式
HTTP协议格式分为四个部分:首行、头部、空格、正文
首行:
请求首行:由请求方法 、URL、协议版本三部分组成,由空格间隔,并且以 \r\n结尾
请求方法:POST/GET/HEAD/PUT/DELETE
GET:从服务器获取数据,也可以提交数据,待提交的数据存放在URL中, 有长度限制
POST:向服务器提交数据,待提交的数据存放在正文中,没有长度限制
响应首行:由协议版本、状态码、状态码描述三部分组成,由空格间隔,并以\r\n结尾
协议版本: HTTP 1.0/1.1/2
状态码:
1xx:接收的请求正在处理
2xx:请求正常处理完毕 例如:200(OK)204(No Content)
3xx:需要进行附加操作以完成请求 例如:301(永久重定向)302(临时重定向)
4xx:服务器无法处理请求 例如:400(客户端请求报文出错) 403(服务器禁止访问资源) 404(资源不存在或丢失)
5xx:服务器处理请求出错 例如:501(客户端请求的功能暂不支持)503(服务器繁忙)
头部:
头部中都是key:val形式的键值对,之间用\r\n间隔
空行:
\r\n,用于间隔头部与正文
正文:
包含客户端提交给服务器的数据和服务器反馈给客户端的数据
HTTP 1.0/1.1/2 区别
- HTTP 1.0:
- 用户密码未加密
- 使用短连接,即每次发送数据都会进行TCP三次握手四次挥手
- 不支持断点续传,每次都会传输全部的页面和数据
- HTTP 1.1:
- 默认使用长连接,只需要建立一连接就可以发送多次数据,连接时长可以在连接请求头部中的 keep-alive中修改
- 支持断点续传
- HTTP 2
- 头部压缩
- 使用二进制格式,使用了更靠近TCP/IP的二进制格式,摒弃了ASCII码
- 多路复用
HTTP VS HTTPS
HTTPS = HTTP + SSL/TLS
TLS是传输层加密协议,前身是SSL协议,有时候两者并不区分
HTTP默认使用80端口,HTTPS默认使用443端口
HTTPS实现原理:
- client向server端发送http请求,并且发送随机数1和客户端支持的加密算法
- server收到请求后,返回给client随机数2和协商好的加密算法
- 随即server给client发送第二个响应报文,包含一套由权威机构认证的数字证书也就是公钥
- client解析证书,验证真伪,通过验证后,生成一个随机数3
- client用三个随机数组装成会话密钥,使用证书的公钥加密,发送给server
- server通过私钥解密,还原会话密钥
- 之后的通信使用会话密钥进行加密通信