当前位置: 首页 > 知识库问答 >
问题:

Axios失败CORS但获取工作正常

隆向晨
2023-03-14

我已经查看了所有关于CORS错误的其他问题,但运气不好。我正在NuxtJS客户端应用程序中发出一个简单的POST请求。如果我使用axios,我会得到CORS错误,但如果我使用fetch,它工作得很好。我想使用axios,但我无法解决这个问题。服务器设置了正确的“Access Control Allow Origin”标头(删除该标头时,以下两个选项都不起作用)。有人知道为什么fetch可以工作,但axios不行吗?

失败

await this.$axios({
      url,
      method: 'POST',
      data
    })

作品

await fetch(url, {
      method: 'POST',
      body: JSON.stringify(data)
    })

错误消息:CORS策略阻止从源http://localhost:3000访问{URL}处的XMLHttpRequest:对预检请求的响应无法通过权限改造检查:请求的资源上不存在“访问控制允许源”标头。

在Chrome的网络选项卡中,请求标头显示如下:

Axios请求标头

获取请求头

共有2个答案

许高峻
2023-03-14
匿名用户

尝试添加< code>withCredentials:

axios({
    method: "POST",
    url: "http://....",
    data: {},
    withCredentials: true
})

刘修能
2023-03-14

当您在HTTP请求的正文中发送数据时,请求的Content-Type标头指定您要发送的数据类型。

由于您要发送 JSON,因此标头应为“内容类型:应用程序/json

由于您将对象传递给axios,因此它将其编码为JSON并自动设置适当的Content-Type标头。

< code>fetch不会自动执行此操作,您必须对数据进行编码并自己设置< code>Content-Type。您只做了其中的第一项,所以< code>fetch默认声明您发送的是纯文本而不是JSON。

您的获取代码出错。

由于历史原因,当您使用可以使用常规 HTML 表单发送的格式 POST 数据时,没有特殊的 CORS 要求。文本/纯文本就是这样一种格式。

由于<code>application/json<code>不是,浏览器使用CORS飞行前请求从服务器请求许可。

服务器未授予该权限。

它需要用如下内容来回应:

HTTP/1.1 204 No Content
Connection: keep-alive
Access-Control-Allow-Origin: https://foo.bar.org
Access-Control-Allow-Methods: POST, OPTIONS
Access-Control-Allow-Headers: Content-Type
Access-Control-Max-Age: 86400

 类似资料:
  • 我试图用Axios向一个需要API密钥作为头的API发出get请求,但我不确定我做错了什么。控制台中有两个错误。1:xhr。js:178个选项https://api.propublica.org/congress/v1403(禁止)。2:加载失败https://api.propublica.org/congress/v1:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“access co

  • 问题内容: 我在主软件包的一个目录下有一些文件: main.go config.go server.go 当我这样做时:“执行构建”程序将完美构建并运行良好。当我这样做时:“ go run main.go”失败了。 输出: 未定义的符号是结构,并且大写,因此应将其导出。 我的Go版本:go1.1.2 linux / amd64 问题答案: 这应该工作 Go run需要一个文件或多个文件,并且它仅合

  • 我将GET请求发送到具有相同标头的相同endpoint,包括承载,但当我从Postman调用时得到200和正确的JSON,当我在我的(Vue)项目中使用Axios发送请求时,我得到302。 运行在localhost:8080(如果有用)上的本地项目的调用如下: 而在《邮递员》中,我所做的就是用相同的url创建一个GET请求,我在标题中添加的只是“承载者…” 我从axios得到的错误是: 响应状态是

  • 我在OSX上使用react-native 0.43.3。我试着在Android上运行应用程序并获取消息 ./gradlew installDebug给了我一些错误,并将其全部修复。最后,构建获得成功,应用程序正在Android设备上运行。 但是命令仍然不起作用。只有命令起作用。 使用命令时有什么可以检查的吗? 我不明白它怎么会发生。

  • 按下键时的示例输出不起作用:

  • 我们在客户端上安装了我们的根证书,https连接适用于。 但是如果我们尝试使用,它会失败: 证书在客户端上。见: 版本:PIP1.4。1.