2016-09-16 25 views
0

我已在我的apache網絡服務器上啓用Access-Control-Allow-Origin。我可以在第一次加載時加載所有請求。然而,網頁的後續裝載/耳目一新會留下一半的請求中失敗了,留下了一個錯誤,訪問控制允許原始標頭錯誤只在Chrome,Safari,但不是Opera

XMLHttpRequest cannot load http://***. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. 

在Chrome開發者工具,網絡選項卡下,啓用「禁用緩存」刪除此錯誤。

我正在使用AngularJS $ http來調用我的請求,我已經將緩存選項更改爲true/false,但是這種異常仍然存在。對於您的信息,我也使用角速度緩存模塊,https://github.com/jmdobry/angular-cache,我也嘗試啓用/禁用此功能,但無濟於事。

這裏是請求頭部的拷貝:

GET ***Valid_Url_With_Parameters** HTTP/1.1 
Host: ******** 
Connection: keep-alive 
Accept: application/json, text/plain, */* 
Origin: http://localhost:3000 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 
Referer: http://localhost:3000/ 
Accept-Encoding: gzip, deflate, sdch 
Accept-Language: en-US,en;q=0.8 

我有2種不同類型響應與用於失敗的請求不同HTTP狀態代碼首部。

HTTP/1.1 200 OK 
Content-Length: 564121 
Content-Type: application/json 
Server: Apache/2.2.15 (CentOS) 
Vary: Accept 
Last-Modified: Fri, 16 Sep 2016 12:41:41 GMT 
Connection: keep-alive 
Date: Fri, 16 Sep 2016 12:43:44 GMT 


HTTP/1.1 206 Partial Content 
Content-Type: application/json 
Server: Apache/2.2.15 (CentOS) 
Vary: Accept 
Last-Modified: Fri, 16 Sep 2016 13:39:05 GMT 
Content-Range: bytes 29200-29200/785592 
Content-Length: 1 
Connection: keep-alive 
Date: Fri, 16 Sep 2016 14:20:48 GMT 

這似乎與緩存有關。首次加載頁面時,所有請求都具有正確的訪問控制頭。隨後的刷新/重新加載將刪除此標題。我如何繼續使用緩存並保留訪問控制標題?

編輯:

我想補充的,我試着用Safari瀏覽器,同樣的異常出現。它在第一次嘗試時加載,但隨後的加載會拋出無訪問控制允許原點錯誤。但是,這一次,Safari中的響應標題顯示爲空白。

編輯2:

異常出現在Firefox以及而不是在Opera Beta版40.0.2308.52。我開始懷疑這是否是瀏覽器的原因。 Access-Control-Allow-Origin標題也存在。

響應頭在Opera

HTTP/1.1 200 OK 
Access-Control-Allow-Origin: * 
Allow: GET, POST, HEAD, OPTIONS 
Content-Type: application/json 
Date: Sat, 17 Sep 2016 06:56:53 GMT 
Server: Apache/2.2.15 (CentOS) 
Vary: Accept 
Transfer-Encoding: chunked 

編輯3: 我想補充一點,我拉的要求是大量的數據。我拉了最近7天的數據歷史,大約有20個JSON文件,每個文件從500KB到1000KB不等。我注意到,當我改變查詢參數來引入一個小的歷史數據時,這個錯誤不會發生。

任何幫助,非常感謝。

+0

是的,它確實取決於瀏覽器到瀏覽器,但您是否嘗試過在您的Web應用程序中添加內容安全元標籤 –

+0

@PrateekRathore否我沒有。你可以詳細說明一下,或者我可以如何添加它? –

+0

將此添加到 好吧,您可以添加更多內容並使其更加卓有成效如通過實施內容安全策略的真正含義 –

回答

0

解決方法我找到了一個解決方案,即在服務器上動態生成一個JavaScript文件,作爲您的頁面中包含的資源。這不需要AJAX,它被CORS阻止並可以被緩存。

+0

不幸的是,這是不可能的,因爲我對服務器API的訪問非常少。它由第三方控制。 –

相關問題