HTTP 头包括以下几个部分:通用头、响应头、请求头。其中,请求头和响应头最为重要。

http 通用头

http1
Request URL :请求的url
URL(Uniform Resource Locator即统一资源定位符),互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。
基本URL包含:模式(或称协议)、服务器名称(或IP地址)、路径和文件名,如“协议://授权/路径?查询”。

Request Method : 请求的方法,可以是GET、POST 、HEAD
get和post的区别:本质上并无区别,只是http协议上对这两个方法有些规定。比如:1、GET使用URL传参,而POST将数据放在BODY中。2、GET的URL会有长度上的限制,则POST的数据则可以非常大。3、POST比GET安全,因为数据在地址栏上不可见。

从其他角度来看:get是Safe、Idempotent的,get更像是查询语句,不会改变服务器任何状态,所以他是Safe(安全)、Idempotent(幂等的)。Safe可理解为只读,Idempotent可理解为多次访问相等。而post不是Safe,也不是Idempotent的,post更像是insert语句,会改变服务器状态。

从缓冲角度来看:服务端程序在接收客户端表单提交的数据时,需要先将数据存储到一个内存空间,然后做解析等后续工作,这个内存空间一般称之为接收缓冲区。对于post数据因为有Content-Length标记,服务端可以按标记的长度创建一个等于或稍大于提交数据的缓冲区。对于get,因为事先不知道提交的数据有多少,需要估计缓冲区长度,如果缓冲区很大而接收数据很小会造成内存浪费,而如果缓冲区小于接收数据,就可能造成缓冲区溢出

Status Code:HTTP 状态码,表示请求成功
(消息)1:这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。
(成功)2
:这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。
(重定向)3: 这类状态码代表需要客户端采取进一步的操作才能完成请求。
(请求错误)4
:这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。
(服务器错误)5、6:这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。

Remote Address:远程IP地址
Referrer Policy:
当从一个链接跳到另一个链接,另一个链接的referer就记录了是从哪个链接跳来的。Referrer Policy就是管理这个来源信息的机制。
no-referrer:整个 Referer 首部会被移除。访问来源信息不随着请求一起发送。
no-referrer-when-downgrade (默认值):在同等安全级别的情况下,引用页面的地址会被发送(HTTPS->HTTPS),但是在降级的情况下不会被发送 (HTTPS->HTTP)
origin:在任何情况下,仅发送文件的源作为引用地址。例如 example.com/page.html 会将 example.com/ 作为引用地址。
unsafe-url:无论是同源请求还是非同源请求,都发送完整的 URL(移除参数信息之后)作为引用地址。

响应头 Response Headers

http2
Cache-Control:private、no-cache、max-age、must-revalidate等,默认为private。
(1)打开新窗口
值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器。而如果指定了max-age值(单位为秒),那么在此值内的时间里就不会重新访问服务器,例如:
Cache-control: max-age=5(表示当访问此网页后的5秒内再次访问不会去服务器)
(2)在地址栏回车
值为private或must-revalidate则只有第一次访问时会访问服务器,以后就不再访问。
值为no-cache,那么每次都会访问。
值为max-age,则在过期之前不会重复访问。
(3)按后退按扭
值为private、must-revalidate、max-age,则不会重访问,
值为no-cache,则每次都重复访问
(4)按刷新按扭
无论为何值,都会重复访问
总结:
public:所有内容都将被缓存(客户端和代理服务器都可缓存)
private:内容只缓存到私有缓存中(仅客户端可以缓存,代理服务器不可缓存)
no-cache/no-store:浏览器需要重新发送请求。
max-age=xxx:缓存的内容将在 xxx 秒后失效, 这个选项只在HTTP 1.1可用。
Content-Encoding:内容的压缩类型,此处是br
Content-Length:返回的内容的长度
Content-type:返回的内容类型,此处是html
Connection:keep-alive、close
例如: Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接
例如: Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭, 当客户端再次发送Request,需要重新建立TCP连接。
Date:请求的日期
Expires: 响应过期的日期和时间
Server:服务器
Vary: Accept-Encoding
Vary: Accept-Encoding,User-Agent
Vary: X-Some-Custom-Header,Host
Vary: *

vary 的值表明需要哪些request header去充分决定一个response是否是fresh的,缓存服务器是否可以不用重新确认就使用一个reponse。
参考链接:vary详解

x-frame-option:DENY、SAMEORIGIN、ALLOW-FROM
通过在服务端设置HTTP头部中的X-Frame-Options信息,防止网页被别人的网站iframe
DENY:页面不能被嵌入到任何iframe或frame中;
SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中;
ALLOW-FROM:页面允许frame或frame加载。

请求头 Request Headers

http3
Accept:浏览器能够接收的内容类型,如text/javascript
作用: 浏览器端可以接受的媒体类型,
例如: Accept: text/html 代表浏览器可以接受服务器回发的类型为 text/html 也就是我们常说的html文档,
如果服务器无法返回text/html类型的数据,服务器应该返回一个406错误(non acceptable)
通配符 * 代表任意类型
例如 Accept: / 代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)

Accept-Encoding:浏览器支持的压缩编码类型。
作用: 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate),(注意:这不是只字符编码);
例如: Accept-Encoding: zh-CN,zh;q=0.8

Accept-language:浏览器支持的语言
作用: 浏览器申明自己接收的语言。
语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等;
例如: Accept-Language: en-us

Cookie:HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。
Cookie是用来存储一些用户信息以便让服务器辨别用户身份的(大多数需要登录的网站上面会比较常见),比如cookie会存储一些用户的用户名和密码,当用户登录后就会在客户端产生一个cookie来存储相关信息,这样浏览器通过读取cookie的信息去服务器上验证并通过后会判定你是合法用户,从而允许查看相应网页。当然cookie里面的数据不仅仅是上述范围,还有很多信息可以存储是cookie里面,比如sessionid等。

Host:指定请求的服务器的域名和端口号
作用: 请求报头域主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的
例如: 我们在浏览器中输入:https://heroyf.club
浏览器发送的请求消息中,就会包含Host请求报头域,如下:
Host:heroyf.club
此处使用缺省端口号80,若指定了端口号,则变成:Host:域名:指定端口号
Referer: 即先前来自于哪个网页
当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。
User-Agent:包含发出请求的用户信息
作用:告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本.
我们上网登陆论坛的时候,往往会看到一些欢迎信息,其中列出了你的操作系统的名称和版本,你所使用的浏览器的名称和版本,这往往让很多人感到很神奇,实际上,服务器应用程序就是从User-Agent这个请求报头域中获取到这些信息User-Agent请求报头域允许客户端将它的操作系统、浏览器和其它属性告诉服务器。

版权声明:本文为原创文章,版权归 heroyf 所有
本文链接:https://heroyf.club/2018/07/http-header/


“苹果是给那些为了爱选择死亡的人的奖励”