referer and host header in http
http中的referer和host头
http中Referer, Host, Origin头部的含义比较容易让人混淆,整理一下。
Referer Header
Referer头部表示的是请求请求是从哪里来的,即是发起请求的页面的 完整URL 。
比如从一个页面跳转到另一个页面,下一个页面的http请求的referer的头部即是上个页面的URL;而如果时这个页面上的图片等静态资源或者ajax请求,此时的Referer头部就是当前页面的URL。
Referer头部可以用来预防CSRF攻击,不过也有泄露隐私的风险。
Referer的正确拼写应该是Referrer,不过错的人多了,也就成了对的。
Host Header
Host和Referer正好相反,Host包含的请求的资源所在服务器的主机名和端口。
在http 1.1中,请求报文中必须包含Host头部。Host头部的必要性体现在单台主机运行多个域名服务的情况(虚拟主机)。假如一台服务器上部署了的a.com和b.com的服务,当请求到来时,IP包中包含的只有目的IP地址,而这两个站点的请求的目的IP地址是一样的,所以无法区分这是哪个站点发来的请求,也就不能转发给对应站点的服务器程序。所以http报文中必须包含Host头部,这样就能区分是哪个站点发来的请求。
Origin Header
Origin头部和Referer头部很像,也是标示请求来自哪里。但是有两点不同:
- Origin随CORS或POST请求一起发送
- Origin只包含请求页面的协议,主机名,端口,不包含完整路径
比如 https://a.com/a.html 上发出了一个http请求,则Referer头部为 https://a.com/a.html ,而Orign(假如有的话)头部为 https://a.com 。
Referrer-Policy
由于Referer头部有泄露隐私的可能,所以有时需要控制是否发送何种情况下发送Referer头部。这就是Referrer-Policy头部的作用。用法参照MDN。