当使用AJAX和mod_rewrite时,报头和POST数据消失

Headers and POST data disappear when using AJAX and mod_rewrite

本文关键字:报头 POST 消失 数据 AJAX mod rewrite      更新时间:2023-09-26

我有一个Apache 2.2.21在Windows 7运行在http://localhost,使用mod_rewrite重定向请求从/backend开始到http://localhost:8080的实例。http://localhost:8080的服务器反过来是一个CherryPy 3.2.0服务器,它被设计为接受post JSON消息并响应JSON消息。

我的问题是,当我尝试POST到http://localhost/backend使用AJAX的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的JavaScript示例如下:

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

Apache配置文件的相关部分是

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

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

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

您考虑过使用mod_proxy和ProxyPass吗?它看起来更适合你想要做的事情。你只需要这样一个指令:

ProxyPass /backend http://localhost:8080/

您可以添加连接超时,重试尝试,重写cookie域,甚至重写响应头主机名与ProxyPassReverse

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

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