首先簡單瞭解下什麼是跨域:javascript
跨域,指的是瀏覽器不能執行其餘網站的腳本。它是由瀏覽器的同源策略形成的,是瀏覽器對javascript施加的安全限制。php
所謂同源是指,域名,協議,端口均相同,不明白不要緊,舉個栗子:html
http://www.666.com/index.html 調用 http://www.666.com/server.php (非跨域)前端
http://www.666.com/index.html 調用 http://www.777.com/server.php (主域名不一樣:666/777,跨域)java
http://abc.666.com/index.html 調用 http://def.666.com/server.php (子域名不一樣:abc/def,跨域)ajax
http://www.666.com:8080/index.html 調用 http://www.666.com:8081/server.php (端口不一樣:8080/8081,跨域)後端
http://www.666.com/index.html 調用 https://www.666.com/server.php (協議不一樣:http/https,跨域)跨域
請注意:localhost和127.0.0.1雖然都指向本機,但也屬於跨域。瀏覽器
瀏覽器執行javascript腳本時,會檢查這個腳本屬於哪一個頁面,若是不是同源頁面,就不會被執行。安全
大體瞭解後廢話少數,直接上代碼;
extjs 前端代碼:
//跨域請求修改數據 $.ajax({ type : "POST", url : 'http://10.18.66.66:8080/SK/updateUnitProjectMonthPlanStatus.do', traditional : true,//規定是否使用傳統的方式淺層進行序列化(參數序列化) data : { 'MONTH_PLAN_ID_' : monthPlan.MONTH_PLAN_ID_ }, xhrFields : { withCredentials : true }, success : function(data) { if (data.success) { //alert("解除工程預算,成功!"); } }, error : function() { Ext.MessageBox.alert('誒,跨域失敗了,服務器大哥那邊不願。', data.message, Ext.MessageBox.ERROR); } });
JAVA後端
response.addHeader("P3P", "CP=CAO PSA OUR");// 使用P3P協議自動更改IE瀏覽器安全級別 // 獲取請求方地址request.getHeader("Origin") // 設置容許跨域 response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); // 是否容許後續請求攜帶認證信息(cookies),該值只能是true,不然不返回 response.setHeader("Access-Control-Allow-Credentials", "true");