host
请求头指明了请求将要发送到的服务器主机名和端口号。
如果没有包含端口号,会自动使用被请求服务的默认端口(比如HTTPS URL使用443端口,HTTP URL使用80端口)。
所有HTTP/1.1 请求报文中必须包含一个Host
头字段。对于缺少Host
头或者含有超过一个Host
头的HTTP/1.1 请求,可能会收到400
(Bad Request)状态码。
例如:Host: developer.cdn.mozilla.net
用途
指定要访问的服务器主机名和端口号
refer
Referer
请求头包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用 Referer
请求头识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等。
需要注意的是 referer 实际上是 "referrer" 误拼写。参见 HTTP referer on Wikipedia (HTTP referer 在维基百科上的条目)来获取更详细的信息。
Referer
请求头可能暴露用户的浏览历史,涉及到用户的隐私问题。
在以下两种情况下,Referer
不会被发送:
- 来源页面采用的协议为表示本地文件的 "file" 或者 "data" URI;
- 当前请求页面采用的是非安全协议,而来源页面采用的是安全协议(HTTPS)。
例如:
Referer: https://developer.mozilla.org/en-US/docs/Web/JavaScript
origin
请求首部字段 Origin
指示了请求来自于哪个站点。该字段仅指示服务器名称,并不包含任何路径信息。该首部用于 CORS 请求或者 POST
请求(MDN中这样写,但是我试了patch/delete方法也会发送origin)。除了不包含路径信息,该字段与 Referer
首部字段相似。
例如:Origin: https://developer.mozilla.org
组成:协议+域名+端口号
注意:只有跨域请求(可以看到 response 有对应的 header:Access-Control-Allow-Origin),或者同域时发送post请求,才会携带origin请求头。
如果浏览器不能获取请求源,那么 origin 满足上面情况也会携带,不过其值为null。
而referer不论何种情况下,只要浏览器能获取到请求源都会携带。如果浏览器如果不能获取请求源,那么请求头中不会携带referer。
用途
用于 CORS: 当我们的浏览器发出跨站请求时,服务器会校验当前请求是不是来自被允许的站点。服务器就是通过 Origin 字段的值来进行判断。
参考文档
https://juejin.im/post/6844903954455724045#heading-0
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Origin
https://www.ruanyifeng.com/blog/2016/04/cors.html