跟大家在介紹 Socket.io 的時候,意外發現居然Socket.io 可以執行跨網域的存取,為什麼?這個時候問題就已經埋下,挖掘之後發現!居然是平凡無奇的XMLHttpRequest,還有針對IE做的奇怪處理,到底是怎麼辦到的? 分析 W3C 提案 Cross-Origin Resource Sharing (CORS),這份文件裡面提到,可以透過文件Header 設定可存取網域限制,以及存取方法、時間等,限制的部份有幾個: 必須為http, https 傳送資料方式為GET, POST 資料格式為application/xml 透過剛才的 CORS ,發展出更高層級XMLHttpRequest,W3C裡面也有實現方式 XMLHttpRequest Level 2 草案,裡面的這一段介紹: The XMLHttpRequest Level 2 specification enhances the XMLHttpRequest object with new features, such as cross-origin requests, progress events, and the handling of byte streams for both sending and receiving. XMLHttpRequest Level 2,可以支援cross-domain 請求,這個部份符合我們的需求。與CORS結合之後,似乎就可以ajax 跨網域存取,感覺不賴。 IE呢? IE8以上有類似XMLHttpRequest Level 2的物件,稱為 XDomainRequest ,在 XDomainRequest - Restrictions, Limitations and Workarounds 這篇文章裡面仔細描述如何搭配CORS原則完成跨網域的實做。
熱血,是一輩子的事! Answer is there, dig it.