1.畫面服務器:192.168.196.6 → tomcat服務
2.js模板服務器:192.168.196.8 → nginx服務
3.畫面服務需跨域請求js資源html
過程當中通過了幾回配置,出現過如下錯誤nginx
1.No 'Access-Control-Allow-Origin' header is present on the requested resource,The response had HTTP status code 404
2.No 'Access-Control-Allow-Origin' header is present on the requested resource,The response had HTTP status code 405
nginx服務配置(nginx.conf):ajax
location xxx { alias xxx; --容許GET請求,GET請求時返回如下頭信息 if ($request_method = 'GET') { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Headers' 'X-Requested-With'; } --容許預檢請求,預檢請求時返回如下頭信息 if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'X-Requested-With'; add_header 'Content-Length' 0; return 204; } } 分析: 1.個人跨域請求是GET方法,因此只配置GET就好用了。 2.個人請求是非簡單請求,因此須要給預檢請求(OPTIONS)配置接口。
CORS是一個W3C標準,全稱是Cross-origin resource sharing(跨域資源共享)。
CORS須要瀏覽器和服務器同時支持。目前,全部瀏覽器都支持該功能,IE瀏覽器不能低於IE10。
所以,實現CORS通訊的關鍵是服務器。只要服務器實現了CORS接口,就能夠跨源通訊。json
知足如下兩個條件就是簡單請求segmentfault
(2) HTTP的頭信息不超出如下幾種字段:api
請求過程
1.瀏覽器直接發出CORS請求。跟普通請求相比,增長一個Origin字段。跨域
GET /cors HTTP/1.1 Origin: http://192.168.196.160 Host: xxx Accept-Language: xxx Connection: xxx User-Agent: xxx
2.若是Origin指定的域名在許可範圍內,服務器返回的響應,會多出頭信息字段Access-Control-Allow-Origin(也可能多出其餘可選字段)瀏覽器
Access-Control-Allow-Origin: http://192.168.196.160 //或者是 *,表示接受任意域名的請求。 Content-Type: text/html; charset=utf-8
非簡單請求會在請求以前增長"預檢"請求(prelight)。tomcat
預檢請求服務器
服務器獲得預檢請求後,檢查Origin,Access-Control-Request-Method,Access-Control-Request-Headers字段,
若是確認容許跨域請求,就能夠HTTP迴應中帶上這三個頭信息,以下
Access-Control-Allow-Origin: 請求源域名或者* Access-Control-Allow-Methods: GET, POST, PUT Access-Control-Allow-Headers: X-Custom-Header
若是不容許跨域請求,服務器返回正常相應,可是不帶cors頭信息字段,瀏覽器就會觸發錯誤以下
XMLHttpRequest cannot load 請求源域名 Origin http://api.bob.com is not allowed by Access-Control-Allow-Origin.