在一個服務器A裏放置了json文件,另外一個服務器B想向A發送ajax請求,獲取此文件,會發生錯誤。html
Chrome提示:linux
XMLHttpRequest cannot load ******. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
這就是跨域問題。解決方案有很多,比較好的是服務器端配置CORS,但要求服務器端作更改。若是在不須要更改服務器端的狀況下解決呢?尤爲是須要在本地測試的時候。nginx
打開nginx目錄下的conf文件夾。打開nginx.conf,將其中的http請求修改成:ajax
http {
include mime.types;
server {
listen 80;
server_name localhost;
charset UTF-8;
location / {
root html;
index index.html index.htm;
}
# Avoid CORS and reverse proxy settings
location /api/ { # [2]
proxy_http_version 1.1;
proxy_pass http://www.des.com/; # [3]
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods "POST, GET, OPTIONS";
add_header Access-Control-Allow-Headers "Origin, Authorization, Accept";
add_header Access-Control-Allow-Credentials true;
}
}
}
注意粗體字的部分,/api/表示當請求api目錄時,轉向http://www.des.com/域名。
例如,請求:sql
http://127.0.0.1/api/ 就會轉向 http://www.des.com/json
http://127.0.0.1/api/aaa/bbb/ 就會轉向 http://www.des.com/aaa/bbb/windows
這種由服務器轉發的請求,能夠突破跨域的限制,所以ajax也能夠正常工做。api
注意:/api/ 不行寫成 /api。 跨域
http://www.des.com/ 也不能寫成 http://www.des.com服務器
爲了在本機測試看起來更像在目標服務器上測試,能夠設置系統的hosts文件。
每一個系統(windows、linux、Mac OS)都有hosts文件,它是本地的域名解析器。
一般,咱們請求一個域名,如www.baidu.com,首先要向域名服務器請求百度的IP地址,而後再根據IP地址來訪問。
也能夠不須要諮詢域名服務器,直接在本地的hosts鍵入百度的IP地址。例如
252.192.0.15 www.baidu.com
這樣,系統會先從hosts文件裏搜索IP地址。
Windows下的hosts文件位於:C:\Windows\System32\drivers\etc
打開後,添加
127.0.0.1 www.des.com
則,每次訪問www.des.com,就會連接到本地。