HTTP

Nevermore毓2022年9月9日大约 5 分钟

超文本传输协议(HTTP,HyperText Transfer Protocol)是一个用于传输超媒体文档(例如 HTML)的应用层协议。

HTTP 是无状态的协议,无法记录客户端用户的状态。

响应状态码

响应状态码分为五大类:

分类描述
1xx信息
2xx成功
3xx重定向
4xx客户端错误
5xx服务器错误

常见状态码:

  • 100(继续):客户端应继续其请求
  • 200(成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页
  • 201(已创建) 请求成功并且服务器创建了新的资源
  • 202(已接受) 服务器已接受请求,但尚未处理
  • 301(永久重定向) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置
  • 302(临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求
  • 304(资源未修改)客户端请求的数据还是最新的,服务器不再返回数据
  • 403(禁止) 请求的资源被禁止,服务器拒绝请求
  • 404(未找到) 请求的资源不存在,服务器找不到请求的网页
  • 500(服务器内部错误):服务器遇到错误,无法完成请求
  • 502(错误网关):服务器作为网关或代理,但是从上游服务器得到错误响应。常见于:客户端访问服务器某个防火墙没有开放的接口
  • 503 (服务不可用):服务器因维护或过载而停机,通常只是暂时的,应返回解释当前问题的页面
  • 504 (网关超时):服务器作为网关或代理,但是没有及时从上游服务器收到请求

HTTP header

请求头 Request Headers:

  • Accept:浏览器可接收的数据格式
  • Accept-Encoding:浏览器可接收的压缩算法,如 gzip
  • Accept-Languange:浏览器可接收的语言,如 zh-CN
  • Connection:keep-alive 一次 TCP 连接重复使用
  • cookie
  • Host:域名
  • User-Agent:浏览器信息
  • Content-type:发送数据的格式,如 application/json

响应头 Response Headers:

  • Ccontent-type:返回数据的格式,如 application/json
  • Content-length:返回数据的大小(字节)
  • Content-Encoding:返回数据的压缩算法,如 gzip

HTTP1 与 HTTP2

HTTP1 与 HTTP2 的区别:

  1. HTTP/2 使用二进制传输,将 header 和 body 分成帧来传输。HTTP/1.1 是字符串传输。
  2. HTTP/2 支持多路复用,速度快,延迟低。HTTP/1.1 不支持。
  3. HTTP/2 支持头部压缩,HTTP/1.1 不支持。
  4. HTTP/2 支持服务器推送, HTTP/1.1 不支持。

HTTPS

HTTPS = HTTP + SSL/TLS(安全层)

TLS(Transport Layer Security,安全传输层协议),前身是 SSL(Secure Socket Layer,安全套接字协议)

  • 对称加密:客户端和服务端使用相同的秘钥进行加密解密。优点:速度快;缺点:服务端需要保存很多个客户端的密钥,并保证不被泄露。
  • 非对称加密:也称为公钥加密。服务端拥有一对可以互相加密解密的公钥和私钥,服务端在网络上任意分发公钥,客户端用公钥加密数据后,再发给服务端。缺点:速度慢
  • 混合加密:同时使用对称加密和非对称加密,平衡两者的优缺点。

TLS 使用了对称加密、非对称加密、身份认证等技术。

TLS1.2 握手过程

握手过程:

  1. 客户端向服务端发送第1随机数,服务端收到后再发送第2随机数、公钥和证书,客户端比对服务端发放的公钥是否通过证书颁发机构(CA)的认证;
  2. 客户端再生成第3随机数(预主密钥)通过公钥加密发送,服务端收到后通过自己的私钥进行解密,得到预主密钥;
  3. 客户端和服务端都通过第1随机数、第2随机数和预主密钥计算出会话秘钥,后续就使用会话秘钥进行加密通信。

TLS1.2 使用了对称加密、非对称加密、身份认证等技术:

  • 身份认证:客户端比对服务端发放的公钥是否通过证书颁发机构(CA)的认证
  • 非对称加密:客户端发送公钥给客户端加密第3随机数(预主密钥),再通过私钥解密得到第3随机数。
  • 对称加密:客户端和服务端都持有相同的会话秘钥(第1随机数 + 第2随机数 + 第3随机数)

HTTP 与 HTTPS 的区别

  1. HTTP 是明文传输的,不安全;HTTPS 是加密传输的,非常安全。
  2. HTTP 使用 80 端口,HTTPS 使用 443 端口。
  3. HTTP 较快,HTTPS 较慢。
  4. HTTPS 的 CA 证书需要购买(但也有免费的),HTTP 不需要证书。

GET 与 POST 的区别

协议规定的根本区别:HTTP 协议规定的语义上获取数据与提交数据的区别

工程实践中的区别:

  • GET 用于获取数据,无副作用,幂等,请求参数一般放在 URL 里,可缓存,产生一个 TCP 数据包。
  • POST 用于提交数据,有副作用,非幂等,请求参数一般放在请求体中,不可缓存,产生两个或以上 TCP 数据包。

(幂等表示执行相同的操作,结果也是相同的)

详细区别:

  • 缓存的角度,GET 请求会被浏览器主动缓存下来,留下历史记录,而 POST 默认不会。
  • 编码的角度,GET 只能进行 URL 编码,只能接收 ASCII 字符,而 POST 没有限制。
  • 参数的角度,GET 一般放在 URL 中,因此不安全,POST 放在请求体中,更适合传输敏感信息。
  • 幂等性的角度,GET 是幂等的,而 POST 不是。
  • TCP 的角度,GET 请求会把请求报文一次性发出去。而 POST 会分为两个 TCP 数据包:首先发 header 部分,如果服务器响应 100(continue), 再发 body 部分。

参考资料

Loading...