ajax跨域訪問筆記

使用ajax跨域提交混合表單(包含圖片)。

ajax跨域請求能夠提交表單,可是沒法接收到返回數據,返回數據會被瀏覽器攔截。javascript

JSONP只支持GET請求,沒法提交混合表單html

在響應頭中設置參數能夠令瀏覽器不攔截返回的數據,java

例:A服務器地址:www.aaa.com ; B服務器地址:www.bbb.comjquery

用瀏覽器打開A服務器的網頁a.html,在a.html中經過ajax提交混合表單到B服務器的b.htm接口;ajax

b.htm接口能夠在返回數據時,設置響應頭(JavaEE)json

response.setHeader("Access-Control-Allow-Origin", "http://www.bbb.com");
//或者,*是通配符,表示全部
response.setHeader("Access-Control-Allow-Origin", "*");

這樣a.html就能接收到b.htm返回的數據跨域

 

瀏覽器爲何要限制跨域訪問?

防止CSRF(Cross-site request forgery)攻擊瀏覽器

同源政策:瀏覽器中的cookie、storage、等都是經過域來劃分的安全

A網頁設置的 Cookie,B網頁不能打開,除非這兩個網頁協議相同、域名相同、端口相同服務器

使用js是能夠調用另外一個頁面的js的

newWindow = window.open("homepage.html", "", "width=1024,height=768");
newWindow.document.getElementById("main_iframe").src = '/SxtOffical/jsp/charge/charge.htm
//同域的頁面共享storage,能夠經過storage創建兩個頁面間js的聯繫
function change(){
    localStorage.time=new Date().getTime();
}

window.onstorage=function(e){
    location.reload();
}

可是JavaScript出於安全方面的考慮,不容許跨域調用其餘頁面的對象。

2.有哪些解決跨域訪問的方法

  • w3c標準中,有針對跨域請求的規範
  • JSONP方式
  • 設置document.domain共享Cookie,能夠在頁面設置,也可在服務器端設置
  • 經過iframe+form實現。
  • 在服務器端使用java.net.URL.openStream()方法獲取另外一個服務器上的資源,而後再返回給頁面。
相關文章
相關標籤/搜索