来自浏览器的带有正文的异步 GET 请求

api*_*art 10 javascript get xmlhttprequest fetch-api axios

好吧,我知道这是一个坏主意,不应该这样做,但为了这个问题,请假设没有其他方法 - 我得到的 API 端点需要以空对象作为主体的 GET 请求。

有没有办法从浏览器执行异步请求?我正在使用在幕后axios使用的库, MDN说当 HTTP 方法是 时会擦除主体。我尝试使用本机,但它在浏览器中给我这个错误: XMLHttpRequestsendGETfetchTypeError: Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body.

有什么办法可以做到吗?

Pet*_*der 8

不,没有。

\n\n

GET 请求不能有请求正文,您不能让它们有请求正文。GET 请求仅检索数据,从不发送数据。

\n\n

需要以空对象作为主体的 GET 请求的 API 不起作用。

\n\n

编辑:

\n\n

显然,GET 请求可以有主体。大多数实现都会忽略它或拒绝该请求。但即使提供 API 的服务器允许主体,您也无法使用它:

\n\n

从规范来看XMLHttpRequest#send

\n\n
\n

发起请求。可选参数提供请求实体主体。如果请求方法是 GET 或 HEAD,则忽略该参数。如果状态未打开或设置了 send() 标志,则引发“InvalidStateError”异常。

\n
\n\n

根据有关fetch API 中Request的规范:

\n\n
\n

如果 init\xe2\x80\x99s body 成员存在且非 null 或inputBody 为非 null,并且request\xe2\x80\x99s 方法为GETorHEAD则抛出 TypeError

\n
\n\n

这意味着您问题的答案仍然是“否”

\n

  • 嗯,在进行研究时,我发现这并不“完全”正确 - 例如弹性搜索允许这种情况。所以我相信这是一个灰色地带——标准并没有直接禁止这样做。 (6认同)
  • 实际上它并不完全正确,GET 请求“可以”有一个可以在服务器端处理的请求正文。 (3认同)