我最近将我的网站切换为使用HTTPS。我使用Laravel作为php框架。一开始我遇到了一个问题,我得到了一个' Origin null不被Access-Control-Allow-Origin所允许。'错误,但后来我通过在filters.php中使用它来解决这个问题:
App::before(function($request)
{
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
});
这是ajax请求:
$.ajax({
type: 'GET',
url: '/media/search/',
data: { 'q':search_string },
success: function(d) { }
});
现在取代了Cross Origin错误,我正在重定向到我的登录页面,而不是应该加载的内容。我认为它与Laravel拥有的CSRF令牌实现有关,但我不确定我应该采取哪种方式将该令牌添加到请求或我如何解决它。有人有什么建议吗?
编辑:
如果我在filter.php中没有这些标头功能,我会收到此错误:
XMLHttpRequest无法加载http://website.com/media/search?&q=500。没有 '访问控制允许来源'标题出现在请求的上 资源。起源' https://website.com'因此是不允许的 访问。
在此之后我开始使用此调用:
$.ajax({
type: 'GET',
url: 'https://website.com/media/search/',
data: { 'q':search_string },
success: function(d) { }
});
但仍然没有运气
答案 0 :(得分:1)
如果它与CRSF有关,你可以从中删除AJAX:
Route::filter('csrf', function()
{
if (!Request::ajax() && Session::token() != Input::get('_token'))
{
throw new Illuminate\Session\TokenMismatchException;
}
});
在开头添加!Request::ajax()
规则。您还可以为数据添加_token
。
您还应该查看app/config/session.php
文件:
'secure' => false,
如果设置为true并且您从http发出AJAX请求它可能无法正常工作