如何在React-Redux应用程序中修复431请求标头字段太大

时间:2019-08-09 13:41:09

标签: reactjs redux http-headers request-headers

我正在使用Redux的youtube上完成MERN注册/登录身份验证教程。尝试将测试用户发布到Postman中的服务器时,我收到431标头请求的错误响应太大。

我在某些地方阅读过,可以清除浏览器中的缓存/历史记录,因此我尝试了一下,但无济于事。我还向标题请求中添加了“ Clear-Site-Data”:“ *”条目(除了“ Content-Type”:“ application / json”之外)也没有用。

用于注册的客户端代码

  onSubmit = e => {
    e.preventDefault();
    const { name, email, password } = this.state;

    const newUser = {
      name,
      email,
      password
    };

    this.props.register(newUser);
  };

//redux actions
export const register = ({ name, email, password }) => dispatch => {

  const config = {
    headers: {
      "Content-Type": "application/json",
      "Clear-Site-Data": "*"
    }
  };

  // Request body
  const body = JSON.stringify({ name, email, password });

  axios
    .post('/api/users', body, config)
    .then(res =>
      dispatch({
        type: REGISTER_SUCCESS,
        payload: res.data
      })
    )
    .catch(err => {
      dispatch(
        returnErrors(err.response.data, err.response.status, 'REGISTER_FAIL')
      );
      dispatch({
        type: REGISTER_FAIL
      });
    });
};

用户注册应该向我连接的Mongo数据库发送名称,电子邮件和密码,但是,它使我停止运行,并且redux击中了我创建的REGISTER_FAIL类型,并返回431错误。任何帮助将不胜感激。谢谢!

8 个答案:

答案 0 :(得分:10)

我在Angular Application中也遇到了同样的问题。花了很多时间后,我发现问题与Node JS有关。我们使用的是Node JS v12.x.x,在此版本中,max-http-header-size从80KB减少到8KB。我拥有的auth令牌大约为10KB。这就是为什么当我重新加载应用程序时,浏览器开始为某些文件显示“ 431请求标头字段太大”错误。我已经更新了Node JS v14.x.x,它再次开始工作,因为在v14.0.0中,max-http-header-size已增加到16KB。

希望这会有所帮助。

答案 1 :(得分:5)

我仅使用localhost就遇到了类似的问题(不仅限于redux)。也许这可能有所帮助。
将其放入网址:chrome:// settings /?search = cache
单击清除浏览数据。
勾选Cookie和其他站点数据(由于Cookie在HTTP标头中,因此很重要) 勾选缓存的图像和文件(可能是可选的)

答案 2 :(得分:4)

另一个建议是在检查器工具中访问您的cookie,然后删除。适用于localhost:{port}应用程序的Cookie。

答案 3 :(得分:0)

这意味着您正在尝试在当前的前端开发服务器上执行此操作。您需要指定服务器地址。例如:

.post('/api/users', body, config)

应阅读

.post('http://localhost:4000/api/users', body, config)

另一种解决方法是,假设您的实际服务器端口为4000,将proxy中的行package.jsonlocalhost:3000更改为localhost:4000

答案 4 :(得分:0)

我遇到的问题是我试图访问doPost目录中的文件。解决方法是将其移至src目录,现在可以正常使用了。

例如 来自

public

public
 - index.html
 - favicon.ico
 - etc
src
 > access-me
 - App.tsx
 - etc

答案 5 :(得分:0)

是布拉德·特拉维里(Brad Travery)的课程吗?在package.json中检查“代理”,或尝试在axios请求中使用完整的URL。更改后,我必须完全重新启动服务器,因为它仍然使用旧端口(顺便说一句,我输入了错误的端口)

答案 6 :(得分:0)

不是reactjs,而是使用 vue-cli ,对于像我这样的人,只是愚蠢,可能会有所帮助:

我在端口8080上启动了Vue应用程序,而本地后端在端口4000上运行。但是,我的请求指向8080,而我从Webpack Serving获得的响应是​​“ 431请求标头字段太大”。

简单的解决方案是只使用正确的后端端口。即使那是我一个非常愚蠢的错误,错误消息在这里也没什么用。

答案 7 :(得分:0)

已在 https://stackoverflow.com/a/56351573/9285308 中修正

(最大 http 头大小参数是可配置的):

node --max-http-header-size 16000 client.js