【问题标题】:CORS not allowed when Origin includes port number当 Origin 包含端口号时不允许使用 CORS
【发布时间】:2018-04-07 03:58:03
【问题描述】:

我有一个在 Node.js 服务器上运行的应用程序。 CORS 已启用,但我的 POST 请求被拒绝 (400, not allowed)。

当使用 POSTMAN 发送相同的请求时,我只需从 Origin 中删除端口号即可使其工作。但它应该可以正常工作,因为来自请求的端口和源端口都是相同的。

例如这不起作用:

# Request
Request URL: http://the_address:the_port/etc
Request Method: POST

# Headers
Origin: http://the_address:the_port

虽然这工作得很好:

# Headers
Origin: http://the_address

你知道为什么这会破坏吗?即使端口在 Origin 中,CORS 是否不应该允许同源请求,只要它是同一个端口?

PS:我也在使用 webpack 和 React,但我不认为它是相关的(除非我弄错了)。

【问题讨论】:

  • 您不能手动更改浏览器发送的Origin 标头,对吧?浏览器设置它发送的 Origin 标头,它基于它所知道的您发送请求的前端 JavaScript 代码的实际来源。因此,如果您的代码发送请求的 URL 的来源与浏览器发送的 Origin 标头的值不完全相同,则浏览器认为这是一个跨域请求。
  • 将前端 JavaScript 代码的实际来源从 http://the_address:the_port 更改为 http://the_address 的唯一方法是从 http://the_address 实际提供前端 JavaScript 代码,它的端口为 80编号,而不是来自http://the_address:the_port,它的端口号不是端口 80。
  • 向我们展示完整的 CORS 错误。

标签: node.js webpack cors cross-domain port


【解决方案1】:

您无法手动更改浏览器发送的 Origin 标头。浏览器设置它发送的 Origin 标头基于它所知道的您发送请求的前端 JavaScript 代码的实际来源。因此,如果您的代码向其发送请求的 URL 的来源与浏览器发送的 Origin 标头的值不完全相同,则浏览器会认为这是一个跨域请求。

将前端代码的实际来源从http://the_address:the_port 更改为http://the_address 的唯一方法是实际提供来自http://the_address 的代码,它的端口为80,而不是来自http://the_address:the_port,它有端口号不是 80。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    相关资源
    最近更新 更多