【问题标题】:Getting 403 error and "n.ajaxTransport.k.cors.a.crossDomain.send" when sending a post request using Node.js使用 Node.js 发送发布请求时出现 403 错误和“n.ajaxTransport.k.cors.a.crossDomain.send”
【发布时间】:2015-04-23 07:25:46
【问题描述】:

我正在尝试在使用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 中。 输入(类型='隐藏',名称='_csrf',值=_csrf)

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

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

【问题讨论】:

  • 这似乎是一个跨域问题
  • 我不确定这是否是一个跨源问题,因为请求是从localhost:3000/发送到localhost:3000/
  • 检查你的控制台,看看请求是什么样的
  • 显示错误:CSRF token mismatch...at csrf lusca/lib/csrf

标签: javascript ajax node.js


【解决方案1】:

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

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
}));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    相关资源
    最近更新 更多