成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Nginx配置跨域請求 Access-Control-Allow-Origin *

zhangke3016 / 2818人閱讀

摘要:給服務(wù)器配置后,表示服務(wù)器可以接受所有的請求源即接受所有跨域的請求。三預(yù)檢請求其實上面的配置涉及到了一個標準全稱是跨域資源共享,它的提出就是為了解決跨域請求的。服務(wù)器確認允許之后,才發(fā)起實際的請求。

當出現(xiàn)403跨域錯誤的時候 No "Access-Control-Allow-Origin" header is present on the requested resource,需要給Nginx服務(wù)器配置響應(yīng)的header參數(shù):

一、 解決方案

只需要在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;
    }
} 
上面配置代碼即可解決問題了,不想深入研究的,看到這里就可以啦=-=
二、 解釋 1. Access-Control-Allow-Origin
服務(wù)器默認是不被允許跨域的。給Nginx服務(wù)器配置`Access-Control-Allow-Origin *`后,表示服務(wù)器可以接受所有的請求源(Origin),即接受所有跨域的請求。
2. Access-Control-Allow-Headers 是為了防止出現(xiàn)以下錯誤:

Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.

這個錯誤表示當前請求Content-Type的值不被支持。其實是我們發(fā)起了"application/json"的類型請求導致的。這里涉及到一個概念:預(yù)檢請求(preflight request),請看下面"預(yù)檢請求"的介紹。

3. Access-Control-Allow-Methods 是為了防止出現(xiàn)以下錯誤:

Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.

4.給OPTIONS 添加 204的返回,是為了處理在發(fā)送POST請求時Nginx依然拒絕訪問的錯誤

發(fā)送"預(yù)檢請求"時,需要用到方法 OPTIONS ,所以服務(wù)器需要允許該方法。

三、 預(yù)檢請求(preflight request)

其實上面的配置涉及到了一個W3C標準:CROS,全稱是跨域資源共享 (Cross-origin resource sharing),它的提出就是為了解決跨域請求的。

跨域資源共享(CORS)標準新增了一組 HTTP 首部字段,允許服務(wù)器聲明哪些源站有權(quán)限訪問哪些資源。另外,規(guī)范要求,對那些可能對服務(wù)器數(shù)據(jù)產(chǎn)生副作用的HTTP 請求方法(特別是 GET 以外的 HTTP 請求,或者搭配某些 MIME 類型的 POST 請求),瀏覽器必須首先使用 OPTIONS 方法發(fā)起一個預(yù)檢請求(preflight request),從而獲知服務(wù)端是否允許該跨域請求。服務(wù)器確認允許之后,才發(fā)起實際的 HTTP 請求。在預(yù)檢請求的返回中,服務(wù)器端也可以通知客戶端,是否需要攜帶身份憑證(包括 Cookies 和 HTTP 認證相關(guān)數(shù)據(jù))。

其實Content-Type字段的類型為application/json的請求就是上面所說的搭配某些 MIME 類型的 POST 請求,CORS規(guī)定,Content-Type不屬于以下MIME類型的,都屬于預(yù)檢請求:

application/x-www-form-urlencoded
multipart/form-data
text/plain

所以 application/json的請求 會在正式通信之前,增加一次"預(yù)檢"請求,這次"預(yù)檢"請求會帶上頭部信息 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)時,返回的頭部信息如果不包含Access-Control-Allow-Headers: Content-Type則表示不接受非默認的的Content-Type。即出現(xiàn)以下錯誤:

Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.

參考文章:

阮一峰【跨域資源共享 CORS 詳解】
MDN web docs【HTTP訪問控制(CORS)】

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/39740.html

相關(guān)文章

  • CORS方式實現(xiàn)ajax跨域 --- nginx配置

    摘要:目前,所有瀏覽器都支持該功能,瀏覽器不能低于。因此,實現(xiàn)通信的關(guān)鍵是服務(wù)器。如果指定的域名在許可范圍內(nèi),服務(wù)器返回的響應(yīng),會多出頭信息字段也可能多出其他可選字段或者是表示接受任意域名的請求。 實際跨域問題及其解決方案 1.課題:ajax實現(xiàn)跨域訪問 2.背景: 1.畫面服務(wù)器:192.168.196.6 → tomcat服務(wù)2.js模板服務(wù)器:192.168.196.8 → ngi...

    csRyan 評論0 收藏0
  • Nginx CORS跨域

    摘要:場景我們的資源來自網(wǎng)絡(luò)的四面八方,所以難免需要用上跨域,業(yè)界也有非常多跨域的解決方案,這次我是來說說跨域與狀態(tài)碼之間的一個問題。 場景 我們的資源來自網(wǎng)絡(luò)的四面八方,所以難免需要用上跨域,業(yè)界也有非常多跨域的解決方案,這次我是來說說跨域與狀態(tài)碼之間的一個問題。 問題 當我們的 URL 地址返回的狀態(tài)碼是 400、403、404、500 的時候,跨域的資源是不會跟隨返回的,也就是說,即便...

    xiao7cn 評論0 收藏0
  • Nginx實踐篇(3)- 跨域訪問

    摘要:瀏覽器一般默認會禁止跨域訪問。因為不安全,容易出現(xiàn)跨站請求偽造攻擊。二控制瀏覽器允許跨域訪問通過添加等頭信息的方式控制瀏覽器緩存。 一、什么是跨域 跨域是指從一個域名的網(wǎng)頁去請求另一個域名的資源。比如從 www.a.com 頁面去請求 www.b.com 的資源。 showImg(https://segmentfault.com/img/remote/1460000015873212?...

    twohappy 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<