天天看點

Nginx允許跨域和禁止跨域操作

Nginx預設是禁止跨域操作,可能說到跨域好多夥伴會有點迷糊,什麼叫跨域?為什麼不能跨域呢?  看下面小編的詳解。

url

說明

是否跨域

http://www.cnblogs.com/a.js

http://www.a.com/b.js

不同域名

http://www.a.com/lab/a.js

http://www.a.com/script/b.js

同一域名下不同檔案夾

http://www.a.com:8000/a.js

同一域名,不同端口

http://www.a.com/a.js

https://www.a.com/b.js

同一域名,不同協定

http://70.32.92.74/b.js

域名和域名對應ip

http://script.a.com/b.js

主域相同,子域不同

是(cookie不可通路)

http://a.com/b.js

同一域名,不同二級域名(同上)

禁止跨域的原因是這樣可以更安全,據小編了解假如浏覽器記錄了a.com的網站上的cookie,拿到了b.com的網站的進行了驗證這樣就存在了安全風險。小編這塊對安全的需求不是了解特别透徹有必要加強。

解決方案:

  因為nginx預設是禁止跨域通路的,所有當跨域請求資料的時候拿不到相應的資料,特别是字型。

生産環境介紹:

    通路www.a.com的時候,需要調用www.b.com下的css、js、image、字型等,因為設計到跨域,是以nginx拒絕了我的字型的請求,是以在www.b.com下面的server中加了一個location即可。

1

2

3

4

<code># 由于字型使用跨域的方式進行的調用,預設浏覽器拒絕通路,加上這個location就可以在其他域名下通路這個域名的字型了</code>

<code>    </code><code>location ~* \.(eot|ttf|woff|svg|otf|woff2)$ {</code>

<code>             </code><code>add_header Access-Control-Allow-Origin *;</code>

<code>    </code><code>}</code>

生産環境遇到的問題用上述方法解決了,下面說說如何允許跨域:

在需要允許跨域的server中下面加上下面三句代碼即可:

5

6

7

8

9

<code># 該字段是必須的。它的值要麼是請求時Origin字段的值,要麼是一個*,表示接受任意域名的請求。</code>

<code>add_header </code><code>'Access-Control-Allow-Origin'</code> <code>'*'</code><code>;</code>

<code># 該字段可選。它的值是一個布爾值,表示是否允許發送Cookie。</code>

<code>#  預設情況下,Cookie不包括在CORS請求之中。設為true,即表示伺服器明确許可,</code>

<code>#  Cookie可以包含在請求中,一起發給伺服器。這個值也隻能設為true,</code>

<code>#  如果伺服器不要浏覽器發送Cookie,删除該字段即可</code>

<code>add_header </code><code>'Access-Control-Allow-Credentials'</code> <code>'true'</code><code>;</code>

<code># 該字段是必須的,用來列出浏覽器的CORS請求會用到哪些HTTP方法,上例是PUT。</code>

<code>add_header </code><code>'Access-Control-Allow-Methods'</code> <code>'*'</code><code>;</code>

本文轉自 xinsir999 51CTO部落格,原文連結:http://blog.51cto.com/xinsir/1953251,如需轉載請自行聯系原作者

繼續閱讀