資源描述:
《ajax(xmlhttprequest)進(jìn)行跨域請求方法詳解》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、發(fā)表于:2010-1-11瀏覽:965作者:轉(zhuǎn)載遺失來源:網(wǎng)絡(luò)轉(zhuǎn)載關(guān)鍵字:AJAX,詳解,請求描述:注意:以下代碼請在Firefox3.5、Chrome3.0、Safari4之后的版本中進(jìn)行測試。IE8的實現(xiàn)方法與其他瀏覽不同。跨域請求,顧名思義,就是一個站點中的資源去訪問另外一個不同域名站點上的資源。這種情況很常見注意:以下代碼請在Firefox3.5、Chrome3.0、Safari4之后的版本中進(jìn)行測試。IE8的實現(xiàn)方法與其他瀏覽不同??缬蛘埱?,顧名思義,就是一個站點中的資源去訪問另外一個不同域
2、名站點上的資源。這種情況很常見,比如說通過style標(biāo)簽加載外部樣式表文件、通過img標(biāo)簽加載外部圖片、通過script標(biāo)簽加載外部腳本文件、通過Webfont加載字體文件等等。默認(rèn)情況下,腳本訪問文檔屬性等數(shù)據(jù)采用的是同源策略(Sameoriginpolicy)。那么,什么是同源策略呢?如果兩個頁面的協(xié)議、域名和端口是完全相同的,那么它們就是同源的。同源策略是為了防止從一個地址加載的文檔或腳本訪問或者設(shè)置從另外一個地址加載的文檔的屬性。如果兩個頁面的主域名相同,則還可以通過設(shè)置document.do
3、main屬性將它們認(rèn)為是同源的。隨著Web2.0和SNS的興起,Web應(yīng)用對跨域訪問的需求也越來越多,但是,在腳本中進(jìn)行跨域請求是受安全性限制的,Web開發(fā)人員迫切需要提供一種更安全、方便的跨域請求方式來融合(Mashup)自己的Web應(yīng)用。這樣做的一個好處就是可以將請求分?jǐn)偟讲煌姆?wù)器,減輕單個服務(wù)器壓力以提高響應(yīng)速度;另外一個好處是可以將不同的業(yè)務(wù)邏輯分布到不同的服務(wù)器上以降低負(fù)載。值得慶幸的是,跨域請求的標(biāo)準(zhǔn)已經(jīng)出臺,主流瀏覽器也已經(jīng)實現(xiàn)了這一標(biāo)準(zhǔn)。W3C工作組中的WebApplication
4、sWorkingGroup(Web應(yīng)用工作組)發(fā)布了一個Cross-OriginResourceSharing(跨域資源共享,該規(guī)范地址:http://www.w3.org/TR/access-control/和http://dev.w3.org/2006/waf/access-control/)推薦規(guī)范來解決跨域請求的問題。該規(guī)范提供了一種更安全的跨域數(shù)據(jù)交換方法。具體規(guī)范的介紹可以訪問上面提供的網(wǎng)站地址。值得注意的是:該規(guī)范只能應(yīng)用在類似XMLHttprequest這樣的API容器內(nèi)。IE8、Fi
5、refox3.5及其以后的版本、Chrome瀏覽器、Safari4等已經(jīng)實現(xiàn)了Cross-OriginResourceSharing規(guī)范,已經(jīng)可以進(jìn)行跨域請求了。Cross-OriginResourceSharing的工作方式是通過添加HTTP頭的方法來判斷哪些資源允許Web瀏覽器訪問該域名下的信息。然而,對于那些HTTP請求導(dǎo)致用戶數(shù)據(jù)產(chǎn)生副作用的請求方法(特別是對于除了GET、某些MIME類型的POST之外的HTTP方法),該規(guī)范要求瀏覽器對請求進(jìn)行“預(yù)先驗”,通過發(fā)送HTTP的OPTIONS請求
6、頭詢問服務(wù)器有哪些支持的方法,在征得服務(wù)器的同意后,再使用實際的HTTP請求方法發(fā)送實際的請求。服務(wù)器也可以通知客戶端是否需要將驗證信息(如Cookie和HTTPAuthentication數(shù)據(jù))隨同請求一起發(fā)送。下面我們就采用實際的例子說明Cross-OriginResourceSharing是如何工作的。1,簡單請求什么樣的請求算是簡單請求呢?簡單請求必須滿足下面2點:a,只使用GET、POST進(jìn)行的請求,這里的POST只包括發(fā)送給服務(wù)器的數(shù)據(jù)類型(Content-Type)必須是applicat
7、ion/x-www-form-urlencoded、multipart/form-data或者text/plain中一個。b,HTTP請求沒有設(shè)置自定義的請求頭,如我們常用的X-JSON。先使用下面的代碼進(jìn)行測試:?8、g/1999/xhtml">?
??孟憲會之AJAX跨域請求測試??????