通过 node.js 的 ajax 跨域发布
Posted
技术标签:
【中文标题】通过 node.js 的 ajax 跨域发布【英文标题】:ajax crossdomain post via node.js 【发布时间】:2013-11-06 12:04:03 【问题描述】:我在 php 文件中设置了一个 ajax 帖子,该文件使用 htaccess CORS 来回答一个简单的 html 字符串。扭曲的是,当我使用 xmapp 服务器而不是我的 node.js 服务器时,ajax 帖子将起作用。我还用 2 个不同的目标域对其进行了测试,它们都具有相同的 htaccess 和相同的 php 文件。从 xampp 发送都可以,从 node.js 发送只有一个。
错误: XMLHttpRequest:仅支持 GET 方法
javascript 在 node.js 中运行:
$.ajax(
type: 'POST',
url: Customer[i]['phplink'],
crossDomain: true,
async: true,
data:
status: 'hello',
cachingtrap: (Math.random())
,
timeout: 4000,
dataType : 'html',
success: function(responseData, textStatus, jqXHR)
console.log('online:'+Customer[i]['name']);
,
error: function (responseData, textStatus, errorThrown)
console.log(errorThrown+ +textStatus+" "+responseData);
);
htaccess:
# with AJAX withCredentials=false (cookies NOT sent)
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, PATCH, DELETE"
Header always set Access-Control-Allow-Headers "X-Accept-Charset,X-Accept,Content-Type"
RewriteEngine On
RewriteCond %REQUEST_METHOD OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L,E=HTTP_ORIGIN:%HTTP:ORIGIN]]
# with AJAX withCredentials=true (cookies sent, SSL allowed...)
SetEnvIfNoCase ORIGIN (.*) ORIGIN=$1
Header always set Access-Control-Allow-Methods "POST, GET, PUT, OPTIONS, PATCH, DELETE"
Header always set Access-Control-Allow-Origin "%ORIGINe"
Header always set Access-Control-Allow-Credentials "true"
Header always set Access-Control-Allow-Headers "X-Accept-Charset,X-Accept,Content-Type"
RewriteEngine On
RewriteCond %REQUEST_METHOD OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L,E=HTTP_ORIGIN:%HTTP:ORIGIN]
目标php文件:
<?php
header("Access-Control-Allow-Origin: *");
if (isset($_POST['status']))
echo round(microtime(true) * 1000);
else
echo "Hello World";
?>
【问题讨论】:
NodeJS 与这个问题有什么关系? 我从 node.js 服务器发送这个 ajax,当我从 apache 服务器发送它时,它可以工作 这不是 Node 的“跨域”。我也不确定你为什么要使用 jQuery ... 这是跨域的。 Customer[i]['phplink'] 是指向一个完全不同的域的链接。我在错误报告中说得更清楚了 跨域是浏览器问题,不是服务器问题。 Node.JS 在“跨域”流量方面应该没有任何问题。 【参考方案1】:您可以为 nodejs express (more example click here) 使用给定的代码:
var allowCrossDomain = function(req, res, next)
res.header('Access-Control-Allow-Origin', 'example.com');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type');
next();
【讨论】:
以上是关于通过 node.js 的 ajax 跨域发布的主要内容,如果未能解决你的问题,请参考以下文章
NodeJ node.js Jquery Ajax 跨域请求