【问题标题】:Does Express disable CORS by default?Express 默认会禁用 CORS 吗?
【发布时间】:2018-06-13 02:56:22
【问题描述】:

我被要求确保我设置的新快速服务器强制执行跨域资源共享 (CORS),除非请求来自特定 URL。

我在这里找到了官方的express CORS中间件:https://github.com/expressjs/cors

如果我想为所有请求启用 CORS,那么我只需要添加 app.use(cors())

如果我只想允许指定的 url,那么我可以这样传递它们:

var corsOptions = {
  origin: 'http://example.com',
  optionsSuccessStatus: 200 
}

app.use(cors(corsOptions))

正确吗?

如果我想阻止所有来源/URLS 访问我服务器上的资源怎么办?

这只是 Express 的默认行为吗?

如果我跳过了上面的所有代码,那么我的服务器将受到保护,不受所有请求的影响?

如果我没有使用 CORS 中间件启用 CORS,我如何使用 postman 测试服务器请求?

谢谢!

【问题讨论】:

    标签: node.js http express server cors


    【解决方案1】:

    如果您不启用 CORS 中间件,您的服务器响应将不包含 CORS 标头,并且浏览器将回退到标准 same-origin policy(即只有相同协议、域和端口上的脚本可以访问它)。

    请注意,这些都不是在服务器端强制执行的 - CORS 只是向浏览器提供信息以允许它做出决定,并且没有什么可以阻止浏览器实现简单地忽略 CORS 标头或同源策略.例如,像 Postman 这样的 HTTP 客户端通常会完全忽略 CORS,因为它与它们无关。

    【讨论】:

      【解决方案2】:

      CORS 仅在浏览器中发挥作用,仅当来自不同域的网页尝试访问您的资源时。您可以手动检查 ctx 中的原始标头(不使用任何预构建的中间件)

       const origin = ctx.get('origin');
       //check if you want to allow this origin
       //if you want to allow it,
       ctx.set('Access-Control-Allow-Origin', origin);
       //else do not set the header or set it something else
       ctx.set('Access-Control-Allow-Origin', 'blahblah.com');
      

      浏览器会先向服务器发送OPTIONS请求,看它是否允许当前的来源,如果不允许,浏览器就不会继续发出原来的请求。如果您查看https://github.com/expressjs/cors 的源代码,大致就是它的作用。

      如果您不将这些标头作为响应,浏览器将回退到同源策略。

      【讨论】:

        猜你喜欢
        • 2016-06-19
        • 2017-02-14
        • 2021-02-09
        • 1970-01-01
        • 2012-07-28
        • 1970-01-01
        • 2013-10-22
        • 1970-01-01
        • 2019-02-20
        相关资源
        最近更新 更多