繁体   English   中英

使用Node.js发送发布请求时出现403错误和“n.ajaxTransport.k.cors.a.crossDomain.send”

[英]Getting 403 error and “n.ajaxTransport.k.cors.a.crossDomain.send” when sending a post request using Node.js

我在尝试使用node.js时发送一个简单的ajax请求:

$.ajax({
  type: "POST",
  data: { name: "John", location: "Earth" }
})

但是我收到以下错误:

POST http://localhost:3000/ 403 (Forbidden)jquery-2.1.3.min.js:4      
n.ajaxTransport.k.cors.a.crossDomain.sendjquery-2.1.3.min.js:4 
n.extend.ajaxVM475:2 (anonymous function)VM465:777 
InjectedScript._evaluateOnVM465:710 
InjectedScript._evaluateAndWrapVM465:626 InjectedScript.evaluate

我有一个控制器设置来处理其他类型的POST请求,但由于某种原因它不会处理这个。

我想也许它出现了,因为我在控制台中运行代码,但是当我做了以下操作时,我得到了相同的错误消息:

$(document).on('click',function() {
  $.ajax({
    type: "POST",
    data: { name: "John", location: "Earth" }
  })
});

另外,当我使用type:"GET"它没有问题。 我假设它是某种跨站点脚本错误 ,但我不是跨站点脚本? 发送此POST请求需要做什么?

更新,我正在使用hackathon starter套件: https//github.com/sahat/hackathon-starter#why-do-i-get-403-error-forbidden-when-submitting-a-form其中说明如下:

“您需要在表单中添加以下隐藏的输入元素。这已作为CSRF保护的一部分添加到拉取请求#40中.input(type ='hidden',name ='_ csrf',value = _csrf)

注意:现在可以将某些URL列入白名单。 换句话说,您可以指定应绕过CSRF验证检查的路由列表。

注意2:要将动态URL列入白名单,请在CSRF中间件内部使用正则表达式测试,以查看req.originalUrl是否与您所需的模式匹配。“

这个问题有两种解决方案:

1)在app.js内部将行csrf: true更改为csrf: false ,如下所示:

app.use(lusca({
  csrf: false,
  xframe: 'SAMEORIGIN',
  xssProtection: true
}));

2)删除lusca模块并删除app.js对它的所有以下引用:

var lusca = require('lusca');

app.use(lusca({
  csrf: false,
  xframe: 'SAMEORIGIN',
  xssProtection: true
}));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM