之前使用到JSONP的時候接觸了一下跨域請求的問題,記錄總結一下,以便以后參照。提到跨域,什么是跨域?只要協議、域名、端口有任何一個不同,都被當作是不同的域。
特別注意兩點:
第一:如果是協議和端口造成的跨域問題“前台”是無能為力的。
第二:在跨域問題上,域僅僅是通過“URL的首部”來識別而不會去嘗試判斷相同的ip地址對應着兩個域或兩個域是否在同一個ip上。
- 前台關於處理跨域的方法
(一)document.domain+iframe的設置
(二)動態創建script
(三)利用iframe和location.hash
(四)window.name實現的跨域數據傳輸
(五)使用HTML5 postMessage
(六)利用flash
(七)jsonp
(八)jQuery插件-jquery-jsonp。
angularjs關於解決跨域的問題
一、$http.jsonp【實現跨域】
1. 指定callback和回調函數名,函數名為JSON_CALLBACK時,會調用success回調函數,JSON_CALLBACK必須全為大寫。
2. 指定其它回調函數,但必須是定義在window下的全局函數。url中必須加上callback。
二、$http.get【實現跨域】
1. 在服務器端設置允許在其他域名下訪問
response.setHeader("Access-Control-Allow-Origin", "*"); //允許所有域名訪問 response.setHeader("Access-Control-Allow-Origin", "http://www.123.com"); //允許www.123.com訪問
2. AngularJS端使用$http.get()
三、$http.post【實現跨域】
1. 在服務器端設置允許在其他域名下訪問,及響應類型、響應頭設置
response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods","POST"); response.setHeader("Access-Control-Allow-Headers","x-requested-with,content-type");
2. AngularJS端使用$http.post(),同時設置請求頭信息
$http.post('http://localhost/ajax/getAllIndustryCategoty.pt',{languageColumn:'name_eu'},{'Content-Type':'application/x-www-form-urlencoded'}).success(function(data){ $scope.industries = data; });