Axios没有正确发送自定义标头,

kq0g1dla  于 5个月前  发布在  iOS
关注(0)|答案(2)|浏览(99)

描述bug

当发送一个包含自定义头部的POST请求时,axios不会发送它们或者发送损坏的头部。
我正在使用Atlas DB API,它需要API密钥来访问集合。当我使用Axios ^1.4.0发送POST请求时,我会收到错误。

Logs:
[
  "token contains an invalid number of segments"
]

Axios 1.3.6运行正常。

重现问题

我尝试用Atlas重现这个问题,可以通过以下简单的代码实现:

await axios.post(
    "https://host.aws.data.mongodb-api.com/app/id/endpoint/data/v1)/action/insertOne",
    {
        "collection": "test-collection",
        "database": "test-database",
        "dataSource": "test-data-source",
        "document": {"field": "value"}
    },
    {
        headers: {
            "Content-Type": "application/json",
            "api-key": "top-secret-key",
        },
    }
);

代码片段

  • 无响应*

预期行为

我期望结果是一个插入的记录,但我得到的是错误而不是预期的结果:

Logs:
[
  "token contains an invalid number of segments"
]

axios版本

^1.4.0

适配器版本

  • 无响应*

浏览器

  • 无响应*

浏览器版本

  • 无响应*

Node.js版本

v16.15.1

OS

Ubuntu 22.04和Windows 11

其他库版本

  • 无响应*

其他上下文/截图

  • 无响应*
vcirk6k6

vcirk6k61#

  1. 您的代码中包含一个占位符,用于存储您的特定信息,但似乎多了一个 ")" 字符。请确保 URL 正确拼写。
    尝试通过记录请求头并检查其格式是否正确来检查它们。例如:
const headers = {
 "Content-Type": "application/json",
 "api-key": "top-secret-key",
};
console.log('Request Headers:', headers);
axios.post(
 " [https://host.aws.data.mongodb-api.com/app/id/endpoint/data/v1/action/insertOne](https://host.aws.data.mongodb-api.com/app/id/endpoint/data/v1/action/insertOne) ",
 {
 "collection": "test-collection",
 "database": "test-database",
 "dataSource": "test-data-source",
 "document": {"field": "value"}
 },
 { headers }
).then(response => {
 console.log('Response:', response.data);
})
.catch(error => {
 console.error('Error:', error);
});

这将帮助您验证请求头是否设置正确。

wfveoks0

wfveoks02#

同样看到这个问题,它似乎与这个问题 #891 有关,因为在评论中描述的解决方法确实有效,但这肯定不理想,因为我们现在需要强制开发者在使用axios进行POST请求时仅使用“长格式”。
我已经添加了各种日志记录,甚至通过使用请求拦截器来记录并发现,当它在请求拦截器中记录时,头信息已经丢失了,但是使用一个 put 请求或一个 get 请求时,这个问题并不存在。
由于这个原始问题似乎可以追溯到2017年,很遗憾至今没有解决方案或者任何关于为什么这个问题存在的见解。

相关问题