浏览器返回431的分析

最近遇到一个错误,某浏览器在项目中返回431请求头字段太大。这个错误很容易理解为头内容发送到服务器时太大,包括Cookie、用户的头和浏览器自带的一些头内容。官方文件解释如下:

HTTP 431请求标头字段太大响应状态代码表示服务器拒绝处理该请求,因为请求的HTTP标头太长。在减小请求报头的大小之后,可以重新提交请求。

当请求标头的总大小太大,或者单个标头字段太大时,可以使用431。为了帮助那些遇到这种错误的人,指出这两者中的哪一个是响应体中的问题——理想情况下,还包括哪个头太大。这使得用户可以尝试修复问题,例如通过清除他们的cookies。

这段英文很好理解,解决方法简单明了,就是减少header的内容,清除这个域下的cookie。我是按照这个思路来解决项目中的这个难题的,但还是走了很多弯路。现在我整理一下思路,仅供参考。

项目的背景是在项目中使用Keycloak作为用户认证和授权服务器。Keycloak会根据一些用户信息、资源信息和授权信息生成一个访问令牌,这个令牌信息会存储在浏览器的Cookie中。Nginx在项目中充当反向代理服务器。