http头解释

<---响应头--->

长连接:

Connection:  keep-alive    开启长连接          ----   connection [kəˈnekʃn]连接   keep [ki:p]保持     alive [əˈlaɪv]活着的
Keep-Alive: timeout=20    长连接时间    ---- timeout 超时

X-Cache

X-Cache: 表示你的 http request 是由 proxy server 回的 .
MISS 表示proxy无缓存, HIT 表示proxy缓存了

例:x-cache:MISS from fs-20   没有用到缓存
  x-cache: HIT from fs-20  用到缓存了

Cache-Control主要有以下几种类型:
(1) 请求Request:

[1] no-cache  ---- 不要读取缓存中的文件,要求向WEB服务器重新请求 (这个很容易让人产生误解,使人误以为是响应不被缓存。实际上Cache-Control: no-cache是会被缓存的,只不过每次在向浏览器提供响应数据时,缓存都要向服务器评估缓存响应的有效性。)
[2] no-store    ---- 请求和响应都禁止被缓存  (这个才是响应不被缓存的意思)    ---- store   [stɔ:(r)]  存储
[2] max-age: ---- 表示当访问此网页后的max-age秒内再次访问不会去服务器请求,其功能与Expires类似,只是Expires是根据某个特定日期值做比较。一但缓存者自身的时间不准确.则结果可能就是错误的,而max-age,显然无此问题.。Max-age的优先级也是高于Expires的。
[3] max-stale  ---- 允许读取过期时间必须小于max-stale 值的缓存对象。         ----max  [mæks] 最大值      stale  [steɪl] 不新鲜的;陈旧
[4] min-fresh ---- 接受其max-age生命期大于其当前时间 跟 min-fresh 值之和的缓存对象      ---- min  [mɪn] 分钟; 最小       fresh  [freʃ]  新鲜;新的
[5] only-if-cached ---- 告知缓存者,我希望内容来自缓存,我并不关心被缓存响应,是否是新鲜的.
[6] no-transform   ---- 告知代理,不要更改媒体类型,比如jpg,被你改成png.        ---- transform   [trænsˈfɔ:m]  变换

(2) 响应Response:

[1] public    ---- 数据内容皆被储存起来,就连有密码保护的网页也储存,安全性很低
[2] private    ---- 数据内容只能被储存到私有的cache,仅对某个用户有效,不能共享    ----private  [ˈpraɪvət]   私有的
[3] no-cache    ---- 可以缓存,但是只有在跟WEB服务器验证了其有效后,才能返回给客户端
[4] no-store  ---- 请求和响应都禁止被缓存
[4] max-age:   ----- 本响应包含的对象的过期时间
[5] Must-revalidate    ---- 如果缓存过期了,会再次和原来的服务器确定是否为最新数据,而不是和中间的proxy          ---- Must  [məst]   必须      revalidate [rɪ'vælɪdeɪt]  使重新生效
[6] max-stale  ----  允许读取过期时间必须小于max-stale 值的缓存对象。
[7] proxy-revalidate  ---- 与Must-revalidate类似,区别在于:proxy-revalidate要排除掉用户代理的缓存的。即其规则并不应用于用户代理的本地缓存上。
[8] s-maxage  ---- 与max-age的唯一区别是,s-maxage仅仅应用于共享缓存.而不应用于用户代理的本地缓存等针对单用户的缓存. 另外,s-maxage的优先级要高于max-age.
[9] no-transform   ---- 告知代理,不要更改媒体类型,比如jpg,被你改成png.

Expires     -- [iksˈpaiəz] 过期时间

Cache-control 用于控制HTTP缓存(在HTTP/1.0中可能部分没实现,仅仅实现了 Pragma: no-cache)
Expires 表示存在时间,允许客户端在这个时间之前不去检查(发请求),等同max-age的效果。但是如果同时存在,则被Cache-Control的max-age覆盖。   ---- Expires [iksˈpaiəz]  过期时间

格式:Expires    Tue, 02 Jan 2018 03:44:20 GMT

Content-Encoding 是HTTP协议的响应报文头       -----Encoding [ɪn'kəʊdɪŋ]  编码模式

一般形式如:Content-Encoding:gzip,deflate,compress

Content-Type

MediaType,即是Internet Media Type,互联网媒体类型;也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。
例如: Content-Type: text/html;charset:utf-8;

 常见的媒体格式类型如下:

        text/html : HTML格式
        text/plain :纯文本格式     
        text/xml :  XML格式
        image/gif :gif图片格式   
        image/jpeg :jpg图片格式
        image/png:png图片格式

   以application开头的媒体格式类型:    ---- application [ˌæplɪˈkeɪʃn]  应用

       application/xhtml+xml :XHTML格式
       application/xml     : XML数据格式
       application/atom+xml  :Atom XML聚合格式   
       application/json    : JSON数据格式
       application/pdf       :pdf格式
       application/msword  : Word文档格式
       application/octet-stream : 二进制流数据(如常见的文件下载)
       application/x-www-form-urlencoded : <form encType=””>中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)

Date:Date头域表示消息发送的时间,缓存在评估响应的新鲜度时要用到,时间的描述格式由RFC822定义。例如,Date: Thu, 11 Jul 2015 15:33:24 GMT。
Age:当代理服务器用自己缓存的实体去响应请求时,用该头部表明该实体从产生到现在经过多长时间了。例如,Age:147 (秒)

Last-modified  文件在服务器端最后被修改的时间                  ---- Last  最后一个     modified  ['mɒdɪfaɪd] 修改日期

例如:Last-Modified:    Mon, 25 Dec 2017 05:44:15 GMT

 更新原理:
  1、在浏览器首次请求某个资源时,服务器端返回的状态码是200 (ok),内容是你请求的资源,同时有一个Last-Modified的属性标记(Reponse Header),标识此文件在服务期端最后被修改的时间,格式:Last-Modified:Tue, 24 Feb 2009 08:01:04 GMT
  2、浏览器第二次请求该资源时,根据HTTP协议的规定,浏览器会向服务器传送If-Modified-Since报头(Request Header),询问该文件是否在指定时间之后有被修改过,格式为:If-Modified-Since:Tue, 24 Feb 2009 08:01:04 GMT
  3、如果服务器端的资源没有变化,则服务器返回304状态码(Not Modified),内容为空,这样就节省了传输数据量。当服务器端代码发生改变,则服务器返回200状态码(ok),内容为请求的资源,和第一次请求资源时类似。从而保证在资源没有修改时不向客户端重复发出资源,也保证当服务器有变化时,客户端能够及时得到最新的资源。

Transfer-Encoding(传输编码): chunked    ----chunked   [tʃɪŋkt]  龟裂的

表示输出的内容长度不能确定,普通的静态页面、图片之类的基本上都用不到这个。
但动态页面就有可能会用到,但我也注意到大部分asp,php,asp.net动态页面输出的时候大部分还是使用Content-Length,没有使用Transfer-Encoding: chunked。
不过如果结合:Content-Encoding: gzip 使用的时候,Transfer-Encoding: chunked还是比较有用的。

Vary (标头):Accept-Encoding           ---- Vary  [ˈveəri] 变化    accept [əkˈsept] 接受

 性能优化里有一项叫指定“Vary:Accept-Encoding”标头,用一句话来说明它的意义,就是“告诉代理服务器缓存两种版本的资源:压缩和非压缩,这有助于避免一些公共代理不能正确地检测Content-Encoding标头的问题
 先来看看下面这幅图:

 设想有两个客户,一个使用的旧浏览器不支持压缩,一个使用新的浏览器支持压缩,如果他们都请求同一个网页,那么取决于谁先请求,压缩或非压缩版本便存储在CDN上。这样问题就出现了,旧浏览器请求常规网页但获得缓存的压缩版本,而新浏览器会获得缓存的非压缩版本但尝试去“解压”它。无论哪种方式都是坏消息。解决方法是,源服务器回送“Vary: Accept-Encoding”。
      现在的中间CDN会存储独立的缓存条目,一个是Accept-encoding: gzip ,而如果你没有发送header,则存储另一个。
      标头“Vary:Accept-Encoding”指定方法
      现在的新浏览器都支持压缩了,因此如果网站启用了GZip,可以无需再指定“Vary: Accept-Encoding”标头,不过指定“Vary: Accept-Encoding”标头会有更高的保险,而它并不需要你额外的开销,为什么不指定呢? 

X-UA-Compatible       ----Compatible [kəmˈpætəbl]  兼容

X-UA-Compatible是自从IE8新加的一个设置,对于IE8以下的浏览器是不识别的。 通过在meta中设置X-UA-Compatible的值,可以指定网页的兼容性模式设置。
在网页中指定的模式优先权高于服务器中(通过HTTP Header)所指定的模式。 兼容性模式设置优先级

 常用的例子:
<meta http-equiv="X-UA-Compatible" content="IE=7">

X-Firefox-Spdy

SPDY(读作“SPeeDY”)是Google开发的基于TCP的传输层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。新协议的功能包括数据流的多路复用、请求优先级以及HTTP报头压缩。谷歌表示,引入SPDY协议后,在实验室测试中页面加载速度比原先快64%
在UI上,没有任何元素标明你正在使⽤http2。但想确认也并不复杂,⼀种⽅法是启⽤“Web developer->Network”,再查看响应头⾥⾯服务器发回来的内容。这个响应是“HTTP/2.0”,并且Firefox也插⼊了⼀个⾃⼰头“X-Firefox-Spdy:”
例:X-Firefox-Spdy: h2      在火狐浏览器里查看是否使用了http2
 

 <---请求头--->

Accept 属于请求头

1. Accept属于请求头, Content-Type属于实体头。
Http报头分为通用报头,请求报头,响应报头和实体报头。
请求方的http报头结构:通用报头|请求报头|实体报头
响应方的http报头结构:通用报头|响应报头|实体报头

2. Accept代表发送端(客户端)希望接受的数据类型
比如:Accept:text/xml;
代表客户端希望接受的数据类型是xml类型

3. Content-Type代表发送端(客户端|服务器)发送的实体数据的数据类型。
比如:Content-Type:text/html;
代表发送端发送的数据格式是html。

请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
常用的请求报头
Accept           ----Accept   [əkˈsept]  接收
Accept请求报头域用于指定客户端接受哪些类型的信息。eg:Accept:image/gif,表明客户端希望接受GIF图象格式的资源;Accept:text/html,表明客户端希望接受html文本。
Accept-Charset       -----Charset    [t'ʃɑ:set]  编码格式
Accept-Charset请求报头域用于指定客户端接受的字符集。eg:Accept-Charset:iso-8859-1,gb2312.如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。
Accept-Encoding       -----Encoding  [ɪn'kəʊdɪŋ]  字符编码
Accept-Encoding请求报头域类似于Accept,但是它是用于指定可接受的内容编码。eg:Accept-Encoding:gzip.deflate.如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。
Accept-Language      ----Language   [ˈlæŋgwɪdʒ]   语种
Accept-Language请求报头域类似于Accept,但是它是用于指定一种自然语言。eg:Accept-Language:zh-cn.如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。
Authorization
Authorization请求报头域主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。
Host(发送请求时,该报头域是必需的)
Host请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的,eg:
我们在浏览器中输入:http://www.guet.edu.cn/index.html
浏览器发送的请求消息中,就会包含Host请求报头域,如下:
Host:www.guet.edu.cn
此处使用缺省端口号80,若指定了端口号,则变成:Host:www.guet.edu.cn:指定端口号
User-Agent
我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息。User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。不过,这个报头域不是必需的,如果我们自己编写一个浏览器,不使用User-Agent请求报头域,那么服务器端就无法得知我们的信息了。
请求报头举例:
GET /form.html HTTP/1.1 (CRLF)
Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)
Accept-Language:zh-cn (CRLF)
Accept-Encoding:gzip,deflate (CRLF)
If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
Host:www.guet.edu.cn (CRLF)
Connection:Keep-Alive (CRLF)
(CRLF)

Cookie

Cookie是用于维持服务端会话状态的,通常由服务端写入,在后续请求中,供服务端读取。
格式:Cookie:_ga=GA1.2.1691816690.150002439…1668657670.1514857430; _gat=1

 Host

Host:客户端指定自己想访问的http服务器的域名/IP 地址和端口号。
如: Host: www.6san.com:8080
 
Pragma    ---- Pragma [p'ræɡmə]  特殊指令
 Pragma: no-cache:跟Cache-Control: no-cache相同,Pragma: no-cache兼容http 1.0Cache-Control: no-cache是http 1.1提供的。因此,Pragma: no-cache可以应用到http 1.0 和http 1.1,而Cache-Control: no-cache只能应用于http 1.1.
 
Upgrade-Insecure-Requests         ---- Upgrade [ˌʌpˈgreɪd]  升级    Insecure  [ˌɪnsɪˈkjʊə(r)] 不安全的    Request [rɪˈkwest] 对象
如果在https的页面需要加载http的资源,那么浏览器就会报错或者提示,为了促进用户升级协议,同时不需要网站开发者劳师动众地把整个网站的http资源改成https资源,chrome增加一个Upgrade-Insecure-Requests: 1头,告诉服务器,浏览器可以处理https协议,然后服务器返回Content-Security-Policy: upgrade-insecure-requests头,或者通过meta头设置,告诉浏览器,对于页面的http资源,请求时可以自动升级到https,比如在https的网站上有一张图片url是http://localhost/1.jpg,浏览器请求时会把url变成https://localhost/1.jpg,所以这里首先需要服务器在端有相对应的资源。但是有一种情况例外,那就是https网站中a标签对应的外站资源不会被升级,比如a网站有一张b网站的链接,那么这个链接对应的url不会升级
格式:Upgrade-Insecure-Requests:1
 
User-Agent    ---- Agent  [ˈeɪdʒənt]  代理
User-Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示,但通过伪装 UA 可以绕过检测。
例:User-Agent:Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/57.0

If-Modified-Since       ----Since   [sɪns]  自从; 既然; 因为; 以来

格式:If-Modified-Since Mon, 25 Dec 2017 05:08:41 GMT     (304状态下能看到这个头)

If-Modified-Since是标准的HTTP请求头标签,在发送HTTP请求时,把浏览器端缓存页面的最后修改时间一起发到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行比较
如果时间一致,那么返回HTTP状态码304(不返回文件内容),客户端接到之后,就直接把本地缓存文件显示到浏览器中。
如果时间不一致,就返回HTTP状态码200和新的文件内容,客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示到浏览器中。

原文地址:https://www.cnblogs.com/kangleweb/p/8097755.html