ajax跨域問題

當兩個域具備相同的協議(如http), 相同的端口(如80),相同的host(如www.example.org),那麼咱們就能夠認爲它們是相同的域javascript

Access-Control-Allow-Origin解決Ajax跨域問題 // 指定可信任的域名來接收響應信息,推薦php

<?php header('Access-Control-Allow-Origin:http://A.abc.com'); ?>html

或加入 // 使用通配符 * ,表示當前服務端通話任何域名發起請求,不推薦html5

<?php header('Access-Control-Allow-Origin:*'); ?>java

就這樣在服務端簡單加一句響應頭responese headers聲明,一個跨域請求就不會被瀏覽器的同源安全策略所阻止了 header('Access-Control-Allow-Origin:*');是html5新增的一項標準功能,所以 IE10如下 版本的瀏覽器是不支持 的, 所以,若是要求兼容IE9或更低版本的ie瀏覽器,會致使使用此種方式的跨域請求以及傳遞Cookie的計劃夭折, 最終還得迴歸JSONP(目前主流的處理方式是使用JSONP,易於實現,兼容性好 須要注意的是: 添加響應頭responese headers時,容許跨域請求的域名帶不帶斜槓/仍是有區別的,帶斜槓/會報錯: XMLHttpRequest cannot load abc.com/B. The 'Access-Control-Allow-Origin' header has a value 'http://A.abc.org/' that is not equal to the supplied origin. Origin 'http://A.abc.org' is therefore not allowed access.web

跨域解決後,若是還要操做Cookie,還得繼續補增響應頭:ajax

<?php header('Access-Control-Allow-Credentials:true'); ?>chrome

須要將 XMLHttpRequest 對象的 withCredentials 屬性設置爲 true,JQuery1.5.1+ 就開始提供了相應的字段,使用方式以下: $.ajax({ url:"B.abc.com", xhrFields:{ withCredentials:true }, crossDomain:true }); 哦也~ 收到 Cookie 了。 設置 withCredentials 爲 true 的請求中會包含 A.abc.com端的全部Cookie,這些Cookie仍然遵循同源策略,因此,你只能訪問其中和 abc.com/B同根域的Cookie,而沒法訪問其餘域的Cookie。 Access-Control-Allow-Origin實則是html5 Cross-Origin Resource Sharing實現的最重要的一點參數配置。 Cross-Origin Resource Sharing,跨域資源共享,簡稱 CORS,能夠做爲一種跨域請求以及響應的解決方案。json

附: 禁用chrome本地安全策略,不用配服務器環境也能發起ajax請求: chrome 桌面快捷鍵 右鍵屬性 在快捷方式標籤下的「目標」框中加入 --disable-web-security,重啓瀏覽器便可跨域

1.server端加上header設爲 Access-Control-Allow-Origin:* # 跨域處理 弊端:不支持ie10如下版本瀏覽器的提交,項目中提交發現一直不成功

異常 ie10如下瀏覽器訪問 提示 javascript 訪問受限
request.open(method, url, true);(異步處理)受限制 由於 不支持ie10如下版本瀏覽器

2.ie9 和ie8版本處理 利用ajax jsonp 形式 post提交

注意:注意服務器端數據的返回 必須是jsonp的格式(在這裏卡半天,一直用json的格式返回  echo json_encode($rstr))
 echo $callback."(".json_encode($rstr).")";
相關文章
相關標籤/搜索