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/b.js

同一域名,不同端口
http://www.a.com/a.js

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

同一域名,不同協議
http://www.a.com/a.js

http://70.32.92.74/b.js

域名和域名對應ip
http://www.a.com/a.js

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

主域相同,子域不同是(cookie不可訪問)
http://www.a.com/a.js

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即可。

# 由於字體使用跨域的方式進行的調用,默認瀏覽器拒絕訪問,加上這個location就可以在其他域名下訪問這個域名的字體了
    location ~* \.(eot|ttf|woff|svg|otf|woff2)$ {
             add_header Access-Control-Allow-Origin *;
    }

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

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

# 該字段是必須的。它的值要麼是請求時Origin字段的值,要麼是一個*,表示接受任意域名的請求。
add_header 'Access-Control-Allow-Origin' '*';
# 該字段可選。它的值是一個布爾值,表示是否允許發送Cookie。
#  默認情況下,Cookie不包括在CORS請求之中。設爲true,即表示服務器明確許可,
#  Cookie可以包含在請求中,一起發給服務器。這個值也只能設爲true,
#  如果服務器不要瀏覽器發送Cookie,刪除該字段即可
add_header 'Access-Control-Allow-Credentials' 'true';
# 該字段是必須的,用來列出瀏覽器的CORS請求會用到哪些HTTP方法,上例是PUT。
add_header 'Access-Control-Allow-Methods' '*';

 參考文檔:http://www.ruanyifeng.com/blog/2016/04/cors.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章