文章目录
HTTP
什么是HTTP协议?
HTTP协议是对客户端和服务器端之间传输文字、图片、音频、视频等数据的规范,称为超文本传输协议。HTTP协议属于应用层,建立在TCP协议基础上。
HTTP特点
1、简单快速:客户端向服务器发送请求时,只需传递请求方法、路径和请求参数,因为协议简单,所以使得HTTP服务器程序规模小,通信速度快。
2、无连接:每次连接只处理一个请求,服务器处理完客户端请求后,会立即断开连接。
3、无状态:服务器端对于客户端每次发送的请求都认为它是一个新的请求,上一次会话与这次会话没有联系。
4、可传递任意数据类型
5、一对一通信:每次HTTP请求,都是一个客户端对应一个服务器。
请求报文和响应报文
请求报文由:请求行、请求头、空行、请求数据组成。
请求行包含了请求方法、URL、协议版本。
请求头描述了客户端请求的主机和环境信息等。
响应报文由:状态行、响应首部字段、空行、响应内容实体组成。
两种HTTP请求方法:GET和POST
- GET请求:从指定的资源请求数据。
- POST请求:向指定资源提交要被处理的数据。
GET和POST的请求都能使用额外的参数,但是GET的参数是以查询字符串出现在URL中。
GET /test/demo_form.asp?name1=value1&name2=value2 HTTP/1.1
而POST的参数存储在实体主体中,但是不能因为POST参数存储在实体主题中就认为它的安全性高,
因为仍然可以通过一些抓包工具查看。
HTTP状态码
HTTP状态码表示客户端HTTP请求的返回结果、标识服务器处理是否正常、表明请求出现的错误等。
- 1xx:接收的请求正在处理。
100 continue :表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。
- 2xx:请求正常处理完毕。
200 OK
204 No Content:请求已经成功处理,但是返回的响应报文不包含实体的主体部分,
一般只需要从客户端往服务器端发消息,而不需要返回数据时使用。
206 Partial Content:表示客户端进行了范围请求,响应报文包含由Content-Range
指定范围的实体。
- 3xx:需要进行附加操作以完成请求。
301 Moved Permanently:永久性重定向
302 Found:临时性重定向
303 See Other:和302功能相同,但是要求客户端采用GET方法获取资源
304 Not Modified:请求报文首部包含一些条件,如果不满足条件,则服务器返回304
307 Temporary Redirect:临时重定向,307要求浏览器不会把重定向请求的POST改成GET
- 4xx:服务器无法处理请求
400 Bad Request:请求报文中存在语法错误
401 Unauthorized:表示请求需要有认证信息
403 Forbidden:请求被拒绝
404 Not Found:服务器无法找到对应资源
- 5xx:服务器端未能实现合法的请求
500 Internal Server Error:服务器正在执行请求时发生错误
503 Service Unavailable:服务器暂时处于超负载或正在进行停机维护,现在无法处理请求
HTTP版本
HTTP 1.x的缺陷
- 客户端需要使用多个连接来加快并行速度;
- 在前一个响应请求到达之后下一个请求才能发送,如果前一个阻塞,后面的请求也会阻塞(队头阻塞);
- 请求和响应首部太大,未经压缩就发送,导致了不必要的流量浪费;
- 每次请求和响应首部都是重复的内容;
- 只能客户端主动发起请求,不能服务器主动发起
HTTP 2.x
- 二进制格式:相比于HTTP1的文本格式,二进制格式效率更高;
- 帧与双向数据流:帧是HTTP2通信的最小消息单位,报文被分割成多个帧,流是存在于连接中的双向虚拟通道,帧可以在流上进行双向传输,并且可以乱序发送,根据帧首部的流标志重新组装;
- 多路复用:HTTP1想要并发多个请求只能起多个TCP连接,HTTP2拥有流和帧后单个连接上可以并发进行多个请求和响应,避免了HTTP1中的队头阻塞问题,提升了性能;
- 头部压缩:HTTP1首部太大,而且每次都重复发送,浪费带宽,HTTP2使用特别的算法在客户端和服务器端建立字典记录之前发送的键值对,用索引号代替重复字符串;
- 服务端推送:HTTP1中服务端需要等待客户端请求才能被动响应,而HTTP2允许服务器向客户端主动推送。
HTTP 3.x
HTTP2在一定程度上实现了多路复用,但其并未完全解决队头阻塞问题,在TCP连接中一旦发生丢包就会阻塞后续所有请求。HTTP3将传输层的TCP协议换成了UDP协议,并引入QUIC协议使UDP实现了类似TCP的可靠传输,如果某个流丢包只会阻塞这个流而不会阻塞其他流。
HTTPS
HTTP存在安全性问题:
使用明文通信,内容可能会被窃听;不验证通信方的身份,通信方身份有可能遭遇伪装;无法证明报文的完整性,报文有可能遭篡改。
HTTPS是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全
。
HTTPS让HTTP先和SSL通信,再由SSL和TCP通信,即HTTPS使用了隧道进行通信。
通过使用SSL,HTTPS具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。
HTTPS使用非对称加密,非对称加密指的是使用一对密钥,即公钥和私钥,公钥可以随意发布,但私钥只要自己知道。发送密文的一方使用对方的公钥进行加密处理,对方收到加密信息后,使用自己的私钥进行解密。非对称加密方式不需要发送密钥,会更安全,但是运算速度相对于对称加密要慢。