HTTP首部的构成
一次HTTP请求或响应的首部包括三个部分,报文首部,空行,以及报文主体。其中报文首部在请求和响应中有所不同,参见下图(图片来自《图解HTTP》一书):
请求首部
响应首部
区别:请求行相比状态行,要多一个URI标识,因为要说明请求的资源;另外还有各自的请求首部字段或响应首部字段。
常用首部字段
请求首部字段
- Accept系: 定义请求结果的要求,如Accept,Accept-Encoding,Accept-Language,Accept-Charset等。
- Host: 目标服务器的域和端口号,如
Host:www.demo.com
。 - Referer: 发起请求的页面URI,即
Referer:${window.location.href}
- User-Agent: 客户端信息,如
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
响应首部字段
- ETag: 某一个固定的URI资源发生变化时,ETag会更新,如
ETag:W/"92d8a6509d07d749ee661d8af47d2fbd"
- Server: HTTP服务器的应用程序信息,如
Server:Apache/2.2.6 (Unix) PHP/5.2.5
- Location: 引导客户端向某资源发起访问,一般配合状态码3xx使用,重定向请求,如
Location:http://www.demo2.com/index.html
。 - WWW-Authenticate: 告诉客户端认证方案,一般配合状态码
401 Unauthorized
使用,如WWW-Authenticate:Basic realm="Usagidesign Auth"
通用首部字段
- Cache-Control: 对于缓存服务器下达缓存控制的相关指令,具体指令有
no-cache
,no-store
,max-age = ${秒}
,public
,private
等。 - Connection: 控制代理不再转发的字段,管理持久连接。
如Connection:Upgrade
,那么在经过代理后,Upgrade首部字段将不会被发送至服务器。如Connection:Keep-Alive
。 - Date: 表示HTTP报文创建时间,如
Date:Fri, 19 Oct 2018 09:45:13 GMT
。 - Pragma: 兼容HTTP1.1以前的版本,控制缓存,如
Pragma:no-cache
。 - Transfer-Encoding: 报文传输时的编码方式,HTTP1.1仅对分块传输的编码形式有效,如
Transfer-Encoding:chunked
。
实体首部字段
- Allow: 资源允许的请求方式,如
Allow:GET, HEAD
。 - Expires: 资源过期时间,如
Expires:Fri, 20 Oct 2018 09:45:13 GMT
。 - Last-Modified: 资源最后一次修改的时间,如
Last-Modified:Fri, 15 Oct 2018 09:45:13 GMT
。
还有一些表示资源具体信息的,如Content-Encoding
,Content-Type
,Content-Language
,Content-Range
等。
Cookie相关,未被编入HTTP1.1 RFC2616标准中。
Cookie: 属于请求首部,携带符合条件的Cookie(domain,path,expires)发送至服务器。
Set-Cookie: 属于响应首部,告诉客户端需要保存哪些Cookie值,包括要种Cookie的domain,path,expires。
除了文中所列举的首部字段之外,还有很多其他的首部字段,感兴趣的朋友可以通过其他文章或资料来学习。
注:以上内容均整理自《图解HTTP》,如有侵权请联系我
网友评论