修正
Access-Control-Allow-Headers
一定不要設(shè)置為*
在移動(dòng)端會(huì)出現(xiàn) 預(yù)檢請(qǐng)求不通過的狀況累驮,切記切記切記!C绻稹逼泣!
概念
什么是CORS趴泌?
跨域資源共享(CORS) 是一種機(jī)制,它使用額外的 HTTP 頭來(lái)告訴瀏覽器 讓運(yùn)行在一個(gè) origin (domain) 上的Web應(yīng)用被準(zhǔn)許訪問來(lái)自不同源服務(wù)器上的指定的資源拉庶。當(dāng)一個(gè)資源從與該資源本身所在的服務(wù)器不同的域嗜憔、協(xié)議或端口請(qǐng)求一個(gè)資源時(shí),資源會(huì)發(fā)起一個(gè)跨域 HTTP 請(qǐng)求氏仗。
一吉捶、自定義請(qǐng)求頭跨域
Access to XMLHttpRequest at 'http://192.168.0.130:8001/api/test/test' from origin 'http://192.168.0.130:8002' has been blocked by CORS policy: Request header field authorization is not allowed by Access-Control-Allow-Headers in preflight response.
預(yù)檢請(qǐng)求
與簡(jiǎn)單請(qǐng)求不同,“需預(yù)檢的請(qǐng)求”要求必須首先使用 OPTIONS 方法發(fā)起一個(gè)預(yù)檢請(qǐng)求到服務(wù)器皆尔,以獲知服務(wù)器是否允許該實(shí)際請(qǐng)求帚稠。"預(yù)檢請(qǐng)求“的使用,可以避免跨域請(qǐng)求對(duì)服務(wù)器的用戶數(shù)據(jù)產(chǎn)生未預(yù)期的影響床佳。
當(dāng)請(qǐng)求滿足下述任一條件時(shí),即應(yīng)首先發(fā)送預(yù)檢請(qǐng)求:
使用了下面任一 HTTP 方法:
- PUT
- DELETE
- CONNECT
- OPTIONS
- TRACE
- PATCH
人為設(shè)置了對(duì) CORS 安全的首部字段集合之外的其他首部字段榄审。該集合為: - Accept
- Accept-Language
- Content-Language
- Content-Type (需要注意額外的限制)
- ...
也就是說(shuō) 當(dāng)你自定義了請(qǐng)求頭砌们,瀏覽器就會(huì)先發(fā)送預(yù)檢請(qǐng)求,期望得到想要的Access-Control-Allow-Headers
返回頭
舉個(gè)例子
下面是一個(gè)預(yù)檢請(qǐng)求,因?yàn)槲姨砑恿藘蓚€(gè)自定義請(qǐng)求頭:authorization
浪感、custom
這是服務(wù)器給我們的返回頭為:
請(qǐng)注意昔头,因?yàn)榉祷仡^沒有Access-Control-Allow-Headers
所以瀏覽器阻止了接下來(lái)的get請(qǐng)求
控制臺(tái):
Access to XMLHttpRequest at 'http://192.168.0.130:8001/api/test/test' from origin 'http://localhost:8002' has been blocked by CORS policy: Request header field authorization is not allowed by Access-Control-Allow-Headers in preflight response.
什么意思呢?意思就是說(shuō)請(qǐng)求頭是不被授權(quán)的影兽,已被CORS策略阻止
CORS策略
正確的返回頭:
這里填寫的是被允許的自定義請(qǐng)求頭