大家好,又见面了,我是你们的朋友全栈君。
背景是这样的,做的是一个机票的购票业务,包括了购票(单程购票和往返购票)等功能。购票的航班信息需要从航班搜索页带到下单页,所以在跳转至下单页前将航班信息存在了cookie,用于在下单页展示所选航班信息。遇到的问题是购买单程机票的时候,一切流程正常(从航班查询页,选择需要的购买的航班,进入到下单页,进行下单操作);但是购买往返机票的时候,进入到下单页时,发现下单页所有接口都报了400的错误,继而再访问该网站的其他页面也都报了400的错误。
一般来说400报错是因为前后端参数格式或者请求头不一致导致的问题,前端用get方式请求,而后端的接参方式为@requestBody。
这里同一个接口,同一段代码,自然是不可能出现请求头不一致导致的400,至于参数,下单页的参数单程和往返一模一样(都是操作id)。
至此怀疑是后端的问题,遂联系后端一起定位问题,后端一顿操作之后,怀疑可能是Nginx出现问题,遂联系运维一起定位问题。
三方一顿操作,一顿查阅资料后发现,还是参数倒是问题,但不是下单页的接口参数导致的,而是航班搜索页存入的cookie导致的问题。
因为往返的时候,存入cookie的数据量过大,请求接口的时候浏览器截取了cookie的值,导致传到后端的参数内容不完整,后端解析出现400错误
至此找出原因,就好解决了,前端换一下存储方式,换成session或者storage就好。
后查阅资料发现web服务器对请求头长度做了限制,避免畸形封装包消耗服务器的资源。
不止页面会在请求头(Request Headers)传递cookie,连css、图片这些静态资源也会传递。可想而知,cookie过大也是非常浪费性能的,也会浪费我们的网站大量的流量。所以作为一个开发者,我们要慎用cookie,不能因为cookie是存在客户端这种片面的思想就乱用了。用一个东西之前要非常清楚它的原理,这样才能学好编程。
cookie是塞在请求头里面的,如php语言来,当请求一个页面的时候,cookie会通过http协议传到服务端,这也是通过$_COOKIE就能获取到远程客户端中的cookie的原理。所以Cookie太大后,整个HTTP头也会被撑大
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132501.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...