XMLHttpRequest.withCredentials 解決跨域請求頭無Cookie的問題
阿新 • • 發佈:2019-01-08
XMLHttpRequest.withCredentials 屬性是一個Boolean
型別,它指示了是否該使用類似cookies,authorization headers(頭部授權)或者TLS客戶端證書這一類資格證書來建立一個跨站點訪問控制(cross-site Access-Control
)請求。在同一個站點下使用withCredentials屬性是無效的。
此外,這個指示
也會被用做響應中
cookies 被忽視的標示。預設值是false。
如果在傳送來自其他域的XMLHttpRequest請求之前,未設定withCredentials
為true,那麼就不能為它自己的域設定cookie值。而通過設定withCredentials
注: 永遠不會影響到同源請求
Note: 不同域下的XmlHttpRequest
響應,不論其Access-Control-
header 設定什麼值,都無法為它自身站點設定cookie值,除非它在請求之前將withCredentials
設為true。
Post請求例項:
var xmlhttp if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest() } else { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP") } xmlhttp.open('POST', 'http://xxx/xxx/script', true) xmlhttp.setRequestHeader('Content-type', 'application/json') xmlhttp.withCredentials = true // 使外部指令碼中的post請求頭攜帶當前域的Cookies // 注意:這裡不能使用xmlhttp.setRequestHeader('Cookie', document.cookie),這樣設定是不安全的做法 // xmlhttp.setRequestHeader('Cookie', document.cookie) // error xmlhttp.send(JSON.stringify(postData))
Get請求例項:
var xmlhttp
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest()
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
}
xhr.open('GET', 'http://example.com/', true)
xhr.withCredentials = true
xhr.send(null)
Ajax請求:
$.ajaxSetup({ type: "POST", data: {}, dataType: 'json', xhrFields: { withCredentials: true }, crossDomain: true })
資料:https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/withCredentials