国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

javascript跨域

PingCAP / 2361人閱讀

摘要:實現跨域的原理通過方式請求載入并執行一個文件,相當于通過的形式的導入一個外部的方法語法該函數是簡寫的函數,等價于在中,您可以通過使用形式的回調函數來加載其他網域的數據,如。將自動替換為正確的函數名,以執行回調函數。

更多詳情見http://blog.zhangbing.club/Ja...

最近在項目開發的過程中遇到一些Javascript 跨域請求的問題,今天抽空對其進行總結一下,以備后用,也希望同學們在遇到類似問題的時候可以有所幫助。

Javascript跨域問題是web開發人員最常碰到的一個問題之一。所謂Javascript跨域問題,是指在一個域下的頁面中通過js訪問另一個不同域下的數據對象,出于安全性考慮,幾乎所有瀏覽器都不允許這種跨域訪問,這就導致在一些ajax和iframe應用中,使用跨域的web service會成為一個問題。

javascript跨域圖表

那到底什么是跨域,簡單地理解就是因為JavaScript同源策略的限制,a.com 域名下的js無法操作b.com或是c.a.com域名下的對象。更詳細的說明可以看下表:

特別注意兩點:

第一,如果是協議和端口造成的跨域問題“前臺”是無能為力的,

第二:在跨域問題上,域僅僅是通過“URL的首部”來識別而不會去嘗試判斷相同的ip地址對應著兩個域或兩個域是否在同一個ip上。

“URL的首部”指window.location.protocol +window.location.host,也可以理解為“Domains, protocols and ports must match”(本段來自網絡,個人覺得這段對js跨域描述得在清晰不過了)。跨域請求無處不在,平時我們在開發活動過程中,活動靜態頁面通過Javascript訪問前端CGI就是明顯的主域相同,子域不同的跨域例子,一般活動靜態頁面都是類似這樣的(http://業務名.xx.com/act/活動...,前端CGI 是這樣的(http://www.xx.com/act/活動目... 下面來看看我們都是如何處理跨域請求的:

動態創建script

雖然瀏覽器默認禁止了跨域訪問,但并不禁止在頁面中引用其他域的JS文件,script標簽的src屬性引用指向接收方的一個處理地址(后臺),該地址返回的javascript方法會被執行,另外URL中可以傳入一些參數,該方法只支持GET方式提交參數。我們常用FloadJS方法用的就是這種跨域方式。

使用Jquery中getScript和getJson方法實現跨域

Jquery 的getScript 和 getJson方法都可以調用跨域的js或服務端腳本,但是它們的實現原理不一樣。

1.getScript 方法
語法:jQuery.getScript(url,success(response,status))
該函數是簡寫的 Ajax 函數,等價于:

$.ajax({
  Type: get,
  url: url,
  dataType: "script",
  success: success
});

jQuery 1.2 版本之前,getScript 只能調用同域 JS 文件。 1.2中,您可以跨域調用 JavaScript 文件。注意:Safari 2 或更早的版本不能在全局作用域中同步執行腳本。如果通過 getScript 加入腳本,請加入延時函數。

實現跨域的原理:通過 GET 方式請求載入并執行一個 JavaScript 文件, 相當于通過src的形式的導入一個外部的js

2.getJson方法
語法:jQuery.getJSON(url,data,success(data,status,xhr))
該函數是簡寫的 Ajax 函數,等價于:

$.ajax({
  url: url,
  data: data,
  success: callback,
  dataType: json
});

在jQuery 1.2 中,您可以通過使用 JSONP 形式的回調函數來加載其他網域的 JSON 數據,如 "myurl?callback=?"。jQuery 將自動替換 ? 為正確的函數名,以執行回調函數。

實現跨域的原理:采用Jsonp原理實現跨域

到這里大家有沒有發現一個問題,好像一直都在討論http get 請求方式的跨域問題,難道post 請求就不存在跨域問題嗎?其實原生態From 表單 POST 到一個后臺處理腳本是不存在跨域問題,因為提交過程不牽涉到JS操作其它域名的對象,可是POST表單后,頁面會刷新,給用戶帶來的體驗不佳,這時我們經常會想到用jquery ajax post 方法來提交表單, 雖然這種方式不會刷新頁面,但是會存在跨域問題。因為ajax本身實際上是通過XMLHttpRequest對象來進行數據的交互,而瀏覽器出于安全考慮,是不允許js代碼進行跨域操作,進而會發警告,所以jquery ajax post 是行不通的,可能這時有人會說,用jsonp數據類型啊,但是jsonp目前只支持get請求方式,對post請求不支持。我們在平時開發過程又不得不用post方式,因為get方式對請求的數量有大小限制,那在這種情況下如何保證用戶良好的頁面體驗,又能解決跨域問題呢? 其實這時我們可以用最常見的document.domain + iframe 方式來實現。

document.domain + iframe

這種方式只適用主域名相同,子域名不同的情形,在我們項目開發過程,這種方式還是比較適用。

服務端代理

從上面的說明可以看到,客戶端的解決方案局存在一定的局限性,而且對于ajax跨域請求,無論兩個域是否屬于同個基礎域,都無法在客戶端加以解決,也就是說如果我們要想在ajax請求中訪問其他域下的數據,就只能通過服務端進行處理了。服務端的解決方案的基本原理就是,由客戶端將請求發給本域服務器,再由本域服務器的代理來請求數據并將響應返回給客戶端。

使用HTML 5 postMessage方式

HTML5中最酷的新功能之一就是 跨文檔消息傳輸Cross Document Messaging。下一代瀏覽器都將支持這個功能:Chrome 2.0+、Internet Explorer 8.0+, Firefox 3.0+, Opera 9.6+, 和 Safari 4.0+ 。 Facebook已經使用了這個功能,用postMessage支持基于web的實時消息傳遞。
otherWindow.postMessage(message, targetOrigin);
otherWindow: 對接收信息頁面的window的引用??梢允琼撁嬷衖frame的contentWindow屬性;window.open的返回值;通過name或下標從window.frames取到的值。
message: 所要發送的數據,string類型。
targetOrigin: 用于限制otherWindow,“*”表示不作限制
a.com/index.html中的代碼。
但是HTML5 在IE6, IE7瀏覽器下不兼容,目前移動端解決跨域問題用得比較多, PC機上用得比較少。

使用flash

如果你要讀取一個外部文件,比如swf,picture,mp3等等,那么就需要一個跨域策略文件,allow-access-from domain表示允許訪問的URl,如果有多個依次添加,如果允許所有就一個 allow-access-from domain = "*"就可以了。

個人小結

在項目開發過程如果能用get方式解決的就盡量使用它,畢竟get的性能也比post高,而且處理get跨域請求的方法也比較多,比如用jquery庫的 getScript和getJson方法。如果提交的數據比較大,一定用post方式提交,并且考慮用戶的功能體驗,可以用document.domain + iframe的方式來處理。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/95577.html

相關文章

  • JavaScript」JS兩種服務端相關跨域方法詳解

    摘要:之前我們講了一下四種跨域的方式四種跨域方式詳解。這四種方式是使用純來進行跨域的。今天就介紹兩種有涉及到服務器的跨域技術。 之前我們講了一下四種 JavaScript 跨域的方式 - 「JavaScript」四種跨域方式詳解。這四種方式是使用純 JavaScript 來進行跨域的。 今天就介紹兩種有涉及到服務器的跨域技術。 一、反向代理服務器 基礎思想很簡單,將你的服務器配置成 需要跨域...

    kid143 評論0 收藏0
  • jsonp跨域資源引起CORB

    摘要:三原因分析瀏覽器在加載可以跨域資源時,在將資源載入頁面時對其進行識別與攔截等一系列處理。從而禁用了客戶端瀏覽器的類型嗅探行為即把不可執行的類型轉變為可執行的類型。 一、jsonp的使用 jsonp是實現跨域請求數據的一種方式,解決了由于瀏覽器同源策略帶來的安全限制;雖然瀏覽器有同源策略的限制,但對于一些特殊的dom元素卻可引用非同源資源,例如 等,下面結合例子說明: jquery直接發...

    wuyangnju 評論0 收藏0
  • 跨域方法總結(一),JSONP

    摘要:注為頂級域名,為二級域名,為三級域名跨域并非瀏覽器限制了發起跨站請求,而是跨站請求可以正常發起,但返回結果被瀏覽器攔截了。四總結首先在客戶端注冊一個,然后把的名字傳給服務器。 前言 博主博客:Stillwater的博客知乎專欄:前端汪汪本文為作者原創轉載請注明出處:http://hiztx.top/2017/01/15/j... ??本文介紹了什么是跨域,為什么要跨域,以及跨域的一種...

    KoreyLee 評論0 收藏0
  • 同源策略及跨域訪問

    摘要:同源策略及跨域訪問同源策略同源策略約束了兩個域之間資源的加載方式,是一個很重要的安全機制用來隔離那些有潛在安全隱患的文檔。 同源策略及跨域訪問 同源策略 同源策略(Same-origin policy)約束了兩個域之間資源的加載方式,是一個很重要的安全機制用來隔離那些有潛在安全隱患的文檔。 何為源(orgin) 一個源由一個URL的協議(protocol)、主機(host)和端口(po...

    tomato 評論0 收藏0
  • JS 跨域原因及其解決方案

    摘要:產生跨域問題的原因跨域問題是瀏覽器同源策略限制,當前域名的只能讀取同域下的窗口屬性。比如,其中是協議名,是子域名,是主域名,端口號是,當在在頁面中從一個請求數據時,如果這個的協議名子域名主域名端口號任意一個有一個不同,就會產生跨域問題。 產生跨域問題的原因 跨域問題是瀏覽器同源策略限制,當前域名的js只能讀取同域下的窗口屬性。 跨域問題產生的場景 當要在在頁面中使用js獲取其他網...

    voidking 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<