向本地nodeJS服务器发出发布请求时出现AngularJS CORS错误
Posted
技术标签:
【中文标题】向本地nodeJS服务器发出发布请求时出现AngularJS CORS错误【英文标题】:AngularJS CORS error while making post request to the local nodeJS server 【发布时间】:2017-08-15 06:50:59 【问题描述】:我正在尝试通过 post 请求发送 json 数据但收到错误,我尝试了许多 *** 的答案但没有得到答案我也尝试了 jsonp
方法但没有得到任何东西。
XMLHttpRequest 无法加载 http://localhost:3000/lvl/2/data。回复 预检请求未通过访问控制检查: 否 'Access-Control-Allow-Origin' 标头出现在请求的 资源。因此不允许访问 Origin 'null'。
angular.js:14516 可能未处理的拒绝: "data":null,"status":-1,"config":"method":"POST","transformRequest":[null],"transformResponse":[null],"jsonpCallbackParam":"callback" ,"url":"http://localhost:3000/lvl/2/data","headers":"授权":"基本 dGVzdDp0ZXN0","Content-Type":"application/x-www-form-urlencoded","Accept":"application/json, text/plain, /","data": "代码":"测试数据","statusText":""
http 发布请求:
$http(
url:'http://localhost:3000/lvl/2/data',
method:"POST",
headers:
'Authorization': 'Basic dGVzdDp0ZXN0',
'Content-Type': 'application/x-www-form-urlencoded'
,
data:
'Code': 'test data'
).then(function()
console.log('submitted')
);
NodeJs 发布请求:
router.post('/lvl/2/data', function (req, res)
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");
res.header("Access-Control-Max-Age", "3600");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
console.log(req.body);
res.send('submitted');
);
【问题讨论】:
您的 nodejs 是否正确处理OPTIONS
预检请求?
虽然Origin 'null'
建议使用file://
协议加载发出请求的页面
你的服务器不像你那样工作
是页面是使用 file:// 协议加载的
看到这个Response to preflight request doesn't pass access control check
- 那是失败的 OPTIONS 预检 - 阅读 CORS 预检以了解 - 如果你在服务器上使用 express,你会使用 express-cors - npmjs.com/package/express-cors
【参考方案1】:
您可以暂时禁用使用浏览器扩展检查 CORS:
铬:
Allow-Control-Allow-Origin: *
对于 Opera,您应该安装:
1)Extension allows you to install extensions from Chrome Web Store
2)Allow-Control-Allow-Origin: *
【讨论】:
以上是关于向本地nodeJS服务器发出发布请求时出现AngularJS CORS错误的主要内容,如果未能解决你的问题,请参考以下文章
从 ExtJS 向 node.js 请求时出现 CORS 问题。请求或响应标头不正确?
Flutter Web,向具有自签名证书的服务器发出请求时出现问题