2016-08-22 56 views
4

我有這個Web應用程序,其中Web服務託管在Amazon API網關&上,客戶端應用程序託管在cloudefront站點上。這些服務已啓用CORS。對於任何錯誤,例如http 500,401,403,我可以使用status屬性從jqxhr對象接收http狀態。但似乎對於http狀態413,我在代碼中獲得狀態0。無法接收用於CORS的http狀態代碼

我也注意到,如果請求在服務器中進行,http狀態413可以被接收。但只有跨域Ajax,狀態413接收爲狀態0.

有沒有辦法處理HTTP狀態413的跨域AJAX請求。

只是簡單起見,考慮下面的代碼塊,用於HTTP狀態500,401錯誤回調日誌的出500或401.但413則顯示爲0。

 $.ajax({ 
      url: 'URL to AWS API Gateway', 
      success: function(d){ 
       console.log(d); 
      }, 
      error: function(a){ 
       console.log(a.status); 
      } 
     }); 

回答

2

請參閱以下http://jsfiddle.net/tqgv7z9c/1/(注意不是HTTP HTTPS)

$.ajax({ 
    url: 'http://www.mocky.io/v2/57bb03fc100000460a585000', 
    error: function(a){ 
     $('#code').text(a.status); 
    } 
}); 

我把它用http://www.mocky.io/具有以下設置:

  • 413請求實體過大
  • CORS標頭

你可以看到413代碼被正確返回。

沒有看到有關您收到的響應的更多詳細信息,我會想象瀏覽器正在採取後續操作,如果304 Found響應返回了Location標頭,我知道這是個問題,這會導致一個新的請求在瀏覽器繼續之前,您將無法攔截。如果這是您正在發生的事情,那麼如果您無法修改API本身,則可能無法做到這一點。

+0

從API網關發送的響應在響應頭上沒有任何Access-Control-Allow-Origin。所以我無法訪問響應主體和響應狀態。 所以這個問題解決了我。 –