[第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。(閱讀更多…)
文章列表