gpt4 book ai didi

javascript - 向请求添加 header 时出现 HTTP 状态代码 405 错误

转载 作者:搜寻专家 更新时间:2023-10-31 22:57:27 25 4
gpt4 key购买 nike

当使用 Axios/http 请求设置 header 时,我在向服务器发出 get 请求时遇到问题。我添加的任何 header (content-type header 除外)都会导致相同的错误:“预检响应具有无效的 HTTP 状态代码 405。”在 Chrome、Firefox、Edge 等中都是如此。

具体来说,我需要为我需要连接的服务添加用于帐户验证的授权 header 。

使用 API URI 在 Postman 上运行 GET 请求工作正常,我得到了所需的响应。在浏览器中的 React 应用程序中运行它会给我 HTTP 405 错误。我在安装了 Google 的 Allow-Control-Origin 扩展并使用 http://localhost:3000 启用的本地 Node 服务器上运行它。

当我在没有任何 header 参数的情况下运行请求时:

axios.get("https://myrequest.com/req/reqservice.svc/Login",).then(data => console.log(data)).catch(err => console.日志(错误))

请求工作正常。当我使用 header (任何 header ,但在我的例子中是 Authorization header )运行它时,出现错误:

axios.get("https://myrequest.com/req/reqservice.svc/Login", { headers: { "Authorization": "randomExample"} }).then(data => console. log(data)).catch(err => console.log(err))

那么,是什么导致了这个问题?如果是 CORS 或连接问题,我一般不会在发出请求时遇到麻烦吗?我一直在仔细阅读 Stack Overflow,但没有给我解决方案的答案。我完全不知道该怎么做,而且我已经为此工作了好几天,没有一个解决方案。任何输入将不胜感激。

最佳答案

这是由于 CORS。您需要为预检 (OPTIONS) 请求 ( Documentation ) 的 Access-Control-Allow-Headers 服务器端指定正确的值

More details about CORS in general

修改您的服务器以添加缺少的 header 。根据您的问题,您至少需要添加 Authorization 值。

Node js 服务器

app.use(function (req, res, next) {
//...
res.setHeader('Access-Control-Allow-Headers', 'Authorization');

关于Access-Control-Allow-Headers

The Access-Control-Allow-Headers response header is used in response to a preflight request to indicate which HTTP headers can be used during the actual request.

因此,在您的服务器端响应中,当设置 Access-Control-Allow-Headers 时,您需要指定一个逗号分隔 header 列表。

Access-Control-Allow-Headers: <header-name>, <header-name>, ...

您只需为自定义 header 指定它,因为默认情况下已经接受了一些 header 。

The simple headers, Accept, Accept-Language, Content-Language, Content-Type (but only with a MIME type of its parsed value (ignoring parameters) of either application/x-www-form-urlencoded, multipart/form-data, or text/plain), are always available and don't need to be listed by this header.

所以在你的情况下,如果你只指定 Content-type 它就可以工作,因为 Content-Type 是默认接受的(如上所述)

注意 如果 Content-type 的值不是上述类型之一(例如,如果您将授权请求提交为 application/json),那么你需要将它添加到列表中(逗号分隔)

Node js 服务器

app.use(function (req, res, next) {
//...
res.setHeader('Access-Control-Allow-Headers', 'Authorization, Content-Type');

关于javascript - 向请求添加 header 时出现 HTTP 状态代码 405 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49593367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com