2017-01-25 119 views
6

我正在向我的本地web服務發出一個GET請求,我期待一個302響應返回頭中的位置。但是,即使我可以在本地看到請求正在被服務,並且在webservice中沒有任何錯誤地創建響應,我也會收到未定義的響應和網絡錯誤。302響應錯誤

我試過郵差和Chrome,它收到重定向響應並重定向。

我不確定這是否是一個CORS問題,如果是的話,我該如何解決這個問題?

我在爲CORS響應標頭已經添加過濾

Access-Control-Expose-Headers: Location, [own headers] 
Access-Control-Allow-Origin: '*' 
Access-Control-Allow-Methods: POST, PUT, GET, OPTIONS, DELETE 
Access-Control-Max-Age: [some age] 
Access-Control-Allow-Headers: [own headers] 

和所述位置是存在於報頭,當我使用郵差

請求我使用Axios公司製造和的配置是

const config = { 
    url: [someURL], 
    method: 'GET', 
    headers: { 
    'customHeader':'token', 
    }, 
    params: { 
    [params] 
    }, 
    maxRedirects: 0, 
    validateStatus: status => (status >= 200 && status < 300) || status === 302, 
}; 

任何幫助將真正理解,爲什麼反應是不確定的,當它達到我的JS代碼,但在郵差和Chrome的正常工作。

我可以解決這個問題的一個方法是使用HTTP狀態代碼200並獲取位置標頭重定向,但我想避免這種情況,因爲它在技術上是重定向響應。

+0

可能您可以嘗試檢查'readyState'狀態並查找'HEADERS_RECEIVED'(https://xhr.spec.whatwg.org/)。請檢查此http://stackoverflow.com/questions/228225/prevent-redirection-of-xmlhttprequest答案。 –

+0

但我得到一個未定義的響應,其中不包含任何狀態或響應正文或標題 – diepjy

回答

2

'customHeader':'token'請求的一部分triggers your browser to first send a CORS preflight OPTIONS request任何您添加到標題以外的其他請求的標頭定義爲CORS-safelisted request-headers觸發瀏覽器發送CORS預檢選項請求。

Postman沒有得到這個的原因是,與瀏覽器引擎不同,郵差沒有實現CORS,所以它不會發送OPTIONS請求。 (Postman不在相同來源的Web安全模式下運行,瀏覽器針對Web應用程序執行此操作)。

如果服務器沒有以正確方式響應CORS預檢選項請求,您的請求將失敗,唯一的解決方法是不要將'customHeader':'token'部分添加到您的請求中,否則以任何觸發瀏覽器執行CORS預檢的方式構建您的請求。

+0

我有其他終端可以正常工作(GET,POST,DELETE,PUT和OPTION)以及CORS預檢選項請求,除了端點返回302響應。我不太清楚「以任何觸發瀏覽器執行CORS預檢的方式構建請求」的含義,這是否意味着我必須將位置標題添加到我的請求中? – diepjy