Http Header 中的 referer 字段

在做企业微信应用开发的时候,有使用第三方单点登录的需求。根据企业微信的文档,设置好登录授权发起域名和回调域名后,编写了一个Controller,用来重定向到微信的接口。但重定向后总是得到校验请求来源错误的提示信息。

之后,修改Controller,使用response返回一个<a>标签,链接地址指向微信接口。这次,点击链接,可以成功的看到二维码,并且能够成功扫码登录。

这样的情况说明使用重定向和使用超链接是有区别的。至少,浏览器的处理会不一样。

对浏览器而言,当接收到重定向的响应时,无论是具体的哪一个状态码,都会直接使用GET方法去请求Location字段中指定的URL

<a>标签则不同。当用户点击网页中的超链接时,浏览器还会在请求的headers中加上referer字段,内容为当前页面的URL。这样,为链接地址作出响应的服务器可以根据该字段判断这次访问是否来自期望的地址。经过实践推断,企业微信的服务器就是这样做的。

Http中的这个字段又代表什么意义呢?Referer其实是一个拼写错误,本应该是Referrer,意味提供者。顾名思义,这个字段的作用是告诉服务器当前的请求是由谁提供给访问者的。对服务器而言,这个字段的内容既可以用来做安全验证,也可以做数据统计。

至于协议里具体的定义,可以查看下面两个链接: