今天被问到一个http header的问题,一脸懵逼,连问题本身都没理解。后来查了一下,才反应过来”原来是在问这个😨”。
其实本身是很基础的点,但之前确实没有太过关注。不过看了下,小小一串header还是可以涉及到很多方面的,赶紧整理了一波。
Accept
作用:指明浏览器可以接受的媒体类型。
常见的有text/html、text/javascript, */*(所有类型)等
补充:如果服务器无法返回对应类型的数据,服务器应该返回一个406错误(Not Acceptable)
Accept-Encoding:
作用:浏览器声明自己接收的编码方法,通常指定压缩方法(gzip,deflate等)。
注:这不是指字符编码
补充:http压缩过程
- 浏览器发送request给Web服务器,header中使用Accept-Encoding:gzip告诉服务器,浏览器支持压缩;
- Web服务器接到请求后,生成原始的response,其中有原始的Content-Type和Content-Length;
- Web服务器通过Accept-Encoding:gzip,来对response进行编码, 编码后header中有Content-Type和Content-Length(压缩后的大小), 并且增加了Content-Encoding:gzip,然后发送给浏览器。
- 浏览器接到Response后,根据Content-Encoding:gzip来对response 进行解码。获取到原始response后,然后显示出网页。
补充:gzip是如何压缩的
简单来说,gzip压缩是在一个文本文件中找出类似的字符串,并临时替换他们,使整个文件变小。
这种形式的压缩对Web来说非常适合,因为HTML和CSS文件通常包含大量的重复的字符串,例如空格、标签。
Accept-Language
作用:浏览器声明自己接收的语言。
语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等;
例如:Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection
- Connection: keep-alive
当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接 - Connection: close
代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。
Host(必需)
作用:请求报头域主要用于指定被请求资源的主机和端口号,它通常从URL中提取出来。
Referer
作用:告诉服务器我是从哪个页面链接过来的。
服务器可以由此获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。
User-Agent
作用:指明客户端使用的操作系统和浏览器的名称和版本。
例如: User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.2; .NET4.0E)
Cache-Control
我们网页的缓存控制是由HTTP头中的“Cache-control”来实现的,常见值有private、no-cache、max-age、must-revalidate等,默认为private。这几种值的作用是根据重新查看某一页面时不同的方式来区分的:
打开新窗口
值为 private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。
而如果指定了max-age值(单位为秒),那么在此值内的时间里就不会重新访问服务器。在地址栏回车
值为 private 或 must-revalidate 则只有第一次访问时会访问服务器,以后就不再访问。
值为no-cache,那么每次都会访问。
值为max-age,则在过期之前不会重复访问。按后退按扭
值为 private、must-revalidate、max-age,则不会重新访问。
值为no-cache,则每次都重复访问。按刷新按扭
无论为何值,都会重复访问。
Cookie
作用:存储一些用户信息以便让服务器辨别用户身份。
If-Modified-Since
作用:把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。
如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中.
If-None-Match
作用:If-None-Match 和 ETag 一起工作,工作原理是在 HTTP Response 中添加 ETag 信息。当用户再次请求该资源时,将在 HTTP Request 中加入 If-None-Match 信息(ETag的值)。
如果服务器验证资源的 ETag 没有改变(该资源没有更新),将返回一个304状态告诉客户端使用本地缓存文件。否则将返回200状态和新的资源和Etag。
q=qvalue
作用:描述了客户端对于某种媒体类型的喜好系数,该值的范围是0-1。默认为1。
例如:Accept: text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c
该句可理解为text/html 和 text/x-c 是最喜爱的媒体类型,但是如它们不存在,那么发送text/x-dvi 实体,但如果 text/x-dvi 也不存在,那么发送 text/plain 实体。