首部:指的就是一种格式而已,而这种格式指的就是名称+值,比如content-type:images/gif明确要求要传输的内容类型必须是gif的图片,这是一个响应的报文,在一个报文当中首部可以有多个.
首部大体可以分为五类:
-
通用首部
-
请求首部
-
响应首部
-
实体首部,用于指定实体的属性
-
扩展首部:非标准首部,可能是由程序开发者创建的,例如X-Forward-For
1、通用首部
一看名字就知道这是通用的首部,哪个和哪个通用呢?当中是请求和响应通用。
connection:定义c/s之间关于请求的有关选项,比如对于http1.0版本来讲有一个首部有这样的
connection:keep-alive #由于1.0并不是原生支持保持连接,所以我们要明确指定,1.0默认是不支持的。
VIA: #报文经过了哪些代理,比如一个游戏服务器其实是内网,用的端口映射到外网,那么这防火墙就是一个代理。
cache-control: #缓存指示,1.1比较常用在这里先提一下,后面还会再讲,用于控制缓存的生效机制
pragma #这个选项知道即可,主要用于1.0的版本当中,功能与cache-control类似,与缓存相关
2、请求首部
2.1 必有首部
Client-IP 客户端的IP地址,为会要加IP?不是在封装的时候会封装的吗?下文当中有解释
HOST: 请求的主机名和端口号,加虚拟主机的原因是虚拟主机环境下用于不同的虚拟主机
Rferer: 指明了请求当前资源的原始资源的URL,从哪里跳转过来的,可用于防止盗链
User-Agent: 用户代理,使用什么工具发出的请求,就是用的什么浏览器
Accept首部: 用户标明客户自己更倾向的使用的方式。
accept-charset:支持使用字符表
accept-encoding:支持使用的编码方式
accept-language:支持使用的语言
client-ip
:在这里加IP的原因是,当客户端的请求到达服务器的时候,源/目标IP 源/目标端口 都会被内核拆掉,应用层不知道这个数据认谁发起的,如果想要让位于用户空间的的http进程知道的话就得在应用层的信息也要加上IP地址,其实这个不加也是可以的,服务器也会有别的办法的。
rferer
:如果我们在A网页还有超链接那么我们可以到B网页,那么到B网页的方式有两种,一是在浏览器输入URL,二就是从别的网页当中跳转过来,而rferer就是请求是从哪里过来的,不要小看这个功能,有的网站为了防止盗链就会拒绝从别的域名链接过来的连接,只能从通过URL访问。
accept
:客户端要会要求服务器发送什么媒体类型,比喻客户端会要求服务器发什么字符集、编码、是否压缩、支持什么语言,接不接收图片,有的网址很有可能提供多种语言的页面,如果客户端在三次握手之后给服务器发送一个accept-language:chinaese,那么服务器如果有中文的网站就会把中文网页返回客户端,而不是只知道傻傻的返回英文网页。
2.2 条件请求首部
如果一个网站有很多的图片,客户端通过浏览器访问一次之后在客户端本地是有缓存的,我们下一次再访问这个网站的时候,客户端并不会上来就请求其页面,而是看看本地有没有缓存的,一旦有缓存的就会向服务器发送一个条件请求:自从XX时间之后有没有修改过资源,如果服务器回应没有修改过(304),客户端就使用本地缓存的,而不会请求新的,如果服务器回应有过改动的话(200),那么客户端会再次GET一个新的网页到本地。
expect: 客户端告诉服务器自己期待的行为
If-Modified-since:是否在指定时间以后修改过此资源
if-none-match: #一个都不匹配
2.3 安全相关首部
authorization: 客户端提交给服务端的认证数据,如账号密码
cookie: 第一版cookie客户端发送给服务器的身份标识
cookie2: 第二版cookie
cookie是客户端从服务器发送的身份标识。HTTP无状态的,也主是说我们访问一个网页之后过一会再次访问的话之前的痕迹也就没有了,因为HTTP是无状态的,但是实际上我们使用时情况并不是这样,用户通过网页版腾讯视频看了几个节目,下个星期之后再次打开腾讯视频,发现还有历史记录,这是怎样实现的呢?
如上图:其实是通过cookie来实现的,cookie只是有一个浏览器集成的软件,当我们访问某个网站的时候,网站给我们发一个令牌(cookie)用于验证我们的令牌,而cookie还有一个服务端在网站服务器上,HTTP由于是无连接的,所以并不记录我们的访问记录,而cookie是记录的,cookie令牌默认是保存到浏览器当中,当再次访问之前的网站时cookie就会结合服务器上的一个cookie服务端还原用户上次访问时的历史记录,当然浏览会先出示cookie而服务器会追踪cookie,cookie的工作机制在下文当中会有详细的介绍。
3、响应首部
3.1 必有首部
age: 响应持续时间,知道即可
server: 向客户端标明服务器程序名称和版本,告诉客户端是使用的apatch的哪个版本
3.2 协商首部
accept-ranges: 对当前的资源来讲,自己所能够接受的范围类型
vary: 首部列表,服务器会把各种搭配做成几个列表,让客户端挑一个客户端可以接收的列表,服务器会根据列表当中的内容挑选出最适合的版本发送给客户端
比如客户端告诉服务器自己可以接收gzip压缩的文件和不是xz压缩的格式,而服务器告诉客户端自己只能发送rar压缩的资源那么这次通信就会失败了。
3.3 安全相关首部
set-cookie: 服务器在某客户端第一次请求发给的令牌,上面说的cookie就是这里发的
set-cookie2: 这是二版的令牌
www-authentication: 质询,即要求客户提供账号和密码,51CTO就是这样
4、实体首部
4.1 必有首部
locationi: 资源的新位置,在使用301或者302时指定新的文件位置在什么地方
allow: 允许对此资源使用的请求方法,比如客户端使用options方法去测试服务器可以使用的资源请求方法,服务器会用allow返还
4.2 内容首部
content-encoding:告诉客户端自己的编码格式是什么
content-languge告诉客户端使用的语言是什么
content-location资源所处的实际位置
content-range 资源所处的范围
content-type 资源所有的类型
4.3 缓存首部
etag: 实体标签
expires: 过期期限,一个资源可以缓存多长时间
last-modified: 上一次的修改时间