2014-10-07 187 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