• 《图解HTTP》HTTP首部(1)


    一、HTTP报文首部

      HTTP结构包括:报文首部、空行、报名主体

      

      HTTP请求报文包括:方法、URI、HTTP版本、HTTP首部字段

      

       HTTP响应报文包括:HTTP版本、状态码、HTTP首部字段

       

    二、HTTP首部字段

    1、HTTP首部字段传递重要信息

      首部字段:给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容

    2、HTTP首部字段结构

      HTTP首部字段:由首部字段名和字段值构成的,中间用冒号":"分隔

      如:Content-Type:text/html (表示报文主体对象类型为 text/html)

      注意:若HTTP首部字段重复,不同浏览器内部处理逻辑会不一样。

    3、4种HTTP首部字段类型

      通用首部字段

      请求首部字段

      响应首部字段

      实体首部字段

    4、HTTP1.1首部字段一览

      通用首部字段

     

       请求首部字段

       响应首部字段

       实体首部字段

    5、非HTTP1.1首部字段

      其他使用比较频繁的:Cookie、Set-Cookie、Content-Disposition

    6、End-to-end首部和Hop-by-hop首部

      HTTP首部字段的两种类型:缓存代理和非缓存代理

      端到端的首部:首部会转发给请求/响应到最终接收目标,必须保存在由缓存生产的响应中,必须被转发。

      逐跳首部:只对单次转发有效,会因缓存、代理不转发。如果使用Hop-by-hop,需提供Connection。

      逐跳首部只包括:Connection、Keep-Alive、Proxy-Authenticate、Proxy-Authorization、Trailer、TE、Transfer-Encding、Upgrade

    三、HTTP1.1通用首部字段

    1、Cache-Control:操作缓存的工作机制

    (1)表示是否能缓存的指令   

        public指令:Cache-Control:public  其他用户都可以使用缓存

        private指令:Cache-Control:private  对特定的用户提供资源缓存服务;其他用户发送的请求,代理服务器不会返回缓存

        no-cache指令:cache-Control:no-cache=location

           目的:防止从缓存中返回过期的资源

           客户端发送的no-cache指令:客户端不会接收缓存的响应,需要让缓存服务器把客户端的请求转发给源服务器

           服务器响应的no-cache指令:缓存服务器不能对资源进行缓存,源服务器不再对缓存服务器请求中的资源有效性进行确认,禁止缓存服务器对响应资源进行缓存

    (2)控制可执行缓存的对象的指令

        no-store指令:Cache-Control:no-store   缓存不能在本地存储请求或响应的任意部分

      指定缓存期限和认证的指令

        s-maxage指令:Cache-Control:s-maxage=604800  适用供多位用户使用的公共缓存服务器(对同一用户重复返回响应的服务器是没有作用的),直接忽略对Expires首部字段及max-age指令的处理

        max-age指令:Cache-Control:max-age=604800  缓存资源的缓存时间小于指定时间,客户端就接收缓存资源(若为0,则需要缓存服务器转发给源服务器)。缓存服务器不再对资源的有效期进行确认,max-age数值表示资源缓存的最长时间。http/1.1版本的缓存服务器会优先处理max-age指令,忽略Expires首部字段。http/1.0正相反。

        min-fresh指令:Cache-Control:min-fresh=60   缓存服务器返回还未到指定时间的缓存资源(超过有效期的资源无法作为响应返回了)

        max-stale指令:Cache-Control:max-stale=3600   缓存资源即使过期也照常接收(若没有参数,客户端永久接收;若指令的具体数过期了,只要在max-stale指定的时间内,客户端仍接收)

        only-if-cached指令:Cache-Control:only-if-cached  客户端仅在缓存服务器本地缓存目标资源情况下还会要求其返回。(缓存服务器不重新加载响应,也不确认资源有效性,若本地缓存无响应,返回504Gateway Timeout)

        must-revalidate指令:Cache-Control:must-revalidate  代理向源服务器再次验证即将返回的响应是否有效(若无法连接源服务器返回504Gateway Timeout)会忽略请求max-stale指令(即使已经在首部使用了max-stale,也不会有效果)

        proxy-revalidate指令:Cache-Control:proxy-revalidate  所有的缓存服务器在接收到客户端带有该指令的请求返回响应前,必须再次验证缓存的有效性。

        no-transform指令:Cache-Control:no-transform   请求或响应中,缓存不能改变实体主体的媒体类型(防止缓存或代理压缩图片等)

    (3)Cache-Control扩展

        cache-extension token : Cache-Control:private,community="UCI"   只能对理解他的缓存服务器有意义(借助extension tokens实现某些指令的添加,若缓存服务器不理解就会忽略)

    2、Connection

      控制不再转发给代理的首部字段(Hop-by-hop首部)

      

      管理持久连接

      HTTP/1.1版本默认连接是持久性连接。服务器想断开连接,需使用Connection:Close

      之前的HTTP版本默认是非持久性连接。若想持续连接,需使用Connection:Keep-Alive

    3、Date

      HTTP/1.1RFC1123中规定的日期 Date:Tue,03 Jul 2012 04:40:59 GMT

      之前的HTTP版本RFC850中规定的日期 Date:Tue,03-Jul-12 04:40:59 GMT

      与C标准库内的asctime()函数输出一致 Date:Tue,Jul 03 04:40:59 2012

    4、Pragma

      Pragma:no-cache  为了兼容HTTP/1.0而定义的

      

      中间服务器是HTTP/1.1协议的,直接采用:Cache-Control:no-cache指定缓存方式

      中间服务器是HTTP/1.0协议的,需要采用: pragma:no-cache 的缓存方法

      因此发送的请求会同时包含这两个首部字段

    5、Trailer

      事先说明在报文主体后记录了哪些首部字段,适用于:HTTP/1,1版本分块传输编码

    6、Transfer-Encoding

       传输报文主体时采用的编码方式,HTTP/1.1的传输编码方式只对分块传输编码有效

      

    7、Upgrade

      首部字段Upgrde用于检测http协议或其他协议是否可以使用更高的版本进行通信,其参数值可以指定一个完全不同的通信协议

    8、Via

      使用首部字段Via:为了追踪客户端与服务器之间的请求和响应报文的传输路径。

      报文在经过代理或网关时,会先在首部子段Via中附加该服务器的信息,然后再进行转发。

      Via首部是为了追踪传输路径,所以经常会和trace方法发送请求(其中Max-Forwards:0时,代理服务器就不转发该请求了,直接增加via并返回请求的响应)

    9、Warning

      Warning:[警告码][警告主机:端口号]"[警告内容]"([日期时间])

      该首部通常会告知用户一些与缓存相关的问题的警告。

      Waring首部的格式如下。最后的日期时间可以省略。

     

     

  • 相关阅读:
    offsetLeft,Left,clientLeft的区别
    IIS 内部运行机制
    常用正则表达式
    千万不要把 bool 设计成函数参数
    ASP.NET第一课,IIS安装与配置
    将字符串转为变量名(C#)
    淘宝技术发展
    C# 反射机制
    技术普及帖:你刚才在淘宝上买了一件东西
    高性能分布式计算与存储系统设计概要——暨2012年工作3年半总结
  • 原文地址:https://www.cnblogs.com/zhuxr/p/14162055.html
Copyright © 2020-2023  润新知