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

兴师动众解决由cookie引发的400报错问题背景是这样的,做的是一个机票的购票业务,包括了购票(单程购票和往返购票)等功能。购票的航班信息需要从航班搜索页带到下单页,所以在跳转至下单页前将航班信息存在了cookie,用于在下单页展示所选航班信息。遇到的问题是购买单程机票的时候,一切流程正常(从航班查询页,选择需要的购买的航班,进入到下单页,进行下单操作);但是购买往返机票的时候,进入到下单页时,发现下单页所有接口都报了400的错误,继而再访问该网站的其他页面也都报了400的错误。一般来说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头也会被撑大

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132501.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android定时器Timer简单使用「建议收藏」

    Android定时器Timer简单使用「建议收藏」Android定时器Timer简单使用Timer简介Timer使用总结Timer简介Timer(计时器)位于java.util包下,可用于创建定时任务,任务可以安排为一次性执行,也可以定期重复执行。每个计时器对象对应一个后台线程(TimerThread)。简单理解为创建Timer对象,对应TimerThread线程循环开始从TaskQueue队列中执行一个TimerTask任务。Timer使用创建Timer对象vartimer=Timer()添加需要执行的任务//创建计

    2022年7月25日
    12
  • 一个域名最多能对应几个IP地址?,一个IP地址可以绑定几个域名?

    一个域名最多能对应几个IP地址?,一个IP地址可以绑定几个域名?

    2021年9月20日
    215
  • stm32入门教程_单片机STM32

    stm32入门教程_单片机STM32提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言首先你得知道学习stm32,实际就是在学ARM内核,stm32内核就是ARM的;一、pandas是什么?示例:pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):importnumpyasnpimportpandasaspdimportmatplotlib..

    2025年9月24日
    4
  • webgame开发中常用的一些类

    webgame开发中常用的一些类这个只是自己在开发游戏过程中所总结出来的,仅供参考。1、加载队列QueueLoader,游戏一定是有很多的资源需要加载,这个类可以让资源以顺序进行加载;2、ZIP解压工具类nochump类,这里有之前写过的例子–>使用as工具包解压zip文件。这里还有另外一个Zip处理类ZipArchive3、声音管理类SoundManager,游戏一般都有很多音乐需要管理:…

    2022年6月3日
    30
  • HTML、CSS、JavaScript学习总结

    HTML、CSS、JavaScript学习总结学习总结HTML网站开发的主要原则是:– 用标签元素HTML描述网页的内容结构;– 用CSS描述网页的排版布局;– 用JavaScript描述网页的事件处理,即鼠标或键盘在网页元素上的动作后的程序HTML(Hyper Text Mark-up Language 超文本标记语言)的缩写,是最基础的网页语言 。 Html是通过标签来定义的语言,代码都是由标签所组成 。Htm

    2022年5月16日
    36
  • 微信小程序 轮播图 修改小点点「建议收藏」

    微信小程序 轮播图 修改小点点「建议收藏」.swiper-box.wx-swiper-dot{display:inline-flex;justify-content:space-between;border-radius:50%;}.swiper-box.wx-swiper-dot::before{content:”;flex-grow:1;backgrou

    2022年5月11日
    89

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号