ASP.NET Web API CORS預覽功能完整剖析

Cross-origin resource sharing(CORS)

Cross-origin resource sharing (跨來源資源分享,以下稱CORS)是W3C 提案的技術標準,定義伺服器與用瀏覽器在跨來源(即cross domain,跨網域)呼叫時的互動方式。CORS標準允許網頁發出跨網域的AJAX請求,讓實作了同源策略(same-origin)的瀏覽器在安全條件下去呼叫進行有限制的跨網域AJAX請求。

CORS透過設定HTTP Header(標頭)設置那些網域的網站可以跨網域存取,目前W3C定義九個Response Header(回應標頭)可以設置:

Response Header說明
Access-Control-Allow-Origin 指示是否基於共享資源透過回傳來源請求標頭、“*”或“null”在回應裡。
Access-Control-Allow-Credentials 指示當省略憑證標誌(Credentials flag)未設置時,是否公開請求的回應。當檢查請求(preflight request)的回應一部分,它表明實際的請求可以包含用戶端憑證。
Access-Control-Expose-Headers 指示那些標頭是安全公開在CORS API規範的API。
Access-Control-Max-Age 指示檢查請求可以快取多久時間在快取結果裡。
Access-Control-Allow-Methods 指示實際請求期間,可以使用那些方法做為請求回應的一部分。
Access-Control-Allow-Headers 指示實際請求期間,可以使用那些標頭名稱做為請求回應的一部分。
Origin 指示跨來源請求或檢查請求來自於。
Access-Control-Request-Method 指示那種方法在實際請求中做為檢查請求的一部分。
Access-Control-Request-Headers 指示那種標頭在實際請求中做為檢查請求的一部分。

例如,我們可以設置以下CORS標頭:

 Access-Control-Allow-Origin: http://kkbruce.net
 Access-Control-Allow-Methods: PUT, DELETE
 

這表示,除了網站本身以外,還允許kkbruce.net網域進行跨網域的AJAX請求且只允許PUT和DELETE方法的請求。允許的網域可以設定多組,也能設定為“*”代表不設限。

ASP.NET MVC裡Model使用ADO.NET來開發

MVC Model只能使用Entity Framework?

關於MVC裡的Model是否只能使用Entity Framework,答案是否定的。會這樣自問自答是因為有讀者問說,怎麼所有寫ASP.NET MVC的書都是用Entity Framework。MVC裡的Model根本不關心你用什麼技術,例如我們在書裡2.2節就例了一大堆的Model可用技術。在早期ASP.NET MVC 2的書,Model大概都是用LINQ to SQL,那個時候的讀者應該也是會問一樣的問題吧。時代會進步,技術也沒有停過,會選擇Entity Framework我是很單純,我是學習與推廣微軟技術的人,ORM技術對於範例程式碼有較好的可讀性,撰寫與偵錯速度也快,在非特別環境(或特別限制)下,就我而言,我是個懶人,我會選擇讓我可以最懶的技術。

建立組織與Windows Azure Virtual Network之間VPN連線

Windows Azure for Virtual Network

Windows Azure Virtual Network Dashboard - Connection

Virtual Network是Windows Azure的IaaS(基礎架構即服務)部分,為何會介紹這個呢?這是因為小朱前輩剛好在試這一段內容,但苦於沒有設備,剛好我們家就是Router製造商,一時心癢,就把Create a Virtual Network for Cross-Premises Connectivity的內容給做幾次,順便做個筆記,結論是:不用Cisco、Juniper這些高貴的設備,我們家的Router也可以和Windows Azure建VPN連線。

建立虛擬網路(Virtual Network)

這裡的目標是在Windows Azure與公司網路透過VPN建立連線。另外在撰寫這篇文章時,Windows Azure的VPN設置與流程已經與教學文章不同(其實也只是昨天睡前和今早起床…),由此可知,未來流程或設置如有與本文不同,不是我教錯,請以官方為主。@_@

即時監控、自動調整與擴充Windows Azure資源的好工具 - AzureWatch

雲端上的Scale-out與Scale-in

Scale-out與Scale-in中文不好翻譯,大意就即自動化擴充資源與降低資源。這是我自己在使用雲端或在雲端的研討會常聽到的問題。「自動化」是指不必人為操作,如果還要進管理介面(像HiCloud)去進行資源的分配,那就不是自動化。「使用雲端」是指有在使用雲端服務的人(或公司),使用雲端技術其中一個重要目標就是想要能動態調整資源,以網站而言,平常低流量時,使用最少資源即可,當有行銷活動或某個話題吸引大量流量進入時,希望服務器能自動提高使用資源。

自動化資源調配在雲端上是非常重要的,不可能說等伺服器爆了在來調整,那種雲就不合適拿來應付可能有突發狀況的服務。

AzureWatch服務簡介

針對Windwos Azure的自動化資源調配,國外有一些廠商推出不錯的產品,有的要安裝代理程式,有的不需要,今天要介紹的AzureWatch是不需要安裝代理程式的。

AzureWatch服務截圖

AzureWatch(14天免費試用):https://www.paraleap.com/

上圖是AzureWatch網站首頁上一小個截圖,不過用來說明這個服務已經非常夠了。AzureWatch主要進行三件事:

  • Azure Monitoring - 雲端服務即時監控
  • Auto-Scaling - 自動資源調整
  • Real-time customizable alerts - 即時且客製化的通知

也就是圖片上半部,圖片下半部是細項,常用的Web Role / Worker Role、Websites、Storage…都支援。註冊送14天免費試用,GWAB活動有送一組Promo Code,可延長至30天。

Global Windows Azure BootCamp 2013課後實作心得

GWAB 2013 - 台灣台北場

很高興有機會參與到2013年台灣GWAB(Global Windows Azure BootCamp)這一個全球性活動,當天全球有91處同時進行(不計時差)這個GWAB,台灣由朱明中、Sky、董大偉三位Windows Auzre方面資深MVP帶領學員說明Windows Azure與實作。課中收獲許多,真是上一天課,比K一個月的書還有效。

GWAB投影片、教材與影片

第一堂是由小朱前輩進行Windows Azure Cloud Service的說明與實作,相關資料都可以到「[Windows Azure] Global Windows Azure Bootcamp取得。

第二堂是由Sky前輩進行Windows Azure WebStei Service說明與實作。

第三堂是由董大偉前輩進行Widnows Azure Mobile Service的說明與實作,相關資料與影片可以到「[研討會] GAWB 2013 Hands on lab slides and video取得。