Laravel PHP 获取引用
Posted
技术标签:
【中文标题】Laravel PHP 获取引用【英文标题】:Laravel PHP get referer 【发布时间】:2018-05-25 20:59:43 【问题描述】:我在子域中有一个登录按钮,它在主域上调用 AJAX 请求。为了使 CORS 正常工作,我必须拥有发出请求的正确域,以便在主域上对其进行验证。
我不能使用确切的子域,因为我有超过 3k 个子域都可以发出请求,而且我也不能动态地将它们全部添加到每个请求中,因为这会增加不必要的负担。
我想要的是一种从请求中以某种方式提取引用的方法,但 $_SERVER['HTTP_REFERER']
并不总是起作用。
是否有某种方法可以每次都毫无例外地获取引用者,以便我确定引用者已设置?
如果没有,有没有办法强制将引用标头附加到请求中?
【问题讨论】:
不,http是无状态协议 由用户发送正确的推荐人。如果他们不这样做,那么他们可能已经深度链接到该页面,并且 CORS 应该阻止他们这样做。是否存在未设置引荐来源网址的常规用例? HTTP Referer 不可靠,期间。这不是应该的。您需要为您的问题找到不同的解决方案。如果您希望我们提供帮助,您需要更详细地描述您要解决的问题。 例如,如果您说您有 3k 个子域,我希望这些子域是“虚荣”子域(例如username.example.com
),它们最终都通过同一个主 Web 服务器提供服务。在这种情况下,适当的解决方案可能是不向example.com
提出请求,而是向username.example.com
提出请求,从而消除任何CORS 问题……
如果您的所有域都是主域的子域,那么您可以允许来自同一域的来源并在客户端设置 document.domain
(developer.mozilla.org/en-US/docs/Web/API/Document/domain) 如果不是,您可以尝试htaccess 解决方案(请参阅***.com/questions/14003332/…)无论如何,如果您使用referer,您需要依赖用户发送它。
【参考方案1】:
您可以根据自己的喜好使用以下内容
//Get the current URL without the query string.
url()->current();
//Get the current URL including the query string.
url()->full();
//Get the full URL for the previous request or the http refer er.
url()->previous();
这些方法中的每一个也可以通过 URL 门面访问:
use Illuminate\Support\Facades\URL;
URL::current();
URL::full();
URL::previous();
Laravel Doc
【讨论】:
【参考方案2】:是的,有一种简单的方法可以强制将引用标头附加到请求中。它只需要对前端代码做一点小改动,而且非常简单:
只需通过将引用地址添加为 URL 参数来显式发送它。
http://www.yourdomain.com/login?referer=sub.yourdomain.com
查询参数已在预检请求中发送,并且可以由后端评估以设置正确的 CORS 标头。
【讨论】:
以上是关于Laravel PHP 获取引用的主要内容,如果未能解决你的问题,请参考以下文章
升级 Laravel 5.6 的 Envoyer 部署失败引用不匹配的 PHP 版本
laravel根目录的PHP文件中怎么引用门面类或辅助函数?