[axios]重定向时请求方法发生改变

2024-08-22 529 views
2

你好,

我正在使用 axios v0.17.0 和 HEAD 方法,如下所示:

axios.head('http://example.com');

(假设http://example.com设置为 301 重定向至http://www.example.com

由于某种原因,请求方法将在第一次重定向到 GET 时发生变化,而不是一直保持 HEAD 不变。这将读取如下日志:

example.com:80 10.0.0.1 - - "HEAD / HTTP/1.1" 301 237 "-" "axios/0.17.0"
example.com:80 10.0.0.1 - - "GET / HTTP/1.1" 200 246 "-" "axios/0.17.0"

而不是这样:

example.com:80 10.0.0.1 - - "HEAD / HTTP/1.1" 301 237 "-" "axios/0.17.0"
example.com:80 10.0.0.1 - - "HEAD / HTTP/1.1" 200 246 "-" "axios/0.17.0"

当我在 Firefox 中进行测试时,它会一直保持原始请求方法(HEAD)。

知道这是为什么吗?

谢谢,米洛什

回答

6

好的,显然这是 axios 中包含的 follow-redirects 包中的一个问题。

4

我只是想记录一下我是如何发现这个问题的,最终解决了我所看到的问题:

事情始于使用 axios 发送一个来检查假定 PDF(假设)的标题时uncaughtException导致的节点崩溃。这看起来很奇怪,因为是一个。事实证明,V8 6.1 及以下版本(节点 8 及以下版本)的字符串大小限制为 256MB(我相信在 6.2 中已增加到 1GB),而这试图构建一个 350MB 的字符串。这是由于 https 重定向将转换为一个,因为大小写不匹配。Error: "toString()" failedHEADhttp://example.com/file.pdfHEADHEADHEADGET

所以这就是axios.head下载了 350MB PDF 并导致节点崩溃的情况。我认为这很酷?

现在我正在使用请求拦截器来将方法大写,这样可以很好地配合follow-redirects,并且我的HEAD保持HEAD并且不会爆炸。

3

我也遇到了这个问题。有人在处理这个问题吗?在将 HTTP 方法传递给 follow-redirects 之前将其大写之类的 PR 会被接受吗?

9

@Khaledgarbaya @axe312ger @emilyemorehouse 这仍然是一个问题,需要一个相当奇怪的解决方法,而现在新的类型定义实际上已经打破了这一问题。

非常乐意打开 PR,将 HTTP 方法改为大写,然后再传递给后续重定向。只是想再检查一下:这是你们能接受的吗?:)

9

如果你的 PR 有这方面的测试用例,我很乐意审核它:)