導航:首頁 > 編程語言 > js谷歌跨域

js谷歌跨域

發布時間:2023-07-15 03:56:27

javascript 跨域 問題

XMLHttpRequest2 進行跨域訪問時需要伺服器許可,不是任何域都接受跨域請求的。先來看一下從 Yahoo YQL 域返回的響應頭(Response Header ):

HTTP/1.1200OK
Set-Cookie:AO="o=1&s=1&dnt=1";Version=1;Domain=yahoo.com;Max-Age=630720000;Expires=Sat,18-Jun-203310:07:41GMT;Path=/
Access-Control-Allow-Origin:*
Cache-Control:public,max-age=899
Content-Type:text/xml;charset=utf-8
Content-Encoding:gzip
Vary:Accept-Encoding
Date:Sun,23Jun201310:07:40GMT

注意裡面有一條標識 Access-Control-Allow-Origin:* ,這就表示允許跨域訪問,所以可以正常訪問該域,而對於其他沒有該標識的域就會出現禁止訪問提示。

那麼如何設置呢?如果要接受跨域訪問請求,就必須在伺服器端返回的資源中加入Access-Control-Allow-Origin 頭標識,Access-Control-Allow-Origin 的值可以是 URL或 *,如果是 URL 則只會允許來自該 URL 的請求,* 則允許任何域的請求。比如,在 HTML 中可以設置:

<metahttp-equiv="Access-Control-Allow-Origin"content="*">

<metahttp-equiv="Access-Control-Allow-Origin"content="http://www..com:80">

② 如何用CORS來解決js中跨域的問題

1、CORS的原理:CORS定義一種跨域訪問的機制,可以讓AJAX實現跨域訪問。CORS 允許一個域上的網路應用向另一個域提交跨域 AJAX 請求。實現此功能非常簡單,只需由伺服器發送一個響應標頭即可。

2、tomcat如何配置cors的跨域請求:
在tomcat中,有一個和cors相關的攔截器:CORS Filter

該過濾器可以通過添加必需的訪問控制請求頭Access-Control-*對象來進行跨域。同時還可以對一些請求進行攔截。如果請求是無效的,或者是不被允許的,該請求被拒絕或者禁止。
其在web.xml文件中的基本配置如下:

<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>
http://localhost:8080,
https://localhost:8443
</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>
GET,POST,HEAD,OPTIONS,PUT
</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>
Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Access-Control-Allow-Origin
</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>
Access-Control-Allow-Origin,Access-Control-Allow-Credentials
</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.preflight.maxage</param-name>
<param-value>10</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/wxrefund/*</url-pattern>
</filter-mapping>

3、cors.allowed.origins:允許訪問資源的源列表。*表示任何來源都可以訪問該資源。否則,只有配置的白名單的來源可以訪問該資源,其中白名單用逗號隔開,如http://localhost:8080,https://localhost:8443。

4、cors.allowed.methods:允許訪問的http請求方法,如GET,POST,HEAD,OPTIONS,PUT等,方法名用逗號隔開。

5、cors.allowed.headers:在實際請求時可使用的請求頭列表,用逗號隔開。如Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Access-Control-Allow-Origin。這些頭也將返回作為訪問控制的一部分。

③ 跨域怎麼解決

問題一:如何解決跨域問題 特別注意兩點:
第一,如果是協議和埠造成的跨域問題「前台」是無能為力的,
第二:在跨域問題上,域僅僅是通過「URL的首部」來識別而不會去嘗試判斷相同的ip地址對應著兩個域或兩個域是否在同一個ip上。
「URL的首部」指window.location.protocol +window.location.host,也可以理解為「Domains, protocols and ports must match」。
2. 前端解決跨域問題
1> document.domain + iframe (只有在主域相同的時候才能使用該方法)
1) 在a/a中:
復制代碼
document.domain = 'a';
var ifr = document.createElement('iframe');
ifr.src = 'script.a/b';
ifr.display = none;
document.body.appendChild(ifr);
ifr.onload = function(){
var doc = ifr.contentDocument || ifr.contentWindow.document;
在這里操作doc,也就是b
ifr.onload = null;
};
復制代碼
2) 在script.a/b中:
document.domain = 'a';
2> 動態創建script
這個沒什麼好說的,因為script標簽不受同源策略的限制。
復制代碼
function loadScript(url, func) {
var head = document.head || document.getElementByTagName('head')[0];
var script = document.createElement('script');
script.src = url;
script.onload = script.onreadystatechange = function(){
if(!this.readyState || this.readyState=='loaded' || this.readyState=='plete'){
func();
script.onload = script.onreadystatechange = null;
}
};
head.insertBefore(script......>>

問題二:如何解決跨域問題 由 於此前很少寫前端的代碼(哈哈,不合格的程序員啊),最近項目中用到json作為系統間交互的手段,自然就伴隨著眾多ajax請求,隨之而來的就是要解決 ajax的跨域問題。本篇將講述一個小白從遇到跨域不知道是跨域問題,到知道是跨域問題不知道如何解決,再到解決跨域問題,最後找到兩種方法解決ajax 跨域問題的全過程。
不知是跨域問題
起 因是這樣的,為了復用,減少重復開發,單獨開發了一個用戶許可權管理系統,共其他系統獲取認證與授權信息,暫且稱之為A系統;調用A系統以B為例。在B系統 中用ajax調用A系統系統的介面(數據格式為json),當時特別困惑,在A系統中訪問相應的url可正常回返json數據,但是在B系統中使用 ajax請求同樣的url則一點兒反應都沒有,好像什麼都沒有發生一樣。這樣反反復復改來改去好久都沒能解決,於是求救同事,提醒可能是ajax跨域問 題,於是就將這個問題當做跨域問題來解決了。
知跨域而不知如何解決
知道問題的確切原因,剩下的就是找到解決問題的方法了。google了好久,再次在同事的指點下知道jQuery的ajax有jsonp這樣的屬性可以用來解決跨域的問題。
找到一種解決方式
現在也知道了怎樣來解決跨域問題,餘下的就是實現的細節了。實現的過程中錯誤還是避免不了的。由於不了解json和jsonp兩種格式的區別,也犯了錯誤,google了好久才解決。
首先來看看在頁面中如何使用jQuery的ajax解決跨域問題的簡單版:
復制代碼
$(document).ready(function(){
var url='localhost:8080/...upById
+?id=1&callback=?';
$.ajax({
url:url,
dataType:'jsonp',
processData: false,
type:'get',
success:function(data){
alert(data.name);
},
error:function(XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
}});
});
復制代碼
這樣寫是完全沒有問題的,起先error的處理函數中僅僅是alert(「error」),為了進一步弄清楚是什麼原因造成了錯誤,故將處理函數變 為上面的實現方式。最後一行alert使用為;parsererror。百思不得其解,繼續google,最終還是在萬能的stackoverflow找 到了答案,鏈接在這里。原因是jsonp的格式與json格式有著細微的差別,所以在server端的代碼上稍稍有所不同。
比較一下json與jsonp格式的區別:
json格式:
{
message&q......>>

問題三:跨域是指什麼,因為什麼引起的?有哪些解決方案?web前端知識 跨域是指 不同域名之間相互訪問 例如 我的電腦上有2個伺服器 192.168.0.11 192.168.0.12 如果第一個伺服器上的頁面要訪問第二個伺服器 就叫做跨域 或者 要訪問xxx 也是不同域名 也是跨域
HTML5 里有個window.postMessage 方法,支持跨域訪問,詳情可以參考
webhek/window-postmessage-api
如果你的程序在伺服器上,也可以進行相應的操作來完成跨域訪問
純手打 有問題歡迎咨詢

問題四:如何解決跨域問題 打開IE瀏覽器,在工具菜單下選擇Internet選項,打開Internet選項卡
切換到安全選項卡下,點擊可信站點,然後單擊站點按鈕
可信站點窗口輸入網址到可信站點的區域,點擊添加按鈕,網址則會添加到網站列表下,最後關閉可信站點窗口
還是在安全選項卡下的可信站點,點擊自定義級別
打開受信任的站點區域窗口,找到跨域瀏覽窗口和框架選擇啟用
在當前窗口中繼續往下翻,通過域訪問數據源也選擇啟用,點擊確定關閉受信任的站點區域窗口
在Internet窗口也點擊確定按鈕,同時關閉瀏覽器
在請求的js腳本中添加是否允許跨域訪問的許可權,jQuery.support.cors默認值為true,則代表允許;反之,不允許。設置完成,重新打開瀏覽器驗證即可

問題五:$跨域請求怎麼解決 post請求進行跨域
angularjs內置封裝了類ajax的網路服務$,所以實現了依賴外部插件來完成完整的前後端分離方案
$scope.main = {
getData: function () {
$({
method: 'POST',
url: 'localhost:8000',
headers: {
'Content-Type' : 'application/x--form-urlencoded'
},
data: {
myUrl: 'c.m.163/...0'
}
}).then(function success(result) {
數據請求成功
console.log(result.data);
},function error(err) {
數據請求失敗
console.log(err);
});
}
};
注意:表面上是向$中傳入了一個回調函數提供相應時調用,實際是返回了一個promise對象,angular1.2以上的版本對$進行了優化
優化後:
$scope.main = {
getData: function () {
var myUrl = 'c.m.163/...0';
var url = 'localhost:8000';
var promise = $({
method: 'POST',
url: url,
headers: {
'Content-Type' : 'text/plain'
......>>

問題六:如何解決跨域問題 關於跨域名問題還是問題么,這方面的解決實踐非常多,今天我就舊話重提把我所知道的通過幾個應用場景來分別總結一下(轉帖請註明出處:blog.csdn/lenel)
先說明一點:我說的某某域名在您的控制下的意思是這個域名下的網頁由您來負責開發內部的JavaScript
場景一:將bbs.xxx的頁面用iframe嵌入到xxx的中,如何在iframe內外使用js通信(轉帖請註明出處:blog.csdn/lenel)
一級域名都是xxx 這個域名一定是在您的控制下,所以你只要在兩個頁面中同時升級域名即可
在父窗口和iframe內部分別加上js語句:document.domain=xxx;
之後2個頁面就等於在同一域名下,通過window.parent oIframe.contentDocument就可以相互訪問,進行無障礙的JS通信
在新浪、淘寶等很多頁面都能找到這樣的語句。不過document.domain不可以隨便指定,只能向上升級,從bbs.xxx升級到yyy肯定會出錯
場景二:將yyy的頁面用iframe嵌入到xxx的中,兩個域名都在您的控制下,如何在iframe內外進行一定的數據交流(轉帖請註明出處:blog.csdn/lenel)
你可以通過相互改變hash值的方式來進行一些數據的通信
這里的實現基於如下技術要點:
1、父窗口通過改變子窗口的src中的hash值把一部分信息傳入,如果src只有hash部分改變,那麼子窗口是不會重新載入的。
2、
子窗口可以重寫父窗口的location.href,但是注意這里子窗口無法讀取而只能重寫location.href所以要求前提是您控制兩個域名,知
道當前父窗口的location.href是什麼並寫在子窗口內,這樣通過parent.location.href =
已知的父窗口的href+#+hash。這樣父窗口只有hash改變也不會重載。
3、上面兩步分別做到了兩個窗口之間的無刷新數據通知,
那麼下面的來說如何感知數據變化。標准中沒有相關規定,所以當前的任意瀏覽器遇到location.hash變化都不會觸發任何javaScript事
......>>

問題七:如何解決javascript的跨域問題 一般是用iframe設置
document.domain = 'a';var ifr = document.createElement('iframe');ifr.src = 'a/index';ifr.style.display = 'none';document.body.appendChild(ifr);ifr.onload = function(){ var doc = ifr.contentDocument || ifr.contentWindow.document; console.log(doc.documentElement.innetHTML);};然後HTML5新特性有 ,postMessage
function Init () { if (window.addEventListener) { all browsers except IE before version 9 window.addEventListener (message, OnMessage, false); } else { if (window.attachEvent) { IE before version 9 window.attachEvent(onmessage, OnMessage); } } } function GetState () { var frame = document.getElementById (myFrame); var message = getstate;參數if (frame.contentWindow.postMessage) { 傳遞的參數,後面是傳遞的你的跨域域名frame.contentWindow.postMessage (message, *); } } function OnMessage (event) { console.log(event.data);} document.body.onload=function(){Init();GetState();};

問題八:如何解決跨域問題 VPN或者域名

問題九:如何解決請求跨域的問題 jsonp 是寫 script 標簽,只能滿足 get 請求。跨域 post 的話,IE8 及以上和其他主流瀏覽器可以用 window.postMessage 來實現,也就是傳說中的 HTML5 方法了,可以看下標准,代碼很簡單。IE6、7 就用老式的方法

問題十:怎麼解決伺服器間的跨域問題 服務端的解決方案的基本原理就是,由客戶端將請求發給本域伺服器,再由本域伺服器的代理來請求數據並將響應返回給客戶端。
最常用的伺服器解決方案就是利用web伺服器本身提供的proxy功能,如apache和ligd的mod_proxy模塊。在網路內 部,tran *** it的分流功能也可以解決部分跨域問題。但這些方法都有一定的局限性,鑒於安全性等問題的考慮,space這邊最後開發了一個專門用於處
理跨域請求代理服務的spproxy模塊,用於徹底解決js跨域問題。
下面我們將以空間的開放平台為例,簡單介紹下如何通過apache的mod_proxy、tran *** it的分流以及space的spproxy模塊來解
決該跨域問題,並簡單介紹下spproxy的一些特性、缺點及下一步的改進計劃。
空間在展現每個UWA開放模塊之前都必須請求該模塊的xml源代碼以進行解析,每個模塊的源代碼文件都是存放在act域下的/ow/uwa目錄下,那麼在

用戶空間首頁(hi域)中請求該xml文件時就會存在js跨域問題。要解決該問題,只能讓js向hi域的web伺服器請求xml文件,而hi域web服務
器則通過一定的代理機制(如mod_proxy、tran *** it分流、spproxy)向act域的web伺服器請求文件

閱讀全文

與js谷歌跨域相關的資料

熱點內容
安卓代碼讀取界面信息 瀏覽:714
數控車床車55度螺紋怎麼編程 瀏覽:391
word桌面找不到文件 瀏覽:585
數控車床編程怎麼做到的 瀏覽:639
哈爾濱市行政區劃代碼 瀏覽:716
如何顯示文件擴張 瀏覽:283
ps怎麼移植文件 瀏覽:443
傳奇補丁文件說明 瀏覽:513
奧維地圖怎麼設置網路疊加 瀏覽:407
linux載入庫文件so失敗 瀏覽:714
大家都想要的app 瀏覽:58
程序員比特幣 瀏覽:568
mysqlfrm是什麼文件 瀏覽:665
win10點擊文件夾聲音消失 瀏覽:963
蘋果手機空白文件名 瀏覽:833
linuxmv覆蓋合並文件夾 瀏覽:932
不開訪客網路怎麼聯網 瀏覽:631
win10的軟體卸載 瀏覽:779
crv汽車自帶網路怎麼打開 瀏覽:973
食品原材料到什麼網站購買 瀏覽:649

友情鏈接