2017-07-07 79 views
1

我一直在試圖做一個簡單的iron-ajax發佈到服務器,但它在預檢呼叫時保持失敗。對於我的生活,我無法弄清楚發生了什麼,所有的CORS標題在服務器上似乎都是正確的。對預檢403禁止的響應

Response headers

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Headers:Content-Type 
Access-Control-Allow-Methods:GET, POST, PUT, OPTIONS 
Access-Control-Allow-Origin:* 
cache-control:must-revalidate, private, no-cache, no-store, max-age=0 
Connection:Keep-Alive 
Content-Encoding:gzip 
Content-Length:138 
Content-Type:text/html 

Request headers

Accept:*/* 
Accept-Encoding:gzip, deflate, sdch, br 
Accept-Language:en-US,en;q=0.8 
Access-Control-Request-Headers:content-type 
Access-Control-Request-Method:POST 
Cache-Control:no-cache 
Connection:keep-alive 

請求確實是從本地主機做,但我會認爲*應採取照顧。

的錯誤,都出現在控制檯最多是: OPTIONS https://... 403 (Forbidden)

XMLHttpRequest cannot load https://.... Response for preflight has invalid HTTP status code 403 

任何幫助/建議表示讚賞。

+0

您在瀏覽器devtools控制檯中看到的確切錯誤消息是什麼?考慮編輯/更新您的問題以包含該信息 – sideshowbarker

+0

'選項https:// ... 403(禁止)'和'XMLHttpRequest無法加載https:// ....預檢的響應具有無效的HTTP狀態碼403' – DVM

+1

因此是的,這表明服務器後端沒有被配置爲處理OPTIONS請求的一般問題,而不僅僅是預檢OPTIONS請求。服務器需要使用2xx-200或204來響應OPTIONS請求。如果沒有,那麼它將配置發送的Access-Control - \ *標題沒有區別。而以正確的方式配置服務器來處理OPTIONS請求的答案 - 發送200或204個成功消息 - 取決於它運行的服務器軟件 – sideshowbarker

回答

2

403響應狀態表示服務器後端未配置爲處理OPTIONS請求的一般問題,而不僅僅是CORS預檢OPTIONS請求。

服務器必須以OPTIONS請求進行響應與一個2xx成功狀態,通常爲200或204

如果服務器沒有做到這一點,它沒有什麼區別,你有什麼Access-Control-*頁眉其配置爲發送。而配置服務器以正確的方式處理OPTIONS請求的答案 - 發送200或204成功消息 - 取決於它運行的服務器軟件

+0

還有一個問題:只是嘗試了與Postman的相同呼叫,並且工作正常。這是否意味着它可能是一個不同的問題? – DVM

+1

如果您的意思是對Postman的POST請求的響應能夠正常工作,那麼這是預期的,因爲Postman在嘗試POST請求之前不會執行預檢OPTIONS請求 - 因爲只有瀏覽器執行預檢OPTIONS請求,並且僅限於XHR /從前端JavaScript代碼中獲取/ Ajax調用在瀏覽器中運行的特定源(郵差不是)。但是,如果你反而說你試圖在Postman中做出OPTIONS請求,並沒有得到403,那麼是的,這將表明一個不同的問題 – sideshowbarker