Laravel在IE浏览器下,header信息获取的问题以及解决办法

最近对公司的登录系统做了一个优化,主要优化点是:当用户浏览到某页,需要购买下单的时候,如果用户未登录,此时进行登录的话,登陆后不再跳转到首页而是直接在当前页。

熟悉HTTP协议的都知道,在请求的header里面,有个Referer字段,它的含义是:表示浏览器所访问的前一个页面,可以认为是之前访问页面的链接将浏览器带到了当前页面。既然有这么一个字段,直接使用这个字段值就可以了。正好,laravel里面有获取头部的指定方法:$request->header('HTTP_REFERER')。所以直接拿这个方法来用了。一切很顺利,在谷歌和火狐浏览器,包括Edge浏览器下都没问题,然后测试通过,上线。但是,上线后,有用户反馈为啥登录后还是跳转到首页而非当前页呢?

当知道用户使用的是IE浏览器时,心里一万匹马奔腾而过。在IE浏览器中,测试环境下,复现:

在代码中打印这些变量:

打印的结果

发现:$request->header('HTTP_REFERER')获取到的值居然是NULL,而只有通过$_SERVER['HTTP_REFERER']才能获取得到REFERER的值!至于为啥会这样,需要去看Laravel的底层实现了,这个后面再来谈。

Sea Bridge

古之立大志者,不惟有超世之才 亦必有坚韧不拔之志!

发表评论