2012-02-03 38 views
1

我試圖找到最方便,高效(即可伸縮)的方式在Javascript中進行跨域請求,該方法允許使用完整的HTTP動詞(GET,POST,PUT ,DELETE)在我的請求。我們的問題是我們有一個輕量級的體系結構,允許數據存儲和API分佈在多個小型服務器上,並提供一個或兩個服務器提供主要用純Javascript編寫的Web服務。製作RESTful請求使用Javascript中的跨域

我希望能夠使用Javascript以最少的醜陋黑客/解決方案使用API​​,我已經使用JSONP,服務器端代理(不確定是否可伸縮?)和iframe代理,但這些都需要由API託管的特殊功能將這些請求轉換爲正常的調用。有沒有辦法讓我得到這個功能而不煩人的工作,還是我堅持一個?

(我也看了postMessage的,但它仍然沒有完全支持,並提供不能夠指定HTTP動詞的同樣的問題。)

+0

對於可與大多數瀏覽器互操作的跨域請求,您將需要使用JSONP,這聽起來像您已經熟悉。你問是否還有其他魔法彈? – jfriend00 2012-02-04 00:07:42

回答

2

你想要的是CORS但瀏覽器的支持仍然非常有限。 MDC擁有最好的documentation,涵蓋Access-Control-Allow-Origin標題。

基本的流程是瀏覽器做一個OPTIONS前請求,服務器響應頭允許訪問,並且瀏覽器發出完整的請求。

+1

「相當有限的支持」[是](http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing#Browser_support)IE8,FF3.5,Chrome 3,Safari 4,Opera 12或[> 90%以上瀏覽器](http://gs.statcounter.com/#browser_version-ww-monthly-201201-201202-bar) - 換句話說,根本不受限制。 – josh3736 2012-02-04 02:19:39

+1

支持:56.29%部分支持:29.52%。如果你不想被限制爲GET和POST,那麼你就會陷入56% - http://caniuse.com/cors – abraham 2012-02-04 04:26:24

+1

29%是IE 8&9,你必須使用'XDomainRequest'而不是像所有其他瀏覽器一樣定期使用XHR。你是對的,它的功能[限制子集](http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx)的功能,但總比沒有好。 (另一個IE是IE的情況。) – josh3736 2012-02-04 05:31:12