2014-10-07 186 views
2

我最近将我的网站切换为使用HTTPS。我使用Laravel作为php框架。在开始时,我遇到了一个问题,我会得到一个“Origin-null不被Access-Control-Allow-Origin允许”。错误,但那时我已经固定,通过在我的filters.php使用此:HTTPS ajax请求

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) { } 
    }); 

现在,而不是跨源错误我得到一个重定向我的登录页面,而不是应该加载的内容。我认为它与Laravel拥有的CSRF令牌实现有关,但我不确定应该将该令牌添加到请求还是我如何修复它。任何人有任何建议?

编辑:

如果我没有在我的filter.php这些头功能我得到这个错误:

XMLHttpRequest cannot load http://website.com/media/search?&q=500 . No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' https://website.com ' is therefore not allowed access.

这个我已经着手使用这个调用,而不是后:

$.ajax({ 
     type: 'GET', 
     url: 'https://website.com/media/search/', 
     data: { 'q':search_string }, 
     success: function(d) { } 
}); 

但仍没有运气

+1

你是不是做跨域调用在这里。 'Access-Control-Allow-Origin'不是必需的。 – mithunsatheesh 2014-10-07 12:28:30

+0

请参阅我的编辑,我无法弄清楚如何在ajax调用上强制https。我会在我的电话中放入https:// website/search /',但它仍然会呼叫http – 2014-10-07 12:32:15

+0

http <-> https被视为跨域;使用相同的协议为ajax调用 – 2014-10-07 12:33:14

回答

1

如果对CRSF你可以从我删除AJAX相关t:

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请求可能无法正常工作

+0

它是cSrf(跨站点请求伪造)。如果它是csrf过滤器抛出异常,他为什么最终会在登录页面?认证过滤器(或某些控制器重定向)会更有意义。 – alou 2014-10-07 12:40:11

+0

@alou它取决于如何定义CSRF过滤器。它可以被定义为注销用户并重定向到登录页面。 – 2014-10-07 12:44:38

+0

感谢您的建议,但没有奏效。我仍然被重定向到登录页面。 – 2014-10-07 12:47:05