2011-12-05 62 views
0

我有一個運行在http://localhost的Windows 7上的Apache 2.2.21實例,它使用mod_rewrite將請求從/backend開始重定向到http://localhost:8080http://localhost:8080服務器又是一個CherryPy 3.2.0服務器,用於接受POST JSON消息並用JSON消息響應。使用AJAX和mod_rewrite時,標題和POST數據消失

我的問題是,當我嘗試使用AJAX POST到http://localhost/backend時,CherryPy服務器最終看到一條沒有請求頭並且沒有附加JSON數據的消息。它因此返回一個400 BAD REQUEST錯誤。但我也有以Excel和.NET構建的應用程序,它們發送類似的消息給http://localhost/backend,沒有任何問題。另外,我試過在http://localhost/route(使用Django)上設置了一個頁面,它將AJAX POST傳遞給http://localhost:8080;這工作完美。

我的問題是爲什麼AJAX POST到`http:// localhost/backend'不起作用。也許這與AJAX安全有關?使用jQuery會像

$.post(
    "/backend", 
    JSON.stringify({"type": "getdata", "id": "1"}), 
    function(data) { 
     alert("Done"); 
    } 
); 

和Apache的配置文件中的相關章節

實例JavaScript是

RewriteEngine on 
RewriteRule ^/backend http://localhost:8080 [proxy] 

CherryPy的是,沒有特殊的啓動選項運行:

cherrypy.config.update({'server.socket_port': 8080}) 
cherrypy.quickstart(MyServer()) 
+0

不應該'[代理]'是'[P]'? –

+0

我相信[proxy]和[P]是一回事。 – Abiel

回答

0

您是否考慮過使用mod_proxy and ProxyPass?它更適合你看起來像你試圖做的事情。你只需要像這樣的指令:

ProxyPass /backend http://localhost:8080/ 

您可以添加連接超時,重試次數,改寫cookie的域,甚至重寫響應頭的主機名與ProxyPassReverse

+0

我試過mod_proxy並獲得與mod_rewrite相同的結果。我在Excel和.NET中構建的客戶端應用程序工作正常,但對於AJAX請求,CherryPy在請求中沒有看到任何標題,也沒有看到任何主體數據(JSON有效內容)。 – Abiel

0

事實上,這只是一個未能在指定Content-Type爲application/json的AJAX請求中手動包含頭部的情況。例如,

$.ajax({ 
..., 
headers: {"Content-Type": "applicaton/json"}, 
... 
});