2013-01-16 20 views
6

我正在使用Sencha Touch 2.1.0。我正在進行HTTP GET調用。這是一個CORS請求。因此,它正在按照預期發送Pre-flight HTTP OPTIONS命令。HTTP選項飛行前請求裝入在Chrome中掛起狀態中取消

我在我的服務器上安裝了CORS過濾器並進行了配置。來自我的代碼的電話一直很好,直到昨天。今天突然停止加載數據。當我檢查網絡在Chrome電話,我看到OPTIONS方法顯示爲

法「取消了裝載」:OPTIONS
狀態文本:「加載取消」
類型:待定
發起者:Connection.js :319

我在第一次配置CORS過濾器時遇到過類似的問題。當我清除瀏覽器緩存時,它開始工作。這一次,我不確定爲什麼突然停止工作。即使在瀏覽器中清除緩存和歷史記錄時,它也沒有得到修復。

如果我在Firefox中使用HTTPRequestor進行同樣的確切調用,它的效果非常好。這是通話。由於保密原因,我已經屏蔽了網址。

OPTIONS http://myurl/rest/items?_dc=1358304888220&page=1&start=0&limit=25 HTTP/1.1 
Access-Control-Request-Method: GET 
Origin: http://localhost:8080 
Access-Control-Request-Headers: accept, origin, x-requested-with 

同樣的確切請求給了我一個HTTPRequestor的非常好的響應。下面是結果:在商店

OPTIONS http://myurl/rest/items?_dc=1358304888220&page=1&start=0&limit=25 
Access-Control-Request-Headers: accept, origin, x-requested-with 
Access-Control-Request-Method: GET 
Origin: http://localhost:8080 


-- response -- 
200 OK 
Date: Wed, 16 Jan 2013 03:19:27 GMT 

Server: Apache-Coyote/1.1 

Access-Control-Allow-Origin: http://localhost:8080 

Access-Control-Allow-Credentials: true 

Access-Control-Allow-Methods: HEAD, GET, POST, OPTIONS 

Access-Control-Allow-Headers: X-Requested-With, Origin, Accept, Content-Type 

Content-Length: 0 

Strict-Transport-Security: max-age=15768000, includeSubDomains 

Keep-Alive: timeout=15, max=100 

Connection: Keep-Alive 

煎茶代碼撥打這通電話:

proxy: { 
     type: 'ajax', 
     method: 'GET', 
     url: 'http://myurl/rest/items', 
     withCredentials: true, 
     useDefaultXhrHeader: false, 
     disableCaching: false, 
     headers: { 
      "Accept": "application/json" 
     }, 
     failure: function(response) { 
      if (response.timedout) { 
       Ext.Msg.alert('Timeout', "The server timed out :("); 
      } else if (response.aborted) { 
       Ext.Msg.alert('Aborted', "Looks like you aborted the request"); 
      } else { 
       Ext.Msg.alert('Bad', "Something went wrong with your request"); 
      } 
     }, 
     success: function(response){ 
      Ext.Msg.alert(response.responseText); 
     } 
    }, 
    autoLoad: true, 

請幫助我明白,我怎麼能解決這個問題。

+0

您可以顯示您用來提出請求的JavaScript代碼嗎?你正在設置'.withCredentials = true;'? – monsur

+0

@Monsur,我剛剛添加了用於進行此調用的sencha代碼。有憑證是真的。該代碼實際上一直運行到前一天,並且突然停止工作。我不確定哪裏出了問題。我沒有在服務器端進行任何更改。 –

回答

2

由於上次Google Chrome更新,這似乎成爲問題。當我嘗試使用Iron瀏覽器時,它可以正常工作。

0

我在Webkit瀏覽器的測試版中遇到類似的問題。事實證明,Content-Type頭默認爲包含Blob的XMLHttpRequests設置,因此我必須將其添加到我的上傳服務器上的Access-Control-Allow-Headers

參見:https://bugs.webkit.org/show_bug.cgi?id=99983

0

我剛纔已經解決了這個問題。服務器響應標頭應設置爲:

"Access-Control-Allow-Origin": "*" 
"Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept" 

您已完成此操作。我認爲如果GET或POST方法包含X-Requested-With頭,OPTIONS方法將首先發送。 X-Requested-With標題位於默認的XHR標題中。所以我們應該設置'useDefaultXhrHeader'爲false。 Ext.data.Store不支持這個參數。編輯sdk/src/data/Connection.js,將useDefaultXhrHeader的默認值更改爲false。