首先,貼上nginx work的配置html
server{
listen 8099;
server_name wdm.test.cn;
location / {nginx
// 沒有配置OPTIONS的話,瀏覽器若是是自動識別協議(http or https),那麼瀏覽器的自動OPTIONS請求會返回不能跨域
if ($request_method = OPTIONS ) {
add_header Access-Control-Allow-Origin "$http_origin";
add_header Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, DELETE";
add_header Access-Control-Max-Age "3600";
add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization";
add_header Access-Control-Allow-Credentials "true";
add_header Content-Length 0;
add_header Content-Type text/plain;
return 200;
}
add_header 'Access-Control-Allow-Origin' '$http_origin';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, PUT, POST, DELETE, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Content-Type,*';
proxy_pass http://127.0.0.1:8080;
}
}ajax
其次,既然碰到了就想理解下爲何須要這樣,一開始腦殼還真鑽進去了。跨域
如下引自知乎:瀏覽器
簡單的說,你把Cookie託付給瀏覽器保存,瀏覽器要保證你的Cookie不被惡意網站利用。安全
同源策略並不能防止DDos,由於跨域的Ajax也會被請求,若是http://Evil.com用Ajax請求http://MyBank.com,瀏覽器會先發出 服務器
請求,而且帶上http://MyBank.com的Cookie。拿到http://MyBank.com的響應以後(可能有敏感數據),瀏覽器纔會根據Headercookie
裏的Access-Control-Allow-Origin決定是否把結果交給http://Evil.com裏的腳本。(或者先發一個OPTIONS請求看一下CORS設網站
置,再決定是否要發真正的請求。)spa
所以瀏覽器只是起到了最基本的防護,在寫程序的時候仍是要注意防護CSRF,好比關鍵操做不要用GET,POST請求要作額外的驗證(