请求报文和响应报文的组成

HTTP-首部常用字段 - 图1

  • 『请求行』

请求的方法,请求URI以及HTTP版本

  • 『状态行』

响应结果的状态码,原因短语和HTTP版本

  • 『首部字段』

请求和响应的各种条件和属性的各类首部。分别是:通用首部、请求首部、响应首部和实体首部。

  • 『其他』

其他HTTP的RFC里未定义的首部(如Cookie等)


常用首部字段

提供客户端请求和服务端响应的所需要的信息


通用首部字段(General HeaderFields)

请求报文和响应报文两方都会使用的首部


Cache-Control(操作缓存的工作机制)

🌰: Cache-Control:private,maxage=0,nocache

指令参数解析:

缓存请求指令值:

Cache—Control:no-cache』 『Cache-Control:no-store』 『Cache-Control:max-age=[秒]

  • no-cache

目的是为了防止从缓存中返回过期的资源。如『请求』中包含no-cache指令,客户端将不会接收缓存过的响应。『中间』的缓存服务器必须把客户端请求转发给源服务器

HTTP-首部常用字段 - 图2

  • max-age=[秒]

客户端发送的请求中包含max-age』,判定缓存资源的缓存时间数值比指定时间的数值更,那么客户端就接收缓存的资源。当指定max-age值为0,那么缓存服务器通常需要将请求转发给源服务器。当『服务器返回的响应中包含max-age指令』时,『缓存服务器』将不对资源的有效性再作确认,而max-age数值代表资源保存为缓存的最长时间。

响应请求指令值:

Cache-Control:private』『Cache-Control:public』『Cache-Control:no-cache』『Cache-Control:max-age=[秒]』『Cache-Control:must-revalidate

  • public

public指令时,表明其他用户也可利用缓存

  • private

缓存服务器对特定用户提供资源缓存的服务,

  • no-cache

服务器返回的响应中包含no-cache指令,则缓存服务器不能对资源进行缓存。源服务器以后也将不再对缓存服务器请求中提出的资源有效性进行确认,且禁止其对响应资源进行缓存操作

  • max-age=[秒]

服务器返回的响应中包含max-age指令时,max-age数值代表资源保存为缓存的最长时间,其缓存服务器将不对资源的有效性再作确认(在有效的max-age内)

  • must-revalidate(必须重新验证)

代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效。若代理无法连通源服务器再次获取有效资源的话,缓存必须给客户端一条504(Gateway Timeout)状态码


Connection

①:管理持久连接: (‘持久连接可以节省通信量’)

客户端与服务端持久连接上连续发送请求:『Connection: Keep-alive

如服务器想断开链接: 『Connection: close

持久连接使得多数请求以『管线化(pipelining)』方式发送,不用等待响应亦可直接发送下一个请求。这样就能够做到同时并行发送多个请求,而不需要一个接一个地等待响应了。(管线化技术出现之前,发送请求后需等待并收到响应,才能发送下一个请求。)

Date

创建HTTP报文的日期和时间

Date:Tue,03Jul201204:40:59GMT

Transfer-Encoding

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

Transfer-Encoding:chunked



请求首部字段

从客户端往服务器端发送请求报文中所使用的字段,用于补充请求的附加信息、客户端信息、对响应内容相关的优先级等内容

Accept

Accept首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。使用type/subtype(次要)形式,一次指定多种媒体类型。

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

q=0~1(可精确到小数点后3位)表示权重值,用『分号』与需要增加优先级的格式隔开 例子application/xml;q=0.9

Accept-Charset

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

Accept-Charset:iso88595,unicode11;q=0.8

Accept-Encoding

告知服务器用户代理支持的内容编码及内容编码的优先级顺序,服务器以何种方式打包数据给客户端

Accept-Encoding:gzip,deflate

Accep-Language

告知服务器用户代理能够处理的自然语言集

Accept-Language:zh-CN,zh;q=0.9,en;q=0.8

Host

Host会告知服务器,请求的资源所处的互联网主机名和端口号

Host:www.baidu.cn

Referer

首部字段Referer会告知服务器请求的原始资源的URI。

referer: https://cn.bing.com/images/trending?form=Z9LH

PS: Referer的正确的拼写应该是Referrer,但是一直沿用这个错误的拼写。

User-Agent

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

UserAgent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36


响应首部字段(ResponseHeader Fields)

服务器端向客户端返回响应报文中所使用的字段,用于补充响应的附加信息、服务器信息,以及对客户端的附加要求等信息。

Accept-Ranges

告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源。可指定的字段值有两种 bytes ,none

AcceptRanges:bytes

Location

将响应接收方引导至某个与请求URI位置不同的资源。该字段会配合『3xx:Redirection』的响应,提供重定向的URI

Location:http://www.usagidesign.cn/sample.html

Server

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

Server: nginx/1.4.6 (Ubuntu)



实体首部(EntityHeader Fields)

Allow

Allow用于通知客户端能够支持RequestURI指定资源的所有HTTP方法。当服务器接收到不支持的HTTP方法时,会以状态码405 MethodNotAllowed作为响应返回。

Allow:GET,HEAD

Content-Encoding

告知客户端服务器对实体的主体部分选用的内容编码方式。内容编码是指在不丢失实体信息的前提下所进行的压缩

Content-Encoding:gzip

Content-Language

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

Content-Language:zh-CN

Content-Type

说明了实体主体内对象的媒体类型。与首部字段Accept一样,字段值用type/subtype形式赋值

Content-Type:text/html;charset=UTF-8


Cookie服务的首部字段

Web网站为了管理用户的状态会通过Web浏览器,把一些数据临时写入用户的计算机内。接着当用户访问该Web网站时,可通过通信方式取回之前存放的Cookie

首部字段名 说明 首部类型
Set-Cookie 开始状态管理所使用的Cookie信息 响应首部字段
Cookie 服务器接收到的Cookie信息 请求首部字段

Set-Cookie

SetCookie:status=enable;expires=Tue,05Jul201107:26:31GMT;path=/;domain=.hackr.cn;


NAME=VALUE

赋予Cookie的名称和其值(必须项)

name=value;

expires

指定浏览器可发送Cookie的有效期

expires=Tue,05Jul201107:26:31GMT;

path

限制指定Cookie的发送范围的文件目录

secure

用于限制Web页面仅在HTTPS安全连接时,才可以发送Cookie。

Set-Cookie:name=value;secure

HttpOnly

使JavaScript脚本无法获得Cookie。其主要目的为防止跨站脚本攻击(Cross-site scripting,XSS)

Set-Cookie:name=value;HttpOnly

使用JavaScript的document.cookie就无法读取附加HttpOnly属性后的Cookie的内容了。因此,也就无法在XSS中利用JavaScript劫持Cookie了。


Cookie

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

Cookie:status=enable


其他首部

X-Frame-Options

属于HTTP响应首部,用于控制网站内容在其他Web网站的Frame标签内的显示问题。其主要目的是为了防止点击劫持(clickjacking)攻击。

X-Frame-Options: SAMEORIGIN

X-Frame-Options属于HTTP响应首部』,用于控制网站内容在其他Web网站的Frame标签内的显示问题。其主要目的是为了防止点击劫持(clickjacking)攻击。首部字段X-Frame-Options有以下两个可指定的字段值。『DENY:拒绝』『SAMEORIGIN:仅同源域名下的页面』(Toplevelbrowsingcontext)匹配时许可

X-XSS-Protection

属于HTTP响应首部,针对跨站脚本攻击(XSS)的一种对策,用于控制浏览器XSS防护机制的开关

X-XSS-Protection

  • 0:将XSS过滤设置成无效状态

X-XSS-Protection:1

  • 1:将XSS过滤设置成有效状态

参考:

《图解HTTP》


版权声明:本文为博主原创文章,未经博主许可不得转载


图片存档与语雀