2015-10-16 50 views
5

我試圖在我的瀏覽器和使用CORS的Apache服務器(位於不同域中)之間工作。CORS不適用於Chrome/Firefox和Apache

在服務器端,我做了在服務器按響應的httpd.conf中部分有以下改變的「Header set Access-Control-Allow-Origin in .htaccess doesn't work」:

Header add Access-Control-Allow-Origin "*" 
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" 
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 

我的AJAX調用的形式爲:

 $.ajax({ 
      url  :'https://x.x.x.x/validateCustomerID', 
      type  : 'POST', 
      cache : false, 
      crossDomain: true, 
      contentType: 'application/json', 
      beforeSend: function(xhr){ 
        xhr.setRequestHeader("Access-Control-Allow-Methods","POST"); 
        xhr.setRequestHeader("Access-Control-Allow-Headers","X-Requested-With"); 
        xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
      }, 
      data  : {loginId : '12345'}, 
      success : function(response){console.log("Success"+JSON.stringify(response))}, 
      error  : function(response){console.log("Error"+JSON.stringify(response))} 
     }); 
    } 

我也嘗試以避免預檢要求註釋掉beforeSend(),但它要麼沒有成功。

我收到關於鉻和Firefox錯誤消息是:

  • 在鉻:

「的XMLHttpRequest不能加載https://x.x.x.x/validateCustomerID否‘訪問控制允許來源’標頭是否存在。因此不允許Origin'null'訪問,響應的HTTP狀態碼爲403。

  • 在Firefox:

「跨來源請求阻止:同源策略不允許讀取遠程資源在https://x.x.x.x/validateCustomerID。(原因:CORS請求失敗)」

在我的瀏覽器中沒有收到服務器的響應頭信息,我認爲這是CORS的強制性工作,並且在服務器上登錄並不顯示從我的瀏覽器發出的請求。

我真的很感激,如果有人在這裏可以幫我解決這個問題,因爲我在這裏呆了好幾天了,並且幾乎用了所有的命中和試用方法來使這件事情起作用。

+0

你啓動Apache模塊頭'a2enmod headers' ? –

+0

你爲什麼試圖在**請求**中設置訪問控制標題? – Quentin

+0

@Jacob,我嘗試使用a2enmod頭部命令激活apache模塊頭,但它給了我一個錯誤,它是一個無效的命令。然後,我在某處讀取默認情況下在Apache中啓用了Mod_headers的地方,因此我將它保留原樣。這可能是一個問題嗎? –

回答

1

這是我在site.conf設置在生產現在的Apache2

Header set Access-Control-Allow-Origin "*" 
Header set Access-Control-Allow-Headers "authorization, origin, user-token, x-requested-with, content-type" 
Header set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 

適用於將來的參考,我強烈建議將本網站加入書籤http://enable-cors.org/index.html

+0

我實際上在設置我的Apache設置時經歷了相同的鏈接。但是,在我們需要執行'a2enmod頭部'的最後一點,我收到一個錯誤,說這是一個無效的命令。我沒有進一步嘗試,因爲它是在它之上寫的,它默認在Apache中啓用了mod_headers。 –

+0

您在問題中出現的錯誤表明標題未實際添加到響應中,您是否重新啓動了apache?你使用apache2嗎? – maurycy

+0

做*安全嗎?我們不能只是做'「https://cdnurl.com」'? – runningmark

相關問題