2012-04-23 49 views
0

我正在嘗試將JQuery $.post添加到Java Servlet中。我將Tomcat服務器集成到 Apache中,並且Tomcat服務器與Apache的$.post連接在同一臺機器上。 (Java Servlet接收它)。JQuery發佈到Tomcat Servlet

如果Tomcat servlet位於遠程計算機上,並且如果我輸入$.post(http://ip:8080/App/MyServlet,...),則該servlet不會收到任何內容。

如果我在我的機器上製作JQuery $.post我有這樣的$.post(Myservlet,.....)。 如果我嘗試這樣:$.post(http://localhost:8080/App/MyServlet,...)它不起作用。

我應該如何使JQuery $.post遠程uri?

Tomcat Servlet的遠程URI應該如何顯示?

感謝,

+1

有跨域限制: http://stackoverflow.com/questions/298745/how-do-i-send-a-cross-domain-post-request-via-javascript – binarious 2012-04-23 11:05:30

回答

2

jQuery的運行在瀏覽器(客戶端),這意味着它受到瀏覽器的同源策略,這是一件好事。

這意味着只有在發出ajax請求的頁面域中才能發出GET或POST請求。

有兩種方法可以繞過該政策。第一個是讓遠程服務器爲請求提供擔保,第二個是隱藏瀏覽器的同源策略。

所以,如果你能控制的遠程服務器上,或者,如果誰做管理員需要請求打開服務器/域foriegn Ajax請求,則服務器只需要發送下面的頭:

Access-Control-Allow-Origin: your-local-domain.org 

瀏覽器取回響應標題,看到請求頁面在上面的列表中,並允許響應通過。

如果在遠程服務器上無法控制,這裏有sneakier辦法繞過同源策略:

  1. ,從AJAX請求到本地URL與參數,並將其傳遞它跟着servlet,並且讓那個代理腳本返回servlet響應的任何東西。

  2. JSONP(這我還是模糊的,誠實的,但jQuery的AJAX文檔進入它)

  3. 腳本注入,在這裏您可以利用一個事實,即腳本元素的src不受各項─限制起源政策。

的3,我認爲首先是最安全的,最hackish的,最誠實的(這麼說),但JSONP已經成爲拉動jQuery的跨域請求的簡單和容易的方法。

+2

你忘了說'訪問控制 - 允許來源' – binarious 2012-04-23 11:11:20

+1

哦,該死!那些最不起眼,最有意爲之的人!加上尷尬。 – Anthony 2012-04-23 11:16:06

+0

補充說,謝謝你的擡頭。如果您認爲我對標題的解釋不夠深入,請隨時發表評論。 – Anthony 2012-04-23 11:25:33