0%

浏览器机制相关

主题

  • 从请求头与响应头理解浏览器网络相关机制
  • 从渲染流程理解浏览器渲染相关机制

请求头与响应头

connection与proxy-connection(即将被http2机制取缔)

常用于双端。该指令指定tcp连接行为,关闭或建立长链接。connection: keep-alive(由于其他值如close, upgrade场景受限,不考虑),表示此http(tcp)链接需要keep,另外也说明该客户端支持长链接。服务端接收到该http请求之后,如果支持则会建立长链接,并设置超时时间,在响应头中会增加connection: keep-alive以及keep-alive: true两个键值对。

注:此超时关闭行为类似前端常用名词中的debounce行为,即仅当请求间隔超过timeout时才会close connection

cache

常用于双端。该指令指定浏览器的存取缓存行为。cache-control指令有很多用法,这里介绍几种常用的,比如no-store, no-cache, must-revalidate, public, max-age= 常用于ajax请求(响应头)

  • no-cache 禁止get缓存,并携带验证器向原始服务器发起请求
  • no-store禁止set缓存
  • must-revalidate 强制用户在使用缓存之前验证旧资源的状态,并且不可使用过期资源

常用于静态文件(响应头)

  • public 表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存。
  • max-age=<seconds> 设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒)

仅用于客户端。该指令指定客户端部分身份信息。可通过withCredentials控制浏览器是否携带cookie字段。

content-encoding与accept-encoding

仅用于服务端。content-encoding应用于响应头,与请求头accept-encoding配套使用。该指令指定传输内容编码方式。 常用于所有类型请求

  • gzip 使用(服务端)或支持(客户端)gzip压缩
  • deflate 使用(服务端)或支持(客户端)zlib压缩与deflate压缩

用于特殊请求

  • identity 未经修改或压缩

content-length

常用于双端。该指令指定传输内容body长度。

content-type

常用于双端。该指令指定body MIME类型

accept

仅用于客户端。该指令指定客户端支持的MIME类型

accept-language

仅用于客户端。该指令指定客户端支持的语言。

  • zh-CN,zh;q=0.9,en;q=0.8

q表明接受语言的权重,不写默认为q=1。

host

仅用于客户端。该指令指定客户端主机。如:www.google.com

origin

仅用于客户端。该指令指定客户端源。如:http://www.google.com

referer

仅用于客户端。该指令指定客户端origin + path。常用于防盗链,因为浏览器不允许js修改(排除某些低级浏览器)。如:http://www.google.com/document

user-agent

仅用于客户端。该指令指定客户端代理描述符。