兴师动众解决由cookie引发的400报错问题

背景是这样的,做的是一个机票的购票业务,包括了购票(单程购票和往返购票)等功能。购票的航班信息需要从航班搜索页带到下单页,所以在跳转至下单页前将航班信息存在了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头也会被撑大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值