HTTP首部

HTTP报文首部、空行、报文主体

HTTP首部

HTTP的首部字段:

       首部字段值:字段值   比如Content-Type:text/html 表示主题的对象类型

       4种HTTP首部字段类型:

              通用首部字段:请求报文和响应报文都会用

              请求首部字段:Request 从客户端向服务端发送时用的首部

              响应首部字段:Response 从服务器端向客户端返回响应报文

              实体首部字段:请求和响应报文肢体部分都会用的首部

       非HTTP / 1.1首部字段,比如Cookie等统一归纳在RFC4229 HTTP Header Field Registration中

End to end首部和Hop by hop首部

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

       逐跳首部:只对单次转发有效,会通过缓存或代理而不再转发

HTTP/1.1 通用首部字段

       Cache-Control 能操作缓存的工作机制

       表示能否缓存的指令:

              public指令  Cache-Control:public表示其他用户也可以利用缓存

              private指令  响应只以特定的用户作为对象

              no-cache指令 防止从缓存中返回过期的资源

                     如果是客户端发送的:表示不接受缓存过的响应

                     如果是服务器端返回的响应指令中包含no-cache指令,name缓存服务器不能对资源进行缓存

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

              no-store指令

                     暗示请求或响应中包含机密信息

                     并不是不缓存,而是不缓存过期的资源

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

              s-maxage指令

                     只适用于供多位用户使用的公共缓存服务器

              max-age指令

                     缓存事件比指定时间数值小,就接收缓存,另外当max-age=0时,缓存服务器将请求转发给源服务器。

                     在HTTP/1.1中,优先级max-age>Expires,在HTTP/1.0中 max-age<Expires

              min-fresh指令

                     在限定时间内有超过有效期限的资源无法作响应返回

              max-stale指令

                     指定缓存资源,即使过期也照样接收

              only-if-cached指令

                     指令要求缓存服务器不能重新加载响应,也不会再次确认资源有效性。若请求缓存服务器的本地缓存无响应,则返回状态码504

              must-revalidate指令

                     会向服务器再次验证即将返回的响应缓存是否仍然有效,无法获取返回504,而且这个指令会忽略请求的max-stale指令

              proxy-revalidate指令

                     要求缓存服务器在接收到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性

              no-transform指令

                     无论在请求还是响应中,缓存不能改变主体的媒体类型,可以防止代理压缩图片

              Cache-Control扩展

                     通过cache-extension标记token,可以扩展Cache-Control首部字段内的指令

                     比如Cache-Control: private, community=“UCI”可以扩展

              Connection首部字段

                     有两个作用:控制不再转发给代理的首部字段、管理持久连接

                     Connection:不再转发的首部字段名

                     管理持久连接:Connection: close  断开时使用close

                     HTTP/1.1默认是持久连接,HTTP:1.1之前是非持久连接。所以要想持续连接,需要指定Connection: Keep-Alive

              Date

                     表明HTTP报文的创建时期和时间

              Pragma

                     是HTTP/1.1之前的历史遗留字段,属于通用首部字段

                     Pragma: no-cache 要求所有中间服务器不返回缓存的资源

                     如果中间服务器是以HTTP/1.1为标准,则直接用Cache-Control: no-cache

              Trailer

                     会事先说明在报文主体后记录了那些首部字段,可以应用在HTTP/1.1分块传输编码时

              Transfer-Encoding

                     规定了传输报文主体时采用的编码方式

                     HTTP/1.1的传输编码仅对于分块传输编码有效

              Upgrade

                     用于监测HTTP协议是否可以使用更高版本进行通信

                     Upgrade对象仅限于客户端和相邻服务器,所以想要使用首部字段Upgrade时,还需要额外指定的Connection: Upgrade

              Via

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

                     Via不仅用于追踪报文的转发,还可以避免请求回环的发生,所以必须在经过代理时附加该首部字段的内容

                     Via首部是为了追踪传输路径,所以经常会和TRACE方法一起使用

              Warning

                     从HTTP/1.0的响应首部演变过来的,通常会告知用户一些与缓存相关的问题的警告

                     格式: Warning: [警告码] [警告的主机:端口号] “[警告内容]” ([日期时间])

请求首部字段

              请求首部字段是从客户端向服务器端发送请求报文中所使用的字段,用来补充请求的附加信息、客户端信息。

       Accept

       Accept-Charset

              可以通知服务器用户代理支持的字符集及字符集的相对优先顺序

       Accept-Encoding

              告知服务器用户代理支持的内容编码及内容编码的优先级顺序,内容编码的例子gzip、compress、deflate、identity

       Accept-Language

              告知服务器用户代理能够处理的自然语言集,可以按照权重q来表示相对优先级

       Authorization

              告知服务器,用户代理的认证信息(证书值)

       Expect

              告知服务器期望出现某种特定行为

       From

              告知服务器使用用户代理的用户的电子邮件地址

       Host

              虚拟主机运行在同一个IP上,因此使用首部字段HOST加以区分

       If-Match

              形如If-XXX这样的请求都可以称为条件请求,只有判断指定条件为真时,才会执行请求。

              只有当If-Match的字段值根ETag值匹配一致时,服务器才会接收请求

       If-Modified-Since

              在这个字段指定的日期时间后,资源发生了更新,服务器就会接收请求。

        If-None-Match

              与If-Match作用相反,当这个字段指定的字段值与请求资源的ETag不一致时,处理该请求

       If-Range

              字段值若跟ETag值或更新的日期时间匹配一致,那么就作为范围请求处理。

              不一致则忽略范围请求,返回全部资源。

              如果不适用首部字段If-Range则需要进行二次处理

       If-Unmondified-Since

              与If-Modified-Since作用相反,只有指定的请求资源在指定的日期时间后未发生更新的情况下才能处理请求。

       Max-Forwards

              可以以十进制整数的形式指定可经过服务器的最大数目。

              字段值为0时,服务器会立即返回响应。

       Proxy-Authorization

              告知服务器认证所需要的信息

       Range

              获取部分资源的范围请求,包含首部字段Range即可以告知服务器资源的指定范围

       Referer

              可以查看URI是从那个web页面发起的

       TE

              可以告知服务器客户端能够处理响应的传输编码方式及相对优先级

       User-Agent

              会将创建请求的浏览器和用户代理名称等信息传达给服务器

响应首部字段

       是由服务器端向客户端返回响应报文中所使用的字段

       Accept-Ranges

              服务器告诉客户端能否处理范围请求

       Age

              告知客户端源服务器在多久前创建了响应

       Etag

              首部字段ETag告知客户端实体标识,服务器会为每份资源分配对应的ETag值。

              资源更新时,ETag也会更新

              比如访问中文和英文版的网页,URI相同,但是对应的资源不同

              强ETag,不论实体发生多么细微的变化都会改变其值。

              弱ETag,提示资源是否相同。

       Location

              可以将响应接收方引导至某个与请求URI位置不同的资源。

              几乎所有浏览器在接收到包含首部字段的Location后都会强制性的尝试对已提示的重定向资源的访问。

       Proxy-Authenticate

              会把代理服务器要求的认证信息发给客户端

       Retry-After

              告诉客户端多久之后再次发送请求

       Server

              告诉客户端当前服务器上安装的HTTP服务器应用程序的信息。

       Vary

              首部字段可对缓存进行控制,源服务器会向代理服务器传达关于本地缓存使用方法的命令。

       WWW-Authenticate

              用于HTTP访问认证

实体首部字段

       包含在请求报文和响应报文中的实体部分所使用的首部,用于补充内容的更新事件等与实体相关的信息

       Allow

              通知客户端能够支持Request-URI指定资源的所有HTTP方法

       Content-Encoding

              告知客户端主体部分选用的内容编码方式

       Content-Language

              告知客户端实体主体使用的自然语言

       Content-Length

              表明了实体主体部分的大小

       Content-Location

              表示报文主体返回资源对应的URI

       Content-MD5

              客户端会对接收的报文主体执行相同的MD5算法,然后与首部字段Content-MD5的字段值比较

              要经过Base64编码处理,因为HTTP不能记录二进制值

       Content-Range

              告诉客户端作为响应返回的实体那部分符合要求

       Content-Type

              说明了实体主体内对象的媒体类型

       Expires

              会将资源失效的日期告知客户端

       Last-Modified

              指明资源最终的修改的时间

为Cookie服务的首部字段

       Set-Cookie

              属性:

              expires:指定浏览器发送cookie的有效期

              path: 指定Cookie的发送范围的文件目录

              domain:指定的域名可做到与结尾匹配一致

              secure:限制Web页面仅在HTTPS安全连接时,才可以发送Cookie,当省略这个属性时,无论HTTP还是HTTPS都会对Cookie进行回收

              httpOnly: 使JS脚本无法获得Cookie,防止XSS对Cookie信息的窃取

       Cookie

              会告知服务器,当客户端想要获得HTTP状态管理支持时,就会在请求在包含从服务器接收到的Cookie

其他首部字段

       X-Frame-Options

              响应首部,用于控制网站内容在其他Web网站的Frame标签内的显示问题,主要防止点击劫持攻击

       X-XSS-Protection

              控制浏览器XSS防护机制的开关

       DNT

              HTTP的请求首部,Do Not Track意思是拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法

       P3P

              利用在线隐私偏好平台把个人隐私变成仅供程序可理解的形式,达到保护隐私的目的

HTTP首部

上一篇:前端模块打包之Webpack


下一篇:11.json、AJAX