免费人妻精品一区二区三区-人人玩人人添人人澡东莞-很黄很色很污18禁免费-视频一区二区三区四区五区-久久99精品久久久久久9-国产97色在线 | 国-伊人七七-已婚少妇美妙人妻系列-欧美俄罗斯乱妇-奇米在线-国产精品99久久精品爆乳-欧美精品乱码视频一二专区-又大又爽又黄无码a片-粉嫩绯色av一区二区在线观看-国产爆乳无码av在线播放

Javascript 跨域知識詳細介紹

2016/11/10 8:43:26   閱讀:2162    發(fā)布者:2162

JS跨域知識總結:

在"跨域"一詞經(jīng)常性地出現(xiàn)以前,我們其實已經(jīng)頻繁地使用它了。如在A網(wǎng)站的img,
src指向B網(wǎng)站的某一圖片地址,毫無疑問,這在通常情況下都是能正常顯示的(且不論防盜鏈技術);
同樣,可以使script標簽的src屬性指向其它網(wǎng)站的腳本資源
(在某些情況下甚至鼓勵這樣做,以便充分利用其它網(wǎng)站的負載優(yōu)勢,減小自身服務器的并發(fā)量)。
然而,如若使用js去主動請求其它網(wǎng)站的數(shù)據(jù),
比如ajax方式,就會遇到讓人郁悶的跨域問題,這也是我們平常所說的跨域。
由于安全原因,跨域訪問是被各大瀏覽器所默認禁止的。這里涉及到同源策略的概念:
同源策略阻止從一個域上加載的腳本獲取或操作另一個域上的文檔屬性。
也就是說,受到請求的 URL 的域必須與當前 Web 頁面的域相同。
這意味著瀏覽器隔離來自不同源的內(nèi)容,以防止它們之間的操作。

跨域帶來的具體安全問題博主沒有深究,大伙可以自行腦補。

然而,很多情況下,特別是在互聯(lián)網(wǎng)持續(xù)發(fā)展的今天,我們需要請求來自不同合作伙伴或
數(shù)據(jù)提供商的前端接口,在跨域訪問的方式?jīng)]有規(guī)范化前(client端跨域訪問的需求看來也
引起w3c的注意了,看資料說html5 WebSocket標準支持跨域的數(shù)據(jù)交換,應該也是一個將來可選
的跨域數(shù)據(jù)交換的解決方案),有什么方法能繞過它的限制呢?答案有很多
(雖然都很麻煩),最常用的當屬所謂的JSONP跨域了。

JSONP原理

JSONP的最基本的原理是:動態(tài)添加一個<script>標簽,而script標簽的src屬性是沒有跨域的限制的。
這樣說來,這種跨域方式其實與ajaxXmlHttpRequest協(xié)議無關了。

JSONP即JSON with Padding。由于同源策略的限制,XmlHttpRequest只允許請求當前源
(域名、協(xié)議、端口)的資源。如果要進行跨域請求,我們可以通過使用html的script標記來進行
跨域請求,并在響應中返回要執(zhí)行的script代碼。 這種跨域的通訊方式稱為JSONP。

來個簡單的例子:

<!DOCTYPE html PUBLIC 
"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>Test Jsonp</title> <script type="text/javascript"> function jsonpCallback(result) { alert(result.msg); } </script> <script type="text/javascript" src="http://crossdomain.com/
jsonServerResponse?jsonp=jsonpCallback"></script> </head> <body> </body> </html>

  

簡述原理與過程:首先在客戶端注冊一個callback, 然后把callback的名字傳給服務器
(這里客戶端和服務器約定以key為jsonp的查詢字符串值傳遞)。此時,服務器先生成 json 數(shù)據(jù)。
然后以 javascript 語法的方式,生成一個function , function 名字就是傳遞上來的參數(shù) jsonp。
最后將 json 數(shù)據(jù)直接以入?yún)⒌姆绞?,放置?function 中,這樣就生成了一段 js 語法的文檔,
返回給客戶端??蛻舳藶g覽器,解析script標簽,并執(zhí)行返回的 javascript 文檔,
即執(zhí)行了預定義的callback函數(shù)。

從上述簡述可以推出:除了返回函數(shù)形式的js代碼片段,服務端自然能返回所有符合規(guī)范的可執(zhí)行js片段。

JSONP的缺點是:它只支持GET請求而不支持POST等其它類型的HTTP請求;它只支持跨域HTTP請求這種情況,
不能解決不同域的兩個頁面之間如何進行JavaScript調(diào)用的問題。(下面還有)

jQuery的Jsonp

如前所述,jsonp并非ajax請求,但是jQuery仍提供與jQuery.ajax一致的方式進行跨域請求:

$.ajax({ 
  url: ’http://crossdomain.com/jsonServerResponse’, 
  type: ’GET’, 
  dataType: ’jsonp’, 
  jsonp: "callback", 
  jsonpCallback: ’functionName’, 
  success: function (data, textStatus, jqXHR) { } 
  //…… 
}); 

  

如上所示,dataType設為jsonp表示這是一次跨域請求,jsonp設為服務端預定的
傳遞函數(shù)名稱的查詢字符串key,而jsonpCallback即為js函數(shù)名稱;假如jsonpCallback不設置,
那么jQuery將自動生成的隨機函數(shù)名(在window對象中加載一個全局的函數(shù),
當代碼插入時函數(shù)執(zhí)行,執(zhí)行完畢后就會被移除),可推斷該自動生成的函數(shù)會回調(diào)上述代碼中的success函數(shù)。
(當手動為jsonpCallback賦值時,不知道success函數(shù)會否回調(diào),
還是說jQuery會尋找預定義的函數(shù),若找不到則報錯?博主懶,以后再試吧。)
當然jQuery為我們提供了一個簡易版本,$.getJSON,這里就不贅述了。

需要注意的是success函數(shù)中的jqXHR參數(shù),在ajax請求中,它是正宗的jqXHR對象,
亦可看作是XMLHTTPRequest對象(繼承or封裝),但是在jsonp請求中卻并非如此,
幾乎不能帶給我們?nèi)鏧MLHTTPRequest中最有用的那些信息:
它缺少XMLHTTPRequest的請求狀態(tài)信息,所以并不能觸發(fā)絕大部分的回調(diào)函數(shù),
比如error、complete等(jQuery1.9.0),
而可以被回調(diào)的success函數(shù)推測應該是由script標記的load事件觸發(fā),
這也同ajax依靠XMLHTTPRequest的狀態(tài)的機制完全不同。經(jīng)試驗,
脫胎于jQuery的zepto(v1.1.3),在jsonp請求出現(xiàn)錯誤,
比如加載js文檔時頭部返回401錯誤時,error函數(shù)會執(zhí)行,但是該函數(shù)的jqXHR參數(shù)也同樣不是正宗的
jqXHR類型,甚至不能通過它獲取響應的頭部信息,在這種情況下,我們只是被告知某個環(huán)節(jié)出錯了,
卻并不知道具體的錯誤信息。類似響應頭承載有用信息的場景,博主不建議使用jsonp,可以說,
使用jsonp的一個前提是:除了網(wǎng)絡異常等非業(yè)務異常外,所有業(yè)務異常(概括地說,
乃是從服務器接收請求到返回響應這段時間內(nèi)拋出的所有異常)都需要以請求結果的形式直接返回給客戶端,
便于客戶端回調(diào)分析。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

主站蜘蛛池模板: 国产成人一区二区三区app | 欧美一区二区三区在线播放 | 极品少妇第一次偷高潮哇哇大 | 正在播放国产大学生情侣 | 在线看av网址 | 精品久久亚洲 | 欧美激情一区二区三区成人 | 欧美一区二区在线播放 | 久久精品国产久精国产思思 | 日本不卡不码高清视频 | 欧产日产国产精品98 | 精品99在线 | 欧美一区二区在线看 | 国产永久免费 | 亚洲精品自拍偷拍视频 | 男女做爰猛烈吃奶啪啪喷水网站 | 人摸人人人澡人人超碰97 | 亚洲男人第一av天堂 | 国产v视频在线亚洲视频 | 亚洲色无码专区在线观看 | 伊人久久成人爱综合网 | 性无码免费一区二区三区在线 | 2018年亚洲欧美在线v | 国产在线精品一区二区三区直播 | 在线97视频 | 国产精品视频免费在线观看 | 亚洲精品日本一区二区三区 | 亚洲最大的成人网 | 欧美精品小视频 | www.日本在线观看 | 一区二区网站 | 成年视频在线播放 | 久久中文字幕人妻丝袜系列 | 自拍偷自拍亚洲精品情侣 | 欧美xxxx做受欧美88bbw | 日本a级免费 | 亚洲欧洲自拍拍偷精品 美利坚 | 韩国三级hd中文字幕叫床 | 国产成人精品自产拍在线观看 | 久久成人国产精品入口 | 中文字幕乱偷无码av先锋蜜桃 | 国产午夜福利不卡在线观看 | 免费午夜福利不卡片在线 | 午夜宅男在线永久免费观看网 | 精品国产青草久久久久福利 | 国产成人美女裸体片免费看 | 国产强伦人妻毛片 | 人人妻人人澡人人爽国产一区 | 亚洲欧美日韩中文字幕在线一区 | 亚洲综合插 | 自拍偷拍国内 | 免费一本色道久久一区 | 欧洲av一区| 久久婷婷是五月综合色 | 国产www| 国产肉体xxxx裸体137大胆 | 99热91| 国产精品中文字幕在线 | 午夜福利18以下勿进免费 | 亚洲国产精品成人综合色在线婷婷 | 免费在线看黄网址 | 亚洲国产日韩在线 | 国产精品成人免费视频网站京东 | 亚洲欧美久久 | 狠狠精品干练久久久无码中文字幕 | 黑人一区二区 | 欧美性猛片xxxxx多人伦交 | 欧美在线视频一区二区三区 | 污视频在线播放 | 在线成人| 最新亚洲一卡二卡三卡四卡 | 精品亚洲aⅴ在线观看 | 欧美 亚洲 动漫 激情 自拍 | 羞羞动态图 | 国产亚洲精品资源在线26u | 婷婷在线视频 | 久久免费在线观看 | 一本到亚洲中文无码av | 67194熟妇在线直接进入 | 国产精品1区2区3区在线观看 | 嫦娥性艳史bd | 三级三级久久三级久久 | 久久www免费人成_看片老司机 | 三级在线网站 | 亚洲综合色成在线播放 | 免费一区二区三区四区 | 国产精品福利自产拍在线观看 | 国产精品亚洲专区无码破解版 | 国产精品极品在线拍 | 久久久穴| 撸啊撸av | 精品人妻系列无码人妻漫画 | 麻麻张开腿让我爽了一夜 | 无码专区aaaaaa免费视频 | 国自产拍偷拍精品啪啪一区二区 | 中文字幕日韩有码 | 久久伊人av综合影院 | 在线观看国产小视频 | 亚洲夜夜欢a∨一区二区三区 |