1.HTTP报文的结构如图:
- 可以看到HTTP报文可以分为两部分:
- 首部:主要是客户端与服务器分别处理请求和响应提供所需要的信息
- 报文主体:就是用户在客户端请求资源信息
通用首部
请求报文和响应报文都会使用的首部
-
Cache-Control:控制是否缓存和缓存的信息
-
connection:
- 控制不再转发给代理
- 管理持久连接:HTTP/1.1都是默认持久连接的,如果想断开连接可以指定为close;HTTP/1.1之前的都是默认非持久连接,如果想维持持久连接可以指定为Keep-Alive
-
Date:表名创建报文的日期和时间
-
Pragma:历史遗留,向后兼容,用于客户端要求中间服务器不返回缓存的资源
Pragma:no-cache
Cache-Control:no-cache
- Trailer:说明报文主体记录了哪些首部字段(用于分块传输编码时)
- Transfer-Encoding:传输报文主体时采用的编码
Content-Type:text/javascript;charset=utf-8
- Upgrade:用于检测HTTP协议及其他协议是否可使用更高版本进行通信
- Via:用于追踪报文的转发和避免请求回环的发生
请求首部
补充请求的附加内容,客户端信息,响应内容相关优先级等信息
-
Accept:通知服务器,用户代理能够处理的媒体类型和媒体类型的相对优先级
-
文本文件:text/html,text/plain,text/css,application/xml
-
图片文件:image/jpeg,image/gif,image/png
-
视频文件:video/mpeg
-
二进制文件:application/zip
使用q来额外表示权重值,范围是0~1
-
-
Accept-Charset:通知服务器,用户代理能支持的字符集和字符集的相对优先级,可用权重q值来表示优先级
-
Accept-Encoding:通知服务器,用户代理支持的内容编码和优先级
- gzip
- compress
- deflate
- identity:不执行压缩或不会变化的默认编码格式
- *:可以使用通配符来指定任意的编码格式
-
Accept-Language:zh-cn,zh;q=0.7,en-us,en;q=0.3
-
Authorization:用户代理的认证信息(登录等验证信息)
-
Expect:告诉服务器,期望出现谋陷特定的性外,在等待状态码100响应的客户端在发生请求时,需要指定Expect:100-continue
-
From:告知服务器使用用户代理的用户的电子邮件地址
-
Host:告知服务器,请求资源所处的互联网主机名和端口号,必须包含(跨域)。服务器可以理解是哪个域名发送的请求
-
If-Match:条件请求;If-None-Match:相反
-
Max-Forwards:最多能经过多少台代理服务器转发。如Max-Forwards为0时服务器立即返回响应,可以用来判断是那台代理服务器出现问题
-
Proxy-Authorization:认证发生在客户端与代理之间,客户端与服务器之间的使用Authorization
-
Range:获取部分资源的范围请求
-
Referer:可以告诉服务器请求的原始资源的URI,就是从哪个Web页面发送请求的
-
te:告诉服务器客户端能够处理响应的传输编码方式及相对优先级,与Accept-Encoding:很像不过这个是能够处理的传输编码
-
User-Agent:告诉服务器创建请求的浏览器和用户代理名称等信息
响应首部
补充了响应的附加内容,也会包含客户端要求附加额外的内容信息
-
Accept-Ranges:bytes/none 告诉客户端服务器是否能处理范围请求已指定获取服务器端某个部分的资源
-
age:告诉服务器在多久前创建了响应
-
etag:告知客户端实体标识,资源被缓存时就会分配唯一性标识
-
location:用来将响应接收方引导至某个与请求URI位置不同的资源
-
Proxy-Authenticate:会把代理服务器需要的认证信息发送给客户端
-
Retry-After:告诉客户端多久之后再次发送请求,主要与503或3XX类状态码一起使用
-
Server:告诉客户端服务器安装的HTTP服务器应用程序的信息
-
Server: Apache/2.2.6 (Unix) PHP/7.2
-
Server: Tengine
-
实体首部
补充资源内容更新时间等与实体有关的信息
-
allow:允许使用的HTTP请求方法 allow: GET, HEAD
-
Content-Encoding:告诉客户端服务器对实习部分选用的内容的编码方式
Content-Encoding: gzip
-
Content-Language:告诉客户端实体主体使用的自然语言
-
Content-length:实体部分的大小
-
Content-Location:表示报文主体返回资源对应的URI
-
Content-MD5:对主体进行md5然后与这个进行比较
-
Content-Range:表示当前发送部分与整个实体大小
-
Content-type:实体主体的对象媒体类型和字符集
Content-Type: text/html; charset=UTF-8
-
expires:资源过期时间
-
last-modified:资源最终修改时间
Cookie相关首部
响应首部字段——set-cookie
举个栗子
Set-Cookie: wxid=hxh; expires=Mon, 25 Jul 2019 00:33:31 GMT;path = ; domian = ;secure; HttpOnly
主要包括几个属性:
- NAME = VALUE 设置键值对
- expires:设置有效期
- path:设置服务器上的文件目录作为使用对象,不指定为文档当前所在文件目录
- domain:作为cookie使用对象的域名,不指定为创建cookie的服务器的域名
- secure:指定进在HTTPS连接时才可以发送Cookie
- HttpOnly:防止XSS攻击获取Cookie,使js无法获得cookie
请求收字段——cookie
Cookie: status=enable
其他首部
- X-Frame-Options:控制Frame显示问题 DENY/SAMEORIGIN(同源域名下页面匹配时许可)
- X-XSS-Protection:0、1 控制浏览器XSS防护机制的开关,0设置无效状态,1相反
- DNT:拒绝个人信息被收集,0表示同意,1表示拒绝