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

資訊專欄INFORMATION COLUMN

Nginx CORS跨域

xiao7cn / 2906人閱讀

摘要:場景我們的資源來自網(wǎng)絡(luò)的四面八方,所以難免需要用上跨域,業(yè)界也有非常多跨域的解決方案,這次我是來說說跨域與狀態(tài)碼之間的一個(gè)問題。

場景

我們的資源來自網(wǎng)絡(luò)的四面八方,所以難免需要用上跨域,業(yè)界也有非常多跨域的解決方案,這次我是來說說跨域與狀態(tài)碼之間的一個(gè)問題。

問題

當(dāng)我們的 URL 地址返回的狀態(tài)碼是 400、403、404、500 的時(shí)候,跨域的資源是不會跟隨返回的,也就是說,即便是 Nginx 上配置了 add_header 關(guān)鍵字,也不會隨著內(nèi)容返回而返回。

舉個(gè)例子說:

add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods *;

當(dāng)我們在請求對應(yīng)地址的時(shí)候,理應(yīng)是會返回已經(jīng)配置好的頭部信息,但是我們來看看最終的結(jié)果。

200
HTTP/1.1 200 OK
Server: openresty/1.11.2.2
Date: Fri, 26 Jan 2018 08:46:39 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 558
Last-Modified: Tue, 28 Mar 2017 01:13:24 GMT
Connection: keep-alive
ETag: "58d9b8b4-22e"
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: *
Accept-Ranges: bytes

內(nèi)容無誤。

404
HTTP/1.1 404 Not Found
Server: openresty/1.11.2.2
Date: Fri, 26 Jan 2018 08:47:18 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 175
Connection: keep-alive

神奇了,這里404狀態(tài)碼下面居然自定義的響應(yīng)頭消失了。

原因與解決方式

留意 Nginx 文檔上說的:

Adds the specified field to a response header provided that the response code equals 200, 201 (1.3.10), 204, 206, 301, 302, 303, 304, 307 (1.1.16, 1.0.13), or 308 (1.13.0). The value can contain variables.

意思就是說,add_header 只會追加到以上響應(yīng)狀態(tài)碼的響應(yīng)頭上面。

因?yàn)樵蹅兊?API 有各種的狀態(tài)碼返回,那么其他狀態(tài)碼下,該怎么辦? 大家留意文檔上有一個(gè)參數(shù)。

Syntax:    add_trailer name value [**always**];
Default:    —
Context:    http, server, location, if in location
This directive appeared in version 1.13.2.

你會發(fā)現(xiàn)有個(gè) [always] 參數(shù),那么這個(gè)參數(shù),就是讓你的配置頭,應(yīng)用在所有的影響上面去。

將參數(shù)添加進(jìn)去:

add_header Access-Control-Allow-Origin * always;
add_header Access-Control-Allow-Methods * always;

重啟 nginx 服務(wù)器后重試一下.

200
HTTP/1.1 200 OK
Server: openresty/1.11.2.2
Date: Fri, 26 Jan 2018 09:01:36 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 558
Last-Modified: Tue, 28 Mar 2017 01:13:24 GMT
Connection: keep-alive
ETag: "58d9b8b4-22e"
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: *
Accept-Ranges: bytes

200請求沒變化,一切正常。

404
HTTP/1.1 404 Not Found
Server: openresty/1.11.2.2
Date: Fri, 26 Jan 2018 09:02:12 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 175
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: *

現(xiàn)在 404 也正確了。我們的跨域也正是配置完成。

關(guān)于 OPTIONS 請求

當(dāng)我們前端發(fā)起跨域請求的時(shí)候,會事先發(fā)起一次 OPTIONS 請求,以用來查詢該接口是否支持跨域和對應(yīng)的請求方法。

在配置方面可以這么做。

if ($request_method = OPTIONS) {
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods *;
    add_header Access-Control-Allow-Credentials true;
    return 204;
   }

當(dāng)然我這里的 * 這么用是不好的,你需要對應(yīng)域名去配置。

另外PHP方面我們也提供了一個(gè) CORS 的擴(kuò)展庫,可以直接在fastd中使用。

github: cors-provider

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

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

相關(guān)文章

  • CORS跨域Nginx反向代理跨域優(yōu)劣對比

    摘要:最近寫了一些關(guān)于前后端分離項(xiàng)目之后,跨域相關(guān)方案的基本原理和常見誤區(qū)的帖子,主要包括和反向代理。反向代理此時(shí)后端相當(dāng)于不跨域,和正常請求一致,無需額外配置。 最近寫了一些關(guān)于前后端分離項(xiàng)目之后,跨域相關(guān)方案的基本原理和常見誤區(qū)的帖子,主要包括CORS和Nginx反向代理。這兩種方案項(xiàng)目中都有在用,各有優(yōu)缺,關(guān)于具體使用哪種方案,大家的觀點(diǎn)也不大一致,本文主要就此展開一下,從前后端及服務(wù)...

    yiliang 評論0 收藏0
  • CORS方式實(shí)現(xiàn)ajax跨域 --- nginx配置

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

    csRyan 評論0 收藏0
  • 徹底弄懂跨域問題

    摘要:用于告知瀏覽器可以將預(yù)先檢查請求返回結(jié)果緩存的時(shí)間,在緩存有效期內(nèi),瀏覽器會使用緩存的預(yù)先檢查結(jié)果判斷是否發(fā)送跨域請求。 跨域,老生常談的問題 簡述 作為一只前端菜鳥,跨域方面只懂得JSONP和CORS,并未曾深入了解。但隨著春招越來越近,就算是菜鳥也要猛振翅膀。近幾日仔細(xì)研究了跨域問題,寫下這篇文章,希望對開發(fā)者們有所幫助。在讀本文前,希望您對以下知識略有了解。 瀏覽器同源策略 n...

    rose 評論0 收藏0
  • 跨域問題匯總

    摘要:因?yàn)闉g覽器的同源策略,前端開發(fā)會遇到各種跨域問題。前言在總結(jié)各種跨域問題之前,我們先來了解一下瀏覽器的同源策略。所以只能解決一級域名相同二級域名不同的跨域問題。 跨域問題的場景和解決方案多種多樣,只要是做前端開發(fā),總會遇到。而且面試時(shí)也是必問的問題。所以自己學(xué)習(xí)總結(jié)記錄一下。 因?yàn)闉g覽器的同源策略,前端開發(fā)會遇到各種跨域問題。本篇文章總結(jié)了遇到跨域問題的不同的場景以及對應(yīng)的解決方案。 ...

    MkkHou 評論0 收藏0

發(fā)表評論

0條評論

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