http请求头origin、referer和host区别

http请求头origin、referer和host区别,第1张

描述请求将被发送的目的地,包括且仅仅包括域名和端口号。 HTTP/1.1 的所有请求报文中必须包含一个Host头字段,且只能设置一个。

请求头origin表明了请求来自于哪个站点。包括且仅仅包括协议、域名和端口,并不包含任何路径信息。经常用于CORS请求或者POST请求,可以看到response有对应的header:Access-Control-Allow-Origin。

@CrossOrigin(origins="http://wx.xxxx.com:80")

@RequestMapping(value = "list", method = RequestMethod.POST)

public String list(HttpServletRequest request, HttpServletResponse response) {

}

告知服务器请求的原始资源的URI,其用于所有类型的请求,并且包括协议、域名、路径和查询参数。

在以下几种情况Referer不会被发送:

1)来源页面采用的协议为表示本地文件的 "file" 或者 "data" URI;

2)当前请求页面采用的是非安全协议,而来源页面采用的是安全协议(HTTPS);

3)直接输入网址或通过浏览器书签访问;

4)使用 JavaScript 的 Location.href 或者是 Location.replace();

5)使用html5中noreferrer;

6)使用iframe的hack写法去除referer。

请求头中referer与origin功能相似,但有如下几点不同:

1、只有跨域请求,或者同域时发送post请求,才会携带origin请求头,而referer不论何种情况下,只要浏览器能获取到请求源都会携带,除了上面提到的几种情况。

2、如果浏览器不能获取请求源,那么origin满足上面情况也会携带,不过其值为null。referer则不同,浏览器如果不能获取请求源,那么请求头中不会携带referer。

3、origin的值只包括协议、域名和端口,而erferer不但包括协议、域名、端口,还包括路径和参数。

请求头指明了请求将要发送到的服务器主机名和端口号。

如果没有包含端口号,会自动使用被请求服务的默认端口(比如HTTPS URL使用443端口,HTTP URL使用80端口)。

所有HTTP/1.1 请求报文中必须包含一个 Host 头字段。对于缺少 Host 头或者含有超过一个 Host 头的HTTP/1.1 请求,可能会收到 400 (Bad Request)状态码。

例如:Host: developer.cdn.mozilla.net

指定要访问的服务器主机名和端口号

Referer 请求头包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用 Referer 请求头识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等。

需要注意的是 referer 实际上是 "referrer" 误拼写。参见 HTTP referer on Wikipedia (HTTP referer 在维基百科上的条目)来获取更详细的信息。

Referer 请求头可能暴露用户的浏览历史,涉及到用户的隐私问题。

在以下两种情况下, Referer 不会被发送:

例如:

请求首部字段 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

设置防盗链时候指明和不指明空Referer的区别及实现后的效果?

什么是Referer?

这里的 Referer 指的是HTTP头部的一个字段,也称为HTTP来源地址(HTTP Referer),用来表示从哪儿链接到目前的网页,采用的格式是URL。换句话说,借着 HTTP Referer 头部网页可以检查访客从哪里而来,这也常被用来对付伪造的跨网站请求。

Referer的正确英语拼法是referrer。由于早期HTTP规范的拼写错误,为了保持向后兼容就将错就错了。其它网络技术的规范企图修正此问题,使用正确拼法,所以目前拼法不统一。

比如,您如果点击下面资料来源后面维基百科的网址链接,那么浏览器会产生一个送到维基百科的Web服务器的HTTP请求,该请求中则会包含一个Referer字段(即本页面的地址): http://kb.qiniu.com/52pw6cde

什么是空Referer,什么时候会出现空Referer?

首先,我们对空Referer的定义为,Referer 头部的内容为空,或者,一个HTTP请求中根本不包含Referer头部。

那么什么时候HTTP请求会不包含Referer字段呢?根据Referer的定义,它的作用是指示一个请求是从哪里链接过来,那么当一个请求并不是由链接触发产生的,那么自然也就不需要指定这个请求的链接来源。

比如,直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含Referer字段的,因为这是一个“凭空产生”的HTTP请求,并不是从一个地方链接过去的。

那么在防盗链设置中,允许空Referer和不允许空Referer有什么区别?

在防盗链的白名单设置中,如果指名白名单中包含空的Referer,那么通过浏览器地址栏直接访问该资源URL是可以访问到的;

但如果不指名需要包含空的Referer,那么通过浏览器直接访问也是被禁止的。

原文链接: https://blog.csdn.net/hxl188/article/details/38964743


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/73186.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-02
下一篇2023-03-02

发表评论

登录后才能评论

评论列表(0条)

    保存