字节流的博客

《图解 HTTP》笔记

1. 方法

方法版本说明
GET1.0、1.1获取资源
POST1.0、1.1传输实体主体
PUT1.0、1.1传输文件
DELETE1.0、1.1删除文件
HEAD1.1、1.1获取报文首部
OPTIONS1.1用来查询服务器支持的方法
TRACE1.1追踪路径
CONNECT1.1要求用隧道协议链接代理
LINK1.0建立和资源直接的联系
UNLINE1.0断开连接关系

其中 HEADGET 方法类似,但是响应不包含实体部分,用于确定 URL 的有效性和过期时间;

TRACE 让 Web 服务器端将之前的请求环回路径返回给客户端的方法。发送请求时,在 Max-Forwards 首部字段中填入数值,每经过一个服务器端就减 1,当数值正好减到 0 时,停止传输,由最后接收到请求的服务器返回 200 OK 的响应。

CONNECT 要求在与代理服务器通信时建立隧道,实现用隧道协议实现 TCP 通信。主要使用 SSL 和 TLS 把通信内容加密后经网络隧道传输。

2. TCP 连接

TCP 建立连接需要三次握手,断开连接时需要四次挥手。

3. 传输

数据的传输过程中,从应用层到传输层,网络层,再到链路层,发送端每经过一层,就会增加相应的首部;接收端则每往上传播一层,则会剔除相应的首部,直到应用层,获取到的是原始的 HTTP 数据。

4. 状态码

类别原因短语
1XXInformational(信息性状态码)接收的请求正在处理
2XXSuccess (成功状态码)请求正常,处理完毕
3XXRedirection (重定向状态码)要求进行附加操作以完成请求
4XXClient Error (客户端错误状态码)服务器无法处理请求
5XXServer Error (服务器错误状态码)服务器处理请求出错

2XX:正确响应

  • 200:正确处理;
  • 204:No content,服务器已正确处理,但是响应实体中没有主体;
  • 206:Partial content,对于请求头中包含 content-range 字段的,响应一部分数据;

3XX:重定向

  • 301:Moved permanently,永久重定向,响应头中包含的 location 字段为重定向后的结果;
  • 302:Found,临时重定向,请求的资源已被分配到新的URI,希望用户本次使用新URI(临时的意思是指以后有可能再变回来)。
  • 303:See other, 请求的资源存在另一个URI,请以 GET 方式去获取。
  • 304:Not modified,客户端发送附带条件(if-modified-since, if-range 等条件)的请求时,服务端资源已经找到,但是不符合条件。(304 响应中没有响应实体,和重定向没有关系)

4XX:客户端错误

  • 400:Bad request,请求报文中有语法错误。
  • 401:Unauthorized,请求需要 HTTP 认证(BASIC / DIGEST 认证,请求头中应包含 www-authenticate 字段)。
  • 403:Forbidden,请求的资源被服务器拒绝了;
  • 404:Not found,服务器上没有找到请求的资源。

5XX:服务器错误

  • 500:Internal server error,服务器在执行请求时发生了错误。
  • 503:Service unavailable,服务器处于超负载状态或者正在进行停机维护,现在无法处理请求。

注:状态码和情况不一致,如服务器发生错误,但是仍然返回 200 的状态码,这种情况也很常见。

5. 安全

HTTPS

HTTPS 相对于 HTTP 就是在应用层和传输层之间添加了 SSL/TLS 。

数字签名

  1. 生成 Keypair,即密钥对,包括公钥和私钥;
  2. 对需要进行数字签名的内容进行 HASH 后得到该内容的摘要 Digest;
  3. 用私钥对 Digest 加密,得到 Signature,即数字签名;

证书

  1. 生成密钥对,服务器把自己的公钥登录至 CA 机构;
  2. CA 机构用自己的私钥向服务器的公钥签署数字签名,并颁发公钥证书;
  3. 客户端拿到服务器的公钥证书后,使用 CA 机构的公钥,向 CA 机构验证公钥证书的数字签名,以确认服务器公钥的真实性(CA 机构的公钥已事先植入到浏览器中);
  4. 客户端验证证书通过后,使用服务器的公钥对数据加密后,发送给服务器;
  5. 服务器接收到客户端加密的内容后,用私钥解密,获取真实的数据内容;
Thanks! 😊