认识HTTP协议 | 青训营笔记

64 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第8天。

HTTP

HTTP是超文本传输协议,它是一种基于TCP的应用层协议,它是一种无状态的协议。

报文字段

Method

  • GET:该请求应只用于获取数据。
  • POST:通常用于提交数据给服务器。
  • PUT:使用请求中的负载创建或者替换目标资源。
  • DELETE:删除指定资源。
  • HEAD:请求一个与GET请求返回的头部一致的头部信息。
  • CONNECT:开启一个客户端与所请求资源之间的隧道。
  • OPTIONS:获取目标资源的通信选项。
  • TRACE:沿目标资源的路径执行环回测试。
  • PATCH:对资源进行部分修改。

请求方式按照特点分为:

  • safe(安全的):不会修改服务器数据的方法。如:GET、HEAD、OPTIONS。
  • Idempotent(幂等):同样的请求被执行一次和多次的效果是一样的,服务器状态也相同,所有safe的方法都是幂等的。例如:GET、HEAD、OPTIONS、PUT、DELETE。

常用状态码

graph LR
1XX --> A["指示信息,表示请求已经接收,继续处理"]
2XX --> B["成功,表示请求已被成功接收、理解、接受"]
B --> B1["200 OK - 客户端请求成功"]
3XX --> C["重定向,要完成请求必须进行更进一步的操作"]
C --> C1["301 - 资源(网页等)被永久转移到其他URL"]
C --> C2["302 - 临时跳转"]
4XX --> D["客户端错误,请求有语法错误或请求无法实现"]
D --> D1["401 Unauthorized - 请求未经授权"]
D --> D2["404 - 请求的资源不存在,可能输入了错误的URL"]
5XX --> E["服务器端错误,服务器未能实现合法的请求"]
E --> E1["500 - 服务器内部发生了不可预期的错误"]
E --> E2["504 Gateway Timeout - 网关或者代理服务器无法在规定时间内进行响应"]

常用请求头

  • Accept:告知服务器客户端可以处理的MIME类型,对标服务端返回的Content-Type
  • Content-Type:指示客户端发送的资源的MIME类型。
  • Cache-Contorl:指定请求和响应遵循的缓存机制。
  • If-Modified-Since:对应服务端的Last-Modified,用来检查文件是否变动,当文件变动响应200状态码,文件未变动响应304状态码。
  • Expires:控制缓存过期时间,过期之前不会请求,直接使用缓存。
  • Max-age:控制资源在本地缓存的时间,在有效期内不会再次请求资源,而是使用缓存。
  • If-None-Match:对应服务器的ETag,用于匹配文件内容是否被修改。
  • Cookie:用户信息数据,当Cookie存在且同域访问时会被携带。
  • Referer:页面来源URL。
  • Origin:包含请求来源(协议、主机、端口)。
  • User-Agent:用户客户端的必要信息。

常用响应头

  • Content-Type:指示服务端响应的资源的MIME类型。
  • Cache-Contorl:指定请求和响应遵循的缓存机制。
  • Last-Modified:请求资源的最后修改时间。
  • Expires:控制缓存过期时间,当过期时不再缓存文档。
  • Max-age:控制客户端的本地资源缓存时间,开启Cache-Contorl后有效。
  • ETag:资源的版本标识符。
  • Set-Cookie:设定与页面关联的Cookie并将Cookie传给客户端。
  • Serve:服务器的信息。
  • Access-Control-Allow-Origin:服务端允许请求的Origin头部。

缓存

graph TD
A[强缓存] ---> B["Expires,时间戳"]
A --> C[Cache-Control] --> C1[可缓存性] --> C11["no-cache:协商缓存验证"]
C1 --> C12["no-store:不使用任何缓存"]
C --> 到期 --> D["max-age:单位是秒,<br>存储的最大周期,<br>相对于请求的时间"]
C --> 重新验证*重新加载 --> E["must-revalidate:一旦资源过期,<br>在成功向原始服务器验证之前,不能使用"]
graph LR
协商缓存 --> A["Etag/If-None-Match:资源的特定版本标识符"]
协商缓存 --> B["Last-Modified/If-Modified-Since:最后修改时间"]

HTTPS

基于HTTP协议使用TSL/SSL对通信进行加密。

  • 对称加密:解密和解密使用相同秘钥。
  • 非对称加密:加密和解密需要使用两个不同的秘钥(公钥和私钥)。

静态资源

静态资源方案:缓存 + CDN + 文件名hash

  • CDN(Content Delivery Network):使用户可以快速高效的获取静态资源。

提高稳定性

graph LR
A[稳定性] --> B[重试机制] --> 超时
B --> 错误
A --> 缓存
A --> C[数据安全] --> HTTPS
C --> 防劫持

总结

随着网络技术的发展,不仅仅传输协议在迭代,还需要在意其中的安全问题,在数据传输过程中要用好传输协议以及其中的技术,做好安全防范。