在本地用js文件發送ajax請求,向服務器獲取數據時,會報html
Failed to load http://xxx.xx.xx.xxx No 'Access-Control-Allow-Origin' header is present on the requested resource Origin 'http://localhost:63342' is therefore not allowed access.
緣由是出現了跨域,而ajax只能同源使用前端
何爲同源nginx
瀏覽器安全的基石是"同源政策"(same-origin policy)
1995年,同源政策由 Netscape 公司引入瀏覽器。目前,全部瀏覽器都實行這個政策。
最初,它的含義是指,A網頁設置的 Cookie,B網頁不能打開,除非這兩個網頁"同源"。所謂"同源"指的是"三個相同"。
協議相同
域名相同
端口相同
舉例來講,http://www.example.com/dir/page.html 這個網址
協議是 http:// ,域名是 www.example.com ,端口是80(默認端口能夠省略)
它的同源狀況以下
http://www.example.com/dir2/other.html 同源
http://example.com/dir/other.html 不一樣源(域名不一樣)
http://v2.www.example.com/dir/other.html 不一樣源(域名不一樣)
http://www.example.com:81/dir/other.html 不一樣源(端口不一樣)
1.2 目的
同源政策的目的,是爲了保證用戶信息的安全,防止惡意的網站竊取數據。
設想這樣一種狀況:A網站是一家銀行,用戶登陸之後,又去瀏覽其餘網站。若是其餘網站能夠讀取A網站的 Cookie,會發生什麼?
很顯然,若是 Cookie 包含隱私(好比存款總額),這些信息就會泄漏。更可怕的是,Cookie 每每用來保存用戶的登陸狀態,若是用戶沒有退出登陸,其餘網站就能夠冒充用戶,隨心所欲。由於瀏覽器同時還規定,提交表單不受同源政策的限制。
因而可知,"同源政策"是必需的,不然 Cookie 能夠共享,互聯網就毫無安全可言了。
1.3 限制範圍
隨着互聯網的發展,"同源政策"愈來愈嚴格。目前,若是非同源,共有三種行爲受到限制。
(1) Cookie、LocalStorage 和 IndexDB 沒法讀取。
(2) DOM 沒法得到。
(3) AJAX 請求不能發送。
雖然這些限制是必要的,可是有時很不方便,合理的用途也受到影響。
原文地址:
http://www.ruanyifeng.com/blog/2016/04/same-origin-policy.htmlweb
而本地ip和服務器不是同源,因此ajax發送不成功
那就得想辦法解決,去網上找資料發現
flask
有庫能夠用,http://flask-cors.readthedocs.io/en/latest/
nginx
也能夠作ajax
但需求實際上是前端想在本地調試ajax,因此犯不着去動服務器,由於這個東西存在一些安全隱患
因此找了最簡單的方式:chrome
chrome有一個叫Allow-Control-Allow-Origin: *
的插件,
https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi
但這個插件開啓了後,在pycharm裏用chrome打開html文件會報404,不懂什麼問題,但它確實能用flask
還有一個是在mac終端裏輸入,注意yourname
是mac用戶的名字
open -n /Applications/Google\ Chrome.app/ --args --disable-web-security --user-data-dir=/Users/yourname/MyChromeDevUserData/
這樣會打開一個不安全的chrome,至關於沙箱模式的瀏覽器
在這個chrome裏能隨意發送ajax請求,固然也只是作測試用跨域
參考:
http://www.cnblogs.com/mackxu/p/cross-domain.html
http://www.ruanyifeng.com/blog/2016/04/cors.html瀏覽器