2011-05-24 79 views
3

同源策略阻止我從其他網站(需要許可)獲取我需要的JSON數據。我看到有一個人正在用JsonpRequestBuilder解決這個問題,但我不確定這是否會成爲我的最佳解決方案。我唯一想到的另一個選擇是在我的服務器上有一箇中間servlet。從第三方獲取JSON數據並繞過SOP

這裏我最好的選擇是什麼?我對這兩種方法都有顧慮。使用中間servlet,我擔心會引入延遲。使用JsonpRequestBuilder,看起來我必須爲每個要從其他站點調用的方法創建一個完整的JavascriptObject,儘管我只需從這些方法中抽取一個值即可。

回答

1

查看CORS Specification。我們正在使用它來成功繞過使用我們自己的服務器和GWT的devmode Jetty的SOP。

+1

下面是在App Engine應用程序中啓用CORS的快速教程:http://enable-cors.org/#how-gae - 它是用Python編寫的,但對於Java應該是相同的 – 2011-05-25 22:56:42

2

我不使用Java,但是我通常在需要跨域聊天時使用JSONP,並且我確信有人會創建一個解開它的Java庫。它需要在第三方網站上進行更改,但這是一個非常簡單的更改。

編輯:聽起來好像是圖書館做什麼,對不起......但還是......這是去:)

1

您不必爲「創建一個完整的JavaScriptObject」的方式,JavaScriptObject實際上只是一個平均值從Java世界呼叫爲JavaScript,所以你只需要爲你所需要的價值一口吸氣,它甚至可以返回「嵌套」值:

public native String getFoo() /*-{ 
    return this.nested[0].obj.foo; 
}-*/; 

無論你」將使用JSONP(和JsonpRequestBuilder)或「代理servlet」實際上只取決於您需要調用的「服務」的功能:JSONP是JavaScript而不是JSON,所以服務器必須返回一個「JSONP響應腳本」,否則你將無法使用JsonpRequestBuilder(同樣,如果你不能(安全地)使用CORS或代理servlet,服務器返回一個「JSONP腳本」而不是application/json)。