【问题标题】:CORS fetch for different portsCORS 获取不同端口
【发布时间】:2017-12-27 17:11:16
【问题描述】:

我需要发送 fetch 请求(使用 java 脚本),当我从 localhost:8080 发送它时很好,但是当我将 localhost 更改为其他时 - 有 303 响应或根本没有响应。

当我从 8080 发送它时,它也包括 cookie,而不是从其他主机发送。

哪里有问题?我完全迷路了。

【问题讨论】:

  • 不看你的代码我们怎么知道问题出在哪里?

标签: javascript cookies cors fetch


【解决方案1】:

MDN 有一些关于 CORS 和 fetch 的非常好的文档。

当您使用 CORS 标志在不同的来源上调用 fetch 时:

fetch(url, {method: 'GET', mode: 'cors'}) 

如果 url 来自不同的来源,fetch 将首先发出带有标头的OPTION 请求:

Origin: http://foo.example
Access-Control-Request-Method: GET

服务器必须确认允许此类请求的来源,并发送响应:

Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Methods: GET

您的服务器很可能没有启用 CORS。这可以通过浏览器控制台网络请求轻松检查。检查OPTIONS 是否已由服务器发送和回复,并且您的站点是否存在于返回的Access-Control-Allow-Origin: 标头中。

请注意,如果您的服务器需要授权,您应该调用fetch{credentials: 'include'}

fetch(url, {method: 'GET', mode: 'cors', credentials: 'include'})

【讨论】:

  • “很可能服务器端没有启用 CORS”——这无法解释 OP 描述的结果。
  • 为什么不呢,这取决于服务器的实现。 “未启用 CORS”表示未为他发送的来源启用 CORS。
  • 如果没有设置 CORS,我会期望“方法不允许”或正常响应(JS 无法访问)。我不希望任何响应或 303 重定向。
  • 标准允许在 CORS 预检上重定向,但大多数浏览器不支持:github.com/whatwg/fetch/commit/…
  • 无论如何,问题出在服务器端。
猜你喜欢
  • 2017-07-18
  • 2019-06-29
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 2021-04-22
  • 1970-01-01
  • 2021-11-30
  • 2020-06-24
相关资源
最近更新 更多