HTTP协议相关

56 阅读4分钟

HTTP协议相关

状态码

  • 1xx:指示信息-表示请求已接收,继续处理
  • 2xx:成功-表示请求已被成功接收
  • 3xx:重定向-要完成请求必须进行更进一步的操作
  • 4xx:客户端错误-请求有语法错误或请求无法实现
  • 5xx:服务器错误-服务器未能实现合法的请求

常见的http状态码

  • 200:客户端请求成功
  • 206:客户发送带有range头的GET请求,服务器完成了它
  • 301:重定向(永久)
  • 302:重定向(临时)
  • 304:资源未被修改,有缓存
  • 403:请求被拒绝
  • 404:资源未找到
  • 500:服务器错误
  • 504:网关超时

HTTP方法

  • GET:获取资源
  • POST:传输资源
  • put/patch:更新资源
  • DELETE:删除资源
  • HEAD:获得报文首部

Restful API

  • 传统的API设计:把每个url当做一个功能
  • restful API:把每个url当做一个唯一资源

http headers

Request Headers

Request Header说明
Accept浏览器可接收的数据格式(如:*/*)
Accept-Language客户端接收的语言类型(如:zh-CN,en-US)
Connection维护客户端和服务端的连接关系(如:Keep-Alive)
Host连接的目标主机和端口号(如:localhost:8080)
User-Agent客户端版本号的名字
Accept-Encoding客户端能接收的压缩数据的类型(如:gzip)
Cookie客户端暂存服务端的信息
Content-type发送数据的格式,get请求没有(如:application/json)

Response Headers

Response Headers说明
Content-Type服务端发送的类型及采用的编码方式(如:text/html; charset=utf-8)
Content-Encoding服务端能够发送压缩编码类型(如:gzip)
Content-Length服务端发送的压缩数据的长度(如:128)
Set-Cookie服务端发送到客户端的暂存数据
Cache-Control缓存相关
Last-Modified缓存相关
Etag缓存相关

HTTP 缓存

概念:通过复用以前获取的资源,可以显著提高网站和应用程序的性能。Web 缓存减少了等待时间和网络流量,因此减少了显示资源表示形式所需的时间。通过使用 HTTP缓存,变得更加响应性。

哪些文件可以被缓存:静态资源(js、css、img)

强制缓存

强制缓存就是直接从浏览器缓存查找该结果,并根据结果的缓存规则来决定是否使用该缓存的过程。

1644141301229.png

控制强制缓存的字段分别是**ExpiresCache-Control**,其中Cache-Control优先级比Expires高。

Cache-Control

  • public:所有内容都将被缓存(客户端/代理服务器/CDN等)
  • private:只有客户端可以缓存,Cache-Control默认值
  • no-cache客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
  • no-store所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
  • max-age=xxx:缓存时效,在缓存过期后,需要重新向服务器发起请求

协商缓存

协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,有服务器根据缓存标识决定是否使用缓存的过程。

  • 服务器端缓存策略

  • 服务器判断客户端资源,是否和服务器端资源一样

  • 一致则返回304,否则返回200和最新的资源

控制协商缓存的字段分别有

  • Last-Modified/If-Modified-Since
  • Etag/If-None-Match

1644143544453.png

1644143579010.png

两者区别:

  • 会优先使用Etag
  • Last-Modified只能精确到秒级,如果在一秒内多次修改服务器资源,则不能保证最新资源加载
  • 如果资源被重复生成,而内容不变,在Last-Modified中标识为需要重新加载,但是Etag可以标识资源内容一致,无需服务端加载。

http缓存流程

首次请求

1644145989433.png

后续请求

1644146014111.png

浏览器刷新操作,产生不同的缓存策略

  • 正常操作(链接跳转、url输入):强制缓存有效,协商缓存有效
  • 手动刷新(浏览器f5):强制缓存失效,协商缓存有效
  • 强制刷新(Ctrl+f5):强制缓存失效,协商缓存失效