關于CORS可以閱讀這篇文章:
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:國際域名空間、網頁空間、營銷軟件、網站建設、興平網站維護、網站推廣。https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
相關的請求頭:
Origin:
Access-Control-Request-Method:
在發(fā)出預檢請求時帶有這個頭信息,告訴服務器在實際請求時會使用的請求方式
Access-Control-Request-Headers:
以上請求頭是由瀏覽器自動設置的,不需要修改客戶端代碼
相關響應頭:
Access-Control-Allow-Origin:
Access-Control-Expose-Headers: X-My-Custom-Header, X-Another-Custom-Header設置瀏覽器允許訪問的服務器的頭信息的白名單
Access-Control-Max-Age:
Access-Control-Allow-Credentials: true | false告知客戶端,當請求的credientials屬性是true的時候,響應是否可以被得到(???貌似要攜帶cookie信息必須設為true)
Access-Control-Allow-Methods:
Access-Control-Allow-Headers:
以上頭信息需要配置服務器,根據請求頭中的信息判斷是否允許跨域,然后返回相應的請求頭
nginx 配置
STEP 1 : 創(chuàng)建cors.conf.part 文件,或者直接寫到 server/location 下面
# 默認允許的域,比如這里配置為 http://mydomain.com ,那么從 baidu.com localhost 或 # 者 192.168.2.210 過來的都是不允許的 set $cors_header_origin \'http://mydomain.com\'; # 因為 \'Access-Control-Allow-Origin\' 只能指定一個域或者 *,所以將允許的請求域設置到響應頭中 # 使用正則匹配請求頭中攜帶的 Origin 信息,判斷是否允許訪問。這里會允許 http://static.mydomain.com # http://downloads.mydomian.com http://www.mydomain.com 等域訪問,相當于通配符 *.mydomain.com if ($http_origin ~* "http[s]?://.*?.mydomain.com") { # 如果是來自允許跨域的域,則更新變量,待后面添加響應頭使用 set $cors_header_origin $http_origin; } # 允許的請求方法 set $cors_header_methods \'GET, POST, PUT, DELETE, OPTIONS\'; # 允許的頭信息 set $cors_header_headers \'Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,token\'; # 是否相應credientials請求 set $cors_header_credentials \'true\'; # 預請求結果有效時間 set $cors_header_max_age 1728000; # 如果是發(fā)出的預請求 if ($request_method = \'OPTIONS\') { add_header \'Access-Control-Allow-Origin\' $cors_header_origin; add_header \'Access-Control-Allow-Methods\' $cors_header_methods; add_header \'Access-Control-Allow-Headers\' $cors_header_headers; add_header \'Access-Control-Allow-Credentials\' $cors_header_credentials; add_header \'Access-Control-Max-Age\' $cors_header_max_age; add_header \'Content-Type\' \'text/plain charset=UTF-8\'; add_header \'Content-Length\' 0; return 204; } # 簡單請求配置 POST GET HEAD if ($request_method = \'POST\') { add_header \'Access-Control-Allow-Origin\' $cors_header_origin; add_header \'Access-Control-Allow-Methods\' $cors_header_methods; add_header \'Access-Control-Allow-Headers\' $cors_header_headers; } if ($request_method = \'GET\') { add_header \'Access-Control-Allow-Origin\' $cors_header_origin; add_header \'Access-Control-Allow-Methods\' $cors_header_methods; add_header \'Access-Control-Allow-Headers\' $cors_header_headers; }
STEP 2 : vhosts.conf 虛擬主機配置文件中引入跨域配置
# tomcat server { server_name www.mydomain.com #...... 省略其他配置 location / { # 在 location 內導入剛才我們創(chuàng)建的 cors.conf.part 代碼片段 # cors conf include /etc/nginx/conf.d/cors.conf.part; proxy_pass http://tomcat; } } # 下載服務器 server { server_name downloads.mydomain.com #...... 省略其他配置 location / { # 在 location 內導入剛才我們創(chuàng)建的 cors.conf.part 代碼片段 # cors conf include /etc/nginx/conf.d/cors.conf.part; root /data/www/downloads; } } # 其他不允許跨域訪問的服務器 server { server_name ac.mydomain.com #...... 省略其他配置 location / { # 不導入跨域配置 # include /etc/nginx/conf.d/cors.conf.part; root /data/www/ac; } }