問題產生原因:
-
原因1:W3C的 xhr 標準中做了限制,規定客戶端無法獲取 response 中的
Set-Cookie
、Set-Cookie2
這2個欄位,無論是同域還是跨域請求; -
原因2:W3C 的 cors 標準對於跨域請求也做了限制,規定對於跨域請求,客戶端允許獲取的response header欄位只限於“
simple response header
”和“Access-Control-Expose-Headers
” (兩個名詞的解釋見下方)。"simple response header"包括的 header 欄位有:Cache-Control,Content-Language,Content-Type,Expires,Last-Modified,Pragma; "Access-Control-Expose-Headers":首先得注意是"Access-Control-Expose-Headers"進行跨域請求時響應頭部中的一個欄位,對於同域請求,響應頭部是沒有這個欄位的。這個欄位中列舉的 header 欄位就是伺服器允許暴露給客戶端訪問的欄位。
所以
getAllResponseHeaders()
只能拿到限制以外(即被視為safe
)的header欄位,而不是全部欄位;而呼叫getResponseHeader(header)
方法時,header
引數必須是限制以外的header欄位,否則呼叫就會報Refused to get unsafe header
的錯誤。具體可以看看segmentfault的一篇文章:
-
你真的會使用XMLHttpRequest嗎?