前端面试—Http请求头中Referer的含义和作用

前端面试—Http请求头中Referer的含义和作用,第1张

博客说明

HTTP Referer是 header 的一部分,当浏览器向web 服务器 发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。

假如在 www.google.com 里有一个 www.baidu.com 链接,那么点击进入这个 www.baidu.com ,它的header信息里就有:Referer= http://www.google.com

只允许我本身的网站访问本身的图片服务器,假如域是 www.google.com ,那么图片服务器每次取到Referer来判断一下域名是不是 www.google.com ,如果是就继续访问,不是就拦截。

将这个http请求发给服务器后,如果服务器要求必须是某个地址或者某几个地址才能访问,而你发送的referer不符合他的要求,就会拦截或者跳转到他要求的地址,然后再通过这个地址进行访问。

比如静态请求是 *.html 结尾的,动态请求是 *.shtml ,那么由此可以这么用,所有的 *.shtml 请求,必须Referer为我自己的网站。

定义 :Referer头部的内容为空,或者,一个HTTP请求中根本不包含Referer头部(一个请求并不是由链接触发产生的)

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

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

允许Referer为空,意味着你允许比如浏览器直接访问。

比对HTTP 请求的来源地址,如果Referer中的地址是安全可信任的地址,那么就放行

感谢

描述请求将被发送的目的地,包括且仅仅包括域名和端口号。 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不但包括协议、域名、端口,还包括路径和参数。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7464952.html

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

发表评论

登录后才能评论

评论列表(0条)

保存