加载资源失败:服务器响应状态为 431 (Request Header Fields Too Large)

Posted

技术标签:

【中文标题】加载资源失败:服务器响应状态为 431 (Request Header Fields Too Large)【英文标题】:Failed to load resource: the server responded with a status of 431 (Request Header Fields Too Large) 【发布时间】:2020-03-17 11:58:42 【问题描述】:

当我尝试从 react 应用程序(构建 MERN 堆栈应用程序)中使用我的 NodeJS api 时,我收到了问题中提到的错误 “”

邮递员的 api 工作正常

const onSubmit=async(e)=>
    e.preventDefault()
    if(password!==password2)
        console.log('passwords dont match')
    else
        const newUser=
            name:name,
            email:email,
            password:password
        
        try 
            const config=
                headers:
                    'Content-Type':'application/json'
                
            
            const body=JSON.stringify(newUser)

            //axios has been set up as proxy
            //http://localhost:3000
            //we dont need to add the above to url
            const res =await axios.post('/api/users',body,config)
            console.log(res.data)

         catch (error) 
            console.error(error.response.data)
        
    

【问题讨论】:

您是否正在发送一个非常大的 cookie?每个 Cookie 的最大大小为 4kb。 我只是从 udemy 课程中学习它,所以不知道如何检查 cookie 大小。我完全按照讲师所做的那样做。搜索谷歌,它告诉我从浏览器中清除 cookie,但这没有帮助 从邮递员那里工作正常。我得到一个令牌 奇数。这是我建议帮助调试的内容。在该路由的服务器端,执行console.log(req.headers)。然后从邮递员发出请求,然后从你的 react 应用发出请求,看看有什么区别。 注意到了一件奇怪的事情。我的 nodejs 应用程序设置在端口 3000 上,react 应用程序设置在端口 5000 上,但是尽管使用了 "proxy":"localhost:3000" 在端口 5000 上发出了发布请求包.json 【参考方案1】:

HTTP 431 Request Header Fields Too Large 响应状态代码表示 服务器拒绝处理请求,因为请求的 HTTP 标头太长。 减少请求标头的大小后,可以重新提交请求。 431 可以在请求头的总大小过大,或者单个 标头字段太大。为了帮助那些遇到此错误的人,请在响应正文中指出 > 两个中的哪一个是问题 - 理想情况下,还包括哪些标头也是 大。这让用户可以尝试解决问题,例如清除他们的 cookie。 如果出现以下情况,服务器通常会产生此状态: 引荐来源网址太长 请求中发送的 Cookie 过多

在我的情况下,我发送了太多 cookie,因为 localhost:4200 被用作 3 个不同项目的域......解决方案(删除无用的 cookie)

希望这会有所帮助...

【讨论】:

【参考方案2】:

在运行 React 应用程序之前忘记先运行我的服务器时出现该错误。

我使用了基于 knex.js 和 express.js 的简单后端,但忘记在启动 React 之前对其进行初始化。现在一切正常。

【讨论】:

【参考方案3】:

当我在代理目标中使用与 React 应用程序端口相同的本地端口时,我遇到了这个错误。这创建了一个内部转发循环,导致“请求标头字段太大”。

【讨论】:

【参考方案4】:

清理浏览器缓存或使用隐身窗口打开。

【讨论】:

【参考方案5】:

您必须关注 Traversy Media !

从 package.json 中删除代理语句并在 axios 调用中写入节点 url

【讨论】:

【参考方案6】:

当您回到前端并开始构建 React 钩子时,您将需要在 PC 上进行一些操作

安装跨环境库:

npm i --save-dev cross-env

更改 package.json 中的开始部分

"start": "cross-env PORT=8000 react-scripts start",

允许您声明项目的起始端口以避免与其他库冲突,在本例中为create-react-app

【讨论】:

【参考方案7】:

431 HTTP response status code 在客户端的 HTTP 标头大于服务器接受的 HTTP 标头限制时从服务器发送。提供知名网络服务器的 HTTP 标头的最大大小here。

这完全有道理,API 在 Postman 而不是浏览器中运行良好;因为 Postman 中不会有任何残留的 cookie。

【讨论】:

【参考方案8】:

转到 chrome 开发工具 > 应用程序 > Cookies, 清除 cookie,您就可以开始摇滚了!

【讨论】:

以上是关于加载资源失败:服务器响应状态为 431 (Request Header Fields Too Large)的主要内容,如果未能解决你的问题,请参考以下文章

加载资源失败:服务器响应状态为 439(应用程序不活动)

错误:加载资源失败:服务器响应状态为 404(未找到)

Apache Cordova:“加载资源失败:服务器响应状态为 404(未找到)”

这是啥意思? “加载资源失败:服务器响应状态为 405(不允许方法)”

Web 窗体 Azure 活动目录:加载资源失败:服务器响应状态为 401

加载资源失败:服务器响应状态为 404(未找到)