2021-03-02 分類: 網(wǎng)站建設(shè)
當(dāng)出現(xiàn)403跨域錯(cuò)誤的時(shí)候 No 'Access-Control-Allow-Origin' header is present on the requested resource,需要給Nginx服務(wù)器配置響應(yīng)的header參數(shù),下面一起來(lái)看看吧!
一、 配置跨域
只需要在Nginx的配置文件中配置以下參數(shù):
- location / {
- add_header Access-Control-Allow-Origin *;
- add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
- add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
- if ($request_method = 'OPTIONS') {
- return 204;
- }
- }
上面配置代碼即可解決問(wèn)題了。
二、 參數(shù)說(shuō)明
1. Access-Control-Allow-Origin
服務(wù)器默認(rèn)是不被允許跨域的。給Nginx服務(wù)器配置`Access-Control-Allow-Origin *`后,表示服務(wù)器可以接受所有的請(qǐng)求源(Origin),即接受所有跨域的請(qǐng)求。
2. Access-Control-Allow-Headers 是為了防止出現(xiàn)以下錯(cuò)誤:
- Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.
這個(gè)錯(cuò)誤表示當(dāng)前請(qǐng)求Content-Type的值不被支持。其實(shí)是我們發(fā)起了"application/json"的類型請(qǐng)求導(dǎo)致的。這里涉及到一個(gè)概念:預(yù)檢請(qǐng)求(preflight request),請(qǐng)看下面"預(yù)檢請(qǐng)求"的介紹。
3. Access-Control-Allow-Methods 是為了防止出現(xiàn)以下錯(cuò)誤:
- Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.
4. 給OPTIONS 添加 204的返回,是為了處理在發(fā)送POST請(qǐng)求時(shí)Nginx依然拒絕訪問(wèn)的錯(cuò)誤
發(fā)送"預(yù)檢請(qǐng)求"時(shí),需要用到方法 OPTIONS ,所以服務(wù)器需要允許該方法。
三、 預(yù)檢請(qǐng)求(preflight request)
其實(shí)上面的配置涉及到了一個(gè)W3C標(biāo)準(zhǔn):CROS,全稱是跨域資源共享 (Cross-origin resource sharing),它的提出就是為了解決跨域請(qǐng)求的。
跨域資源共享(CORS)標(biāo)準(zhǔn)新增了一組 HTTP 首部字段,允許服務(wù)器聲明哪些源站有權(quán)限訪問(wèn)哪些資源。另外,規(guī)范要求,對(duì)那些可能對(duì)服務(wù)器數(shù)據(jù)產(chǎn)生副作用的HTTP 請(qǐng)求方法(特別是 GET 以外的 HTTP 請(qǐng)求,或者搭配某些 MIME 類型的 POST 請(qǐng)求),瀏覽器必須首先使用 OPTIONS 方法發(fā)起一個(gè)預(yù)檢請(qǐng)求(preflight request),從而獲知服務(wù)端是否允許該跨域請(qǐng)求。服務(wù)器確認(rèn)允許之后,才發(fā)起實(shí)際的 HTTP 請(qǐng)求。在預(yù)檢請(qǐng)求的返回中,服務(wù)器端也可以通知客戶端,是否需要攜帶身份憑證(包括 Cookies 和 HTTP 認(rèn)證相關(guān)數(shù)據(jù))。
其實(shí)Content-Type字段的類型為application/json的請(qǐng)求就是上面所說(shuō)的搭配某些 MIME 類型的 POST 請(qǐng)求,CORS規(guī)定,Content-Type不屬于以下MIME類型的,都屬于預(yù)檢請(qǐng)求:
- application/x-www-form-urlencodEDMultipart/form-datatext/plain
所以 application/json的請(qǐng)求 會(huì)在正式通信之前,增加一次"預(yù)檢"請(qǐng)求,這次"預(yù)檢"請(qǐng)求會(huì)帶上頭部信息 Access-Control-Request-Headers: Content-Type:
- OPTIONS /api/test HTTP/1.1
- Origin: http://foo.example
- Access-Control-Request-Method: POST
- Access-Control-Request-Headers: Content-Type
- ...
服務(wù)器回應(yīng)時(shí),返回的頭部信息如果不包含Access-Control-Allow-Headers: Content-Type則表示不接受非默認(rèn)的的Content-Type。即出現(xiàn)以下錯(cuò)誤:
- Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.
當(dāng)前題目:一文看懂Nginx如何配置跨域,值得收藏
網(wǎng)頁(yè)地址:http://jinyejixie.com/news48/103798.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、企業(yè)建站、網(wǎng)站制作、軟件開(kāi)發(fā)、做網(wǎng)站、動(dòng)態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容