閱讀851 返回首頁    go 技術社區[雲棲]


JavaScript跨域調用、JSONP、CORS與ASP.NET Web API[共8篇]

[第1篇] 同源策略與JSONP

瀏覽器是訪問Internet的工具,也是客戶端應用的宿主,它為客戶端應用提供一個寄宿和運行的環境。而這裏所說的應用,基本是指在瀏覽器中執行的客戶端JavaScript程序。雖然是一種解釋性的腳本語言,JavaScript其實是無比強大的,原則上來講它可以做任何事。但是在能夠在JavaScript腳本並不都是值得信賴的,所以瀏覽器必須對JavaScript的執行作相應的限製,這就是“同源策略(Same Origin Policy)”。JavaScript腳本的源決定於其被加載的頁麵,而不是其存儲的地址。對於一段通過<script>標簽的src屬性加載的JavaScript腳本,它與當前頁麵同源。如果Ajax請求返回的不是以JSON表示的數據,而是針對該數據的方法調用,毫無疑問聯係人列表能夠順利呈現在頁麵上。這種將JSON對象填充(Padding)到某個JavaScript回調方法將數據轉換成針對數據的操作語句的形式就是JSONP(JSON Padding)。(閱讀更多…

[第2篇] 通過擴展讓ASP.NET Web API支持JSONP

同源策略(Same Origin Policy)的存在導致了“源”自A的腳本隻能操作“同源”頁麵的DOM,“跨源”操作來源於B的頁麵將會被拒絕。同源策略以及跨域資源共享在大部分情況下針對的是Ajax請求。同源策略主要限製了通過XMLHttpRequest實現的Ajax請求,如果請求的是一個“異源”地址,瀏覽器將不允許讀取返回的內容。JSONP是一種常用的解決跨域資源共享的解決方案,本文通過自定義JsonMediaTypeFormatter的方式為ASP.NET Web API提供一種“通用”的JSONP實現方案。(閱讀更多…

[第3篇] W3C的CORS 規範

隨著Web開放的程度越來越高,通過瀏覽器跨域獲取資源的需求已經變得非常普遍。在我看來,如果Web API不能針對瀏覽器提供跨域資源共享的能力,它甚至就不應該被稱為Web API。從另一方麵來看,瀏覽器作為進入Internet最大的入口,是各大IT公司的必爭之地,所以瀏覽器市場出現了種類繁多、魚龍混雜的局麵。針對這兩點,我們迫切需要一種能夠被各個瀏覽器廠商共同遵循的標準來對跨域資源共享作出規範,這就是由W3C指定2的CORS(Cross-Origin Resource Sharing)規範。(閱讀更多…

[第4篇] 通過擴展讓ASP.NET Web API支持W3C的CORS規範

讓ASP.NET Web API支持JSONP和W3C的CORS規範是解決“跨域資源共享”的兩種途徑,在《通過擴展讓ASP.NET Web API支持JSONP》中我們實現了前者,本文通過自定義HttpMessageHandler的方式為ASP.NET Web API提供一種“通用”的CORS實現方案。(閱讀更多…

[第5篇] ASP.NET Web API自身對CORS的支持

在《通過擴展讓ASP.NET Web API支持W3C的CORS規範》中我們通過自定義的HttpMessageHandler為ASP.NET Web API賦予了跨域資源共享的能力,具體來講,這個自定義的CorsMessageHandler的自由主要體現在如下兩個方麵:其一,為簡單跨域請求的響應和繼預檢請求後的真實跨域資源請求的響應添加CORS報頭;其二,對從瀏覽器發送的預檢請求予以響應。實際上ASP.NET Web API本身就提供了針對CORS的支持,就其實現原理來看,與我們的實現沒有本質的區別。(閱讀更多…

[第6篇] EnableCorsAttribute特性背後的故事

從編程的角度來講,ASP.NET Web API針對CORS的實現僅僅涉及到HttpConfiguration的擴展方法EnableCors和EnableCorsAttribute特性。但是整個CORS體係不限於此,在它們背後隱藏著一係列的類型,我們將會利用本章餘下的內容對此作全麵講述,今天我們就來討論一下用於定義CORS授權策略的EnableCorsAttribute特性背後的故事。(閱讀更多…

[第7篇] ASP.NET的CORS引擎

由CorsPolicyProvider提供的CorsPolicy表示目標Action采用的資源授權策略,ASP.NET Web API最終需要利用它對具體的跨域資源請求實施授權檢驗並生成相應的CORS響應報頭,CORS授權檢驗和CORS響應報頭的生成是利用ASP.NET的CORS引擎來完成的。(閱讀更多…

[第8篇] 跨域資源共享(CORS)在ASP.NET Web API中是如何實現的?

在《通過擴展讓ASP.NET Web API支持W3C的CORS規範》中,我們通過自定義的HttpMessageHandler自行為ASP.NET Web API實現了針對CORS的支持,實際上ASP.NET Web API自身也是這麼做的,該自定義HttpMessageHandler就是System.Web.Http.Cors.CorsMessageHandler。(閱讀更多…


作者:蔣金楠
微信公眾賬號:大內老A
微博:www.weibo.com/artech
如果你想及時得到個人撰寫文章以及著作的消息推送,或者想看看個人推薦的技術資料,可以掃描左邊二維碼(或者長按識別二維碼)關注個人公眾號(原來公眾帳號蔣金楠的自媒體將會停用)。
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁麵明顯位置給出原文連接,否則保留追究法律責任的權利。
原文鏈接

最後更新:2017-10-25 15:04:53

  上一篇:go  軟件係統開發主要有哪些步驟?
  下一篇:go  談談基於OAuth 2.0的第三方認證 [上篇]