我在{7}上运行的Windows 7上有一个Apache 2.2.21实例,它使用mod_rewrite将以http://localhost
开头的请求重定向到/backend
。 http://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]
答案 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"},
...
});