在实际请求

时间:2017-07-15 10:37:35

标签: node.js api http express http-headers

我正在开发node.js和mongoDB中的后端。后端基于API调用。我注意到有一件事总是每当我调用PATCH API和DELETE API时,我看到OPTIONS API在PATCH,DELETE调用之前调用了相同的url。我不明白为什么会这样吗?我还不知道这些方法的技术术语,所以我无法找到谷歌的原因,我注意到GET API的调用有时也会发生同样的情况。

我不知道,但他们与中间件代码有任何关系,允许我在下面写的API访问,

app.use(function (req, res, next) {
  // Allow access request from any computers
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  res.header('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE,PATCH');
  res.header('Access-Control-Allow-Credentials', true);
  if ('OPTIONS' == req.method) {
    res.sendStatus(200);
  } else {
    next();
  }
});

1 个答案:

答案 0 :(得分:0)

发送HTTP-OPTIONS请求的需求由浏览器定义。 如果您的客户端和服务器的主机和端口都相等,则不需要发送此类请求。

<强>示例:

  • 127.0.0.1:2000和127.0.0.1:3000 - 将发送选项
  • 127.0.0.1:3000和127.0.0.1:3000 - 选项不会发送
  • 127.0.0.2:3000和127.0.0.1:3000 - 将发送选项

基本上,客户端询问服务器,如果他没问题。只有在发出正常请求之后才会发送。

客户端只发送HTTP-Headers,因此这种请求方法比通常的HTTP方法(包括请求体)快得多。

更多信息 - HTTP OPTIONS

<强>更新
您正在使用的中间件允许其他客户端向您的API发出请求。如果您尝试删除它 - 客户端将在OPTIONS调用上收到错误,并且下一个请求将不会被执行。只需检查它的外观。它被称为CORS error