字节流的博客

《图解 HTTP》笔记

1. 方法

方法 版本 说明
GET 1.0、1.1 获取资源
POST 1.0、1.1 传输实体主体
PUT 1.0、1.1 传输文件
DELETE 1.0、1.1 删除文件
HEAD 1.1、1.1 获取报文首部
OPTIONS 1.1 用来查询服务器支持的方法
TRACE 1.1 追踪路径
CONNECT 1.1 要求用隧道协议链接代理
LINK 1.0 建立和资源直接的联系
UNLINE 1.0 断开连接关系

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

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

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

2. TCP 连接

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

3. 传输

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

4. 状态码

类别 原因短语
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success (成功状态码) 请求正常,处理完毕
3XX Redirection (重定向状态码) 要求进行附加操作以完成请求
4XX Client Error (客户端错误状态码) 服务器无法处理请求
5XX Server 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! 😊