使用AJAX和mod_rewrite时,标题和POST数据消失

时间:2011-12-05 15:59:56

标签: javascript ajax apache mod-rewrite

我在{7}上运行的Windows 7上有一个Apache 2.2.21实例,它使用mod_rewrite将以http://localhost开头的请求重定向到/backendhttp://localhost:8080上的服务器又是一个CherryPy 3.2.0服务器,用于接受POSTed JSON消息并使用JSON消息进行响应。

我的问题是,当我尝试使用AJAX POST http://localhost:8080时,CherryPy服务器最终会看到一条没有请求标头且没有附加JSON数据的消息。因此它返回400 BAD REQUEST错误。但我也有使用Excel和.NET构建的应用程序向http://localhost/backend发送类似的消息,没有任何问题。另外,我尝试在http://localhost/backend(使用Django)设置一个页面,该页面将AJAX POST传递给http://localhost/route;这很有效。

我的问题是为什么AJAX POST到`http:// localhost / backend'不起作用。也许这与AJAX安全有关?

使用jQuery的示例JavaScript类似于

http://localhost:8080

Apache配置文件的相关部分是

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

CherryPy正在运行,没有特殊的启动选项:

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

2 个答案:

答案 0 :(得分:0)

您是否考虑过使用mod_proxy and ProxyPass?它更适合你想要做的事情。你只需要这样的指令:

ProxyPass /backend http://localhost:8080/

您可以添加连接超时,重试尝试,重写Cookie域,甚至可以使用ProxyPassReverse重写响应标头主机名。

答案 1 :(得分:0)

实际上这只是一个未能在AJAX请求中手动包含标题的情况,该标题将Content-Type指定为application / json。例如,

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