最近遇到一個關於ajax跨域請求,特此,我在這裏總結一下ajax跨域請求的問題吧。
原因:
1,瀏覽器會校驗ajax跨域請求,如果不通過就會報跨域安全問題;
2,請求不是本域的請求(協議,域名,端口不同都稱爲不是本域);
3,發出去的請求是(XMLHttpRequest)請求,簡稱XHR請求;
三個原因都存在纔會產生跨域安全問題!
解決:
1,瀏覽器客戶端對跨域請求不進行校驗(需要用戶自己更改瀏覽器的配置,不合適);
cmd啓動瀏覽器時
start chrome.exe --args --disable-web-security --user-data-dir
2,造成跨域問題的第二個原因,通過被調用方或調用方進行更改(重點);
①被調用方更改:
②調用方更改
由於種種情況,我們不能更改服務端代碼,所以,我們可以從代理着手,通常使用nginx進行反向代理。
配置一個server{
listen 8080;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location /apis {
rewrite ^.+apis/?(.*)$ /$1 break;
include uwsgi_params;
proxy_pass http://localhost:8080;
}
}
③,第三個原因,我們通常採用jsonp請求方式去請求;
之所以用jsonp是因爲請求的不是xhr請求,而是包裝了一下,JavaScript請求,這種請求,在後臺有個callback方法。
所以在服務器端需要改動。