《图解HTTP》第6章HTTP首部 读书笔记

1.HTTP协议中的请求/响应报文必定包含HTTP首部。

2.当在报文中出现2个或以上相同的首部字段,有的会优先处理先出现的首部字段,有的会优先处理最后出现的首部字段。(因为没有明确的规范,浏览器有各自的处理逻辑)

3.内容编码:这是指在不丢失实体信息的前提下所进行的压缩。

4.首部字段分为四种:

  ①请求首部字段:请求报文用到的字段。

  ②响应首部字段:响应报文用到的字段。

  ③通用首部字段:请求/响应报文都会用到的首部。

  ④实体首部字段:主要描述关于实体主体的信息。

5.HTTP/1.1规范定义了47种首部字段。

6.请求首部字段如下:

  ①Accept:用户代理可处理的媒体类型

扫描二维码关注公众号,回复: 72809 查看本文章

      Accept:text/html(发给我HTML格式)

      Accept:text/html,text/plain(发给我HTML格式或者TEXT格式)

      Accept:image/jpeg(图片发给我jepg格式的)

      Accept:image/png;q=0.3,image/jpeg(q表示权重,范围是0-1,最大权重为1默认权重也为1,青优先发给我jpeg格式,没有的话发png格式)

  ②Accept-Charset:优先的字符集

      Accept-Charset:ascii,Unicode-1-1;q=0.4(同样可以设置权重)

  ③Accept-Encoding:优先的内容编码

      Accept-Encoding:gzip,deflate,identity(同样可以设置权重,identity是不执行压缩默认编码格式)

  ④Accept-Language:优先的自然语言

      Accept-Language:zh-cn,zh;q=0.7,en-us;q=0.4(我想要中文版,没有再给我英文版)

  ⑤Authorization:在服务器返回401状态码后,客户端需要把认证信息发回给服务器端。

      Authorization:Basic whndqiwqhndk==(把用户id和密码经过Base64编码后发送)

  ⑥Proxy-Authorization:代理服务器要求客户端的认证信息

      Proxy-Authorization:Basic djasoidoishaf==(把用户id和密码经过Base64编码后发送,和Authorization类似,只不过是发生在代理服务器中)

  ⑦Expect:期待服务器的特定行为

      Expect:100-continue

  ⑧From:用户的电子邮箱地址

      From:[email protected]

  ⑨Host:所请求资源的所在服务器。(HTTP/1.1规范内唯一一个必须被包含在请求内的首部字段)

      Host:www.alfredfly.com(多个虚拟主机运行在同一个IP上时,用这个Host字段加以区分)

  ⑩If-Match:比较实体标记(ETag)。这个实体标记是和实体资源关联在一起的,就像身份证号码一样。条件为真是,才会执行请求。

      If-Match:“12345”(如果实体资源是标记12345就发过来,如果不是,返回状态码412)

      If-Match:*(此时服务器会忽略ETag值,只要资源存在就会发过来)

  ⑩①If-None-Match:比较实体标记(与If-Mathc相反)。

      If-None-Match:“12345”(如果不是标记12345就发过来)

  ⑩②If-Modified-Since:比较资源的更新时间

      If-Modified-Since:Thu,15 Apr 2004 00:00:00 GMT(如果在这个时间之后资源有更新就发过来)

  ⑩③If-Unmodified-Since:比较资源的更新时间(与If-Modified-Since相反)

      If-Unmodified-Since:Thu,15 Apr 2004 00:00:00 GMT(如果在这个时间之后资源没有更新就发过来)

  ⑩④If-Range:范围请求。

      If-Range:”12345“(If-Range的字段值是ETag值或者时间,如果值和服务器的值匹配一致,就返回范围内的资源,如果不一致,就返回全部资源)

      Range:bytes=5001-10000

  ⑩⑤Range:实体的字节范围请求

      Range:bytes=5001-10000(客户端请求第5001字节至第10000字节的资源,如果无法处理这个请求,就返回全部资源)

  ⑩⑥Max-Forwards:最大传输逐跳数。

      Max-Forwards:8(主要配合TRACE方法和OPTIONS方法使用,客户端到服务器端可能会经过很多台代理服务器,每次减1,直至为0,这表示请求可以转发8次)

  ⑩⑦Referer:对请求中URI的原始获取方。

      Referer:http://www.qq.com/(譬如我需要从http://www.qq.com/点击进http://weixin.qq.com/时,就会出现这个首部字段)

  ⑩⑧TE:传输编码的优先级。

      TE:gzip,deflate;q=0.5(和Accept-Encoding很像,但是这用于传输编码)

  ⑩⑨User-Agent:HTTP客户端程序的信息。

      User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36(表示浏览器的种类,如手机浏览器或者PC版浏览器)

7.响应首部字段如下:

  ①Accept-Ranges:是否接受字节范围请求

      Accept-Ranges:bytes(表示可以接受字节范围请求)

      Accept-Ranges:none(表示接受字节范围请求)

  ②Age:推算资源创建经过时间

      Age:600(表示源服务器在10分钟前创建了响应)/(如果创建响应的是缓存服务器,则表示缓存后的响应再次发起认证认证完成的时间,代理创建响应时必须加上字段Age)

  ③ETag:资源的唯一标识,每份资源对应一个ETag值,当资源更新时,ETag也会更新

      ETag:“usagi-1234”(强ETag值,无论实体发生多么细微的变化都会改变其值)

      ETag:w/“usagi-1234”(弱ETag值,只有资源发生根本改变时,才会改变ETag值)

  ④Location:令客户端重定向至指定URI

      Location:http://www.alfredfly2.com(意思就是服务器转移了一个新网址,几乎所有浏览器在接收到Location字段后,都会自动尝试访问

  ⑤WWW-Authenticate:服务器对客户端的认证信息

      WWW-Authenticate:Basic realm=“Usagidesign Auth”(服务器要求客户端进行认证

  ⑥Proxy-Authenticate:代理服务器对客户端的认证信息

      Proxy-Authenticate:Basic realm=“Usagidesign Auth”(代理服务器要求客户端进行认证

  ⑦Retry-After:对再次发起请求时机要求

      Retry-After:600(告知客户端在10分钟后再次发起请求,一般配合状态码503 Service Unavailable使用)

      Retry-After:Web,04 jul 2018 06:34:24 GMT(告知客户端在这个时间之后再访问)

  ⑧Server:HTTP服务器的应用程序的安装信息

      Server:PHP/5.2.5(告知客户端,服务器上的应用程序信息,可能会包括版本号等)

  ⑨Vary:代理服务器缓存的管理信息

      Vary:Accept-Language(看不懂。)

8.通用首部字段如下:

  ①Cache-Control:控制缓存的行为

      缓存请求指令:

        Cache-Control:no-cache(强制向源服务器再次验证,对于客户端意思就是不要缓存,要从源服务器中拿资源)

        Cache-Control:no-store(不准缓存请求或响应的任何内容

        Cache-Control:max-age=【秒】(响应的最大Age值,意思是可以用一定期限内的缓存,即使缓存已经过期

        Cache-Control:max-stale(=【秒】)(接收已过期的响应)

        Cache-Control:min-fresh=【秒】(期望在指定时间内的响应仍有效)

        Cache-Control:no-transform(代理不可更改媒体类型)

        Cache-Control:only-if-cached(从缓存获取资源)

        Cache-Control:cache-extension(新指令标记)

      缓存响应指令:

        Cache-Control:public(可向任意方提供响应的缓存,谁都可以用这个缓存)

        Cache-Control:private(仅向特定用户返回缓存,这份缓存只可以给特定的家伙哦)

        Cache-Control:no-cache(缓存前必须确认其有效性,对于服务器端的意思是缓存服务器不准缓存过期的资源

        Cache-Control:no-store(不准缓存请求或者响应的任何内容

        Cache-Control:no-transform(代理不可以更改媒体类型)

        Cache-Control:must-revalidate(可缓存但是必须再源服务器确认

        Cache-Control:proxy-revalidate(要求中间缓存服务器,对缓存的响应有效性再进行确认

        Cache-Control:max-age=【秒】(响应的最大Age值,意思是可以用一定期限内的缓存,即使缓存已经过期

        Cache-Control:s-maxage=【秒】(公共缓存服务器响应的最大Age值,意思基本上和max-age一样)

        Cache-Control:cache-extension(新指令标记)

  ②Connection:可以删除不再发送的首部字段,或管理持久连接

        Connection:Upgrade(表示删除Upgrade首部字段)

        Connection:Close(表示断开持久连接)  

  ③Date:创建报文的日期时间

        Date:Tue,03 Jul 2018 04:40:59 GMT(表示报文是在这个时间创建的)

  ④Pragma:报文指令

        Pragma:no-cache(表示我不接受缓存,这是旧版本HTTP/1.0遗留下来的首部字段,为了向下兼容而保留)

  ⑤Trailer:报文末端的首部一览

        Trailer:Expires(提醒用户在报文主体后面还有一个首部字段Expires)

  ⑥Transfer-Encoding:指定报文主体的传输编码方式

        Transfer-Encoding:chunked(规定了传输报文主体时采用的编码方式,仅对分块传输编码有效)

  ⑦Ungrape:升级为其他协议

        Upgrade:TLS/1.0(表示要用更高的版本通信,Upgrade字段产生作用的对象仅限于客户端和邻接服务器之间,通常和字段Connection:Upgrade配合使用)

  ⑧Via:代理服务器的相关信息,是为了追踪客户端和服务器端之间请求/响应报文传输路径

        Via:1.0 gw.hackr.jp(Squid/3.1), 1.1 al.example.com(Squid/2.7)(这里记录了两台代理服务器的信息)

  ⑨Warning:错误通知,通常用来告知用户一些关于缓存的错误。

        Warning:【警告码】【警告的主机:端口号】“【警告内容】”(【日期时间】)

        Warning:113 gw.hackr.jp:8080 "Heuristic expiration" Tue,03 Jul 2018 05:09:44 GMT

        HTTP/1.1中定义了7种警告码,警告码具备扩展性

        110 Response is stale 代理返回已过期的资源

        111 Revalidation failed 代理再验证资源有效性时失败

        112 Disconnection operation 代理与互联网连接被故意切断

        113 Heuristic expiration 响应的使用期超过24小时

        199 Miscellaneous warning 任意的警告内容

        214 Transformation applied 代理对内容编码或媒体类型等执行了某些处理时

        299 Miscellaneous persistent warning 任意的警告内容

9.实体首部字段如下:

  ①Allow:资源可支持的HTTP方法

        Allow:GET,HEAD(表示通知客户端,服务器端只接收这两个方法,如果接收到不支持的方法是,会返回状态码405)

  ②Content-Encoding:实体主体使用的编码方式

        Content-Encoding:gzip(告知客户端和服务器对实体主体所选用的内容编码方式,内容编码是指在不丢失实体信息的前提下所进行的压缩

  ③Content-Language:实体主体的自然语言

        Content-Language:zh-CN(表示实体主体所使用的自然语言是中文)

  ④Content-Length:实体主体大小(单位:字节)

        Content-Length:15000(表明了实体主体的大小是15000字节)

  ⑤Content-Location:替代对应资源的URI

        Content-Location:http://www.hackr.jp/index-ja.html(表示的是报文主体返回资源对应的URI,当返回的页面内容与实际请求的对象不同时,首部字段Content-Location内会写明URI)

  ⑥Content-MD5:实体主体的报文摘要,目的主要在于检查报文主体在传输过程中是否保持完整

        Content-MD5:OGFkZDUwNGVhNGY3N2MxMDIwZmQ4NTBmY2IyTY== (这串东西是报文主体经过MD5算法生成的值,再经过Base64编码得来)

  ⑦Content-Range:实体主体的位置范围

        Content-Range:bytes 5001-10000/10000(表示实体主体的范围)

  ⑧Content-Type:实体主体的媒体类型

        Content-Type:text/html;charset=UTF-8(说明了实体主体的媒体类型)

  ⑨Expires:实体主体过期的日期时间

        Expires:Wed,04 Jul 2018 08:26:05 GMT(这个是资源失效的时间,对于缓存服务器来说,在这个时间之前,都可以用这份缓存,之后的话,就要向源服务器转发请求了)

  ⑩Last-Modified:资源的最后修改日期时间

        Last-Modified:Wed,04 Jul 2018 08:26:05 GMT(资源最终的修改时间)

10.端到端首部(End-to-end Header):这一类首部字段会转发给最终接收目标,且必需保存在缓存生成的响应中,而且必需转发

11.逐跳首部(Hop-by-hop Header):这一类首部字段只对单次转发有效。

12.为Cookie服务的首部字段:

  ①Set-Cookie:这个属于响应首部字段,表示服务器要开始准备管理你这个客户端的状态了,现在要通知你各种信息。

        Set-Cookie:status=enable;expires=Tue,05 Jul 2018 07:26:31 GMT;path=/; domain=.hackr.jp;

        Set-Cookie字段的属性的说明如下:

          NAME=VALUE 赋予Cookie的名称和其(必需项)

          expires=DATE 这是Cookie的有效期,如果不明确指定则默认为浏览器关闭的时候Cookie失效。

          path=PATH 将服务器上的文件目录作为Cookie的适用对象(若不指定则默认为文档所在的文件目录

          domain=域名 作为Cookie适用对象的域名(若不指定则默认为创建Cookie服务器的域名

          Secure 在HTTPS安全通信时才会发送Cookie

          HttpOnly 加以限制,使Cookie不能被JavaScript脚本访问

  ②Cookie:表示客户端想获得服务器的状态管理支持

        Cookie:status=enable

13.其他首部字段:

  ①X-Frame-Options:用于防止点击劫持攻击。原理是通过控制网站内容在其他网站的Frame标签内的显示情况。这属于HTTP响应首部字段。

          X-Frame-Options:DENY(拒绝显示)

          X-Frame-Options:SAMEORIGIN(仅同源域名下的页面匹配时许可)

  ②X-XSS-Protection:用于应对跨站脚本攻击(XSS)的一种对策,用于控制浏览器XSS防护机制的开关,属于HTTP响应首部字段。

          X-XSS-Protection:0(过滤设置成无效状态)

          X-XSS-Protection:1(过滤设置成有效状态)

  ③DNT:这是Do Not Track的缩写,意思为拒绝个人信息被收集,是一种拒绝被精准广告追踪的方法,属于HTTP请求首部字段。

          DNT:0(表示同意被追踪)

          DNT:1(表示拒绝被追踪)

  ④P3P:P3P技术,让Web网站上的个人隐私编程一种仅供程序可理解的形式,以达到保护用户隐私的目的,属于HTTP响应首部字段。

          P3P:CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"

14.X-前缀:这个X-前缀意思就是这个首部字段不是在HTTP协议的标准中。

猜你喜欢

转载自www.cnblogs.com/Alfred-ou/p/8944740.html