服務(wù)器響應(yīng)fetch的GET請(qǐng)求一定要在響應(yīng)頭上設(shè)置'Access-Control-Allow-Origin'這個(gè)參數(shù)么?
這是易班的API、不是我的服務(wù)器
在瀏覽器上發(fā)出請(qǐng)求時(shí)沒(méi)問(wèn)題的
查了幾個(gè)資料發(fā)現(xiàn)都沒(méi)什么用
這是我get請(qǐng)求的代碼
function request_get(url) {
return fetch(url, {
credentials: 'include',
}).then(function(response) {
return response.json()
})
}
該問(wèn)題是由瀏覽器的同源策略導(dǎo)致,解決方案也有若干種:
JSONP
CORS
使用Nginx或者Express靜態(tài)資源服務(wù)器進(jìn)行網(wǎng)絡(luò)proxy配置,模擬本地與遠(yuǎn)程為同源來(lái)進(jìn)行數(shù)據(jù)拉取
這說(shuō)明你所請(qǐng)求的 API 與你的頁(yè)面并不在同一個(gè)域下,如果該 API 沒(méi)有設(shè)置 Access-Control-Allow-Origin
字段,那么說(shuō)明它并非一個(gè)支持跨域訪問(wèn)的 API 接口。頁(yè)面編寫(xiě) Fetch 邏輯時(shí),不論請(qǐng)求頭如何定制,也會(huì)被瀏覽器攔截(fetch 前,瀏覽器會(huì)發(fā)起一個(gè) preflight 的 OPTIONS 請(qǐng)求,根據(jù)響應(yīng)的頭字段,判斷是否允許 fetch。這時(shí)是瀏覽器判斷出 API 不支持跨域,故而出于安全考慮攔截了請(qǐng)求)。