请求头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
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)