Express:cors 配置是不是依赖于服务器 TTL?

Posted

技术标签:

【中文标题】Express:cors 配置是不是依赖于服务器 TTL?【英文标题】:Express: does cors configuration depend on server TTL?Express:cors 配置是否依赖于服务器 TTL? 【发布时间】:2020-07-24 00:38:59 【问题描述】:

我已成功将我的 Express API 应用程序部署到 AWS 弹性 beanstalk。我有一个托管在 S3 上的 React 前端。

两者都在同一个域中,前端位于 example.com,API 位于 api.example.com 两者都有证书并受到保护。

const express = require('express');
const cors = require('cors')(
  Origin: 'https://example.com'
);

// followed by required middleware
app.use(cors());

//followed by app constants

app.use((e, req, res, next) => 
  res.header("Access-Control-Allow-Origin", "https://example.com");
  res.header('Access-Control-Allow-Methods', 'DELETE, PUT, GET, POST');
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

  if (e) 
    console.log(e);
    res.status(500).send(e.message);
  
  next();
)

// followed by app routes

当我尝试在我的网站上注册用户时,我收到错误消息:

Access to XMLHttpRequest at 'https://api.example.com/users/signup/' from origin 'https://example.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

这个话题当然已经在 Stack Overflow 上讨论过多次(我今天早上已经通过了多种解决方案),但我的问题与托管 API 的实际服务器有关。

在 api.example.com 的托管区域中,它的 TTL 为 172800(48 小时)。这是否意味着我的更改不会在那个时候反映出来?如果是这样,这是否意味着每次部署代码时都会重置 TTL?

我是一名前端开发人员,从事一个业余项目,所以这真的不是我的专业领域。任何 DevOps 或后端开发人员有什么想法吗?提前致谢!

【问题讨论】:

您查看过注册请求的响应标头吗?响应中是否有 CORS 标头?通常,检查 DevTools 中的标头以了解在解决问题期间要挖掘的位置非常有帮助。 【参考方案1】:

在 api.example.com 的托管区域中,它的 TTL 为 172800(48 小时)。这是否意味着我的更改不会在那个时候反映出来?如果是这样,这是否意味着每次部署代码时都会重置 TTL?

没有。

TTL 是预计其他 DNS 服务器缓存 DNS 信息的时间(例如,域名指向哪个服务器)。

与代码部署无关。


您的问题与此无关。我会在服务器端代码中添加一些日志记录,以查看实际命中了哪些路由和中间件,并监控您在浏览器的“网络”选项卡中获得的精确请求和响应。

【讨论】:

感谢您的回复。我会再给我的代码一次,看看我做错了什么。我注意到您对下面关于飞行前的帖子的评论,所以我现在有一个可以查看的方向。【参考方案2】:

浏览器可以针对特定类型的跨域请求发出preflight OPTIONS 请求。如果对该请求的响应不成功或没有 CORS 标头,您也会收到此类错误。 所以我想你应该在你的 Express 应用程序中添加一个路由来处理预检请求并发送回相同的 CORS 标头,或者只使用express-cors-middleware。

【讨论】:

错误提示“在请求的资源上”。如果是预检问题,则错误消息将提及预检。

以上是关于Express:cors 配置是不是依赖于服务器 TTL?的主要内容,如果未能解决你的问题,请参考以下文章

Express 服务器不回复正确的 cors 标头

Express 配置为使用 CORS 不接受 CORS

为啥我在 Express 上设置 CORS 时出现飞行前错误?

Express cors 不允许凭据

Express cors 不允许凭据

nodejs + express:Cors 不是函数