cookie过大导致request 400 错误研究

问:get请求太长报400的错误,如何解决?生成系统中经常偶现此问题
问:get请求URL的长度是谁限制的?
问:每一个cookie的value的大小还是同域下cookie的个数做的限制?

现象:出现 400 Bad request

在这里插入图片描述

状态码400:客户端请求有语法错误,不能被服务器所理解。

问题:request header过大

一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求体4个部分组成。
在这里插入图片描述
谁对request header 大小做限制?

在HTTP规范RFC-2616中有这样一段描述:

The HTTP protocol does not place any a priori limit on the length of a URI. Servers MUST be able to handle the URI of any resource they serve, and SHOULD be able to handle URIs of unbounded length if they provide GET- based forms that could generate such URIs. A server SHOULD return 414 (Request-URI Too Long) status if a URI is longer than the server can handle (see section 10.4.15).
Note: Servers ought to be cautious about depending on URI lengths above 255 bytes, because some older client or proxy implementations might not properly support these lengths.

HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URI长度进行限制,只是说如果server无法处理太长的URI,可以通过返回414状态码。

规范中虽然未对GET请求的长度做出明确的规定,但是在浏览器和应用服务器中对GET请求却做出限制或者相关的可配置:

  • Chrome:对Google浏览器URL的最大长度为8182个字符。
  • IE:对IE浏览器URL的最大长度为2083个字符。若超出这个数字,提交按钮没有任何反应。
  • Firefox:对Firefox浏览器URL的最大长度为65536个字符。
  • Safari: 对Safari浏览器URL的最大长度为80000个字符。
  • Apache能接受url长度限制为8192字符
  • nginx可以通过修改配置来改变url请求串的url长度限制:
    • client_header_buffer_size 默认值:1k
    • large_client_header_buffers默认值:4 8k

浏览器限制更多还是服务器限制更多?

实验分析

实验结论:浏览器允许的request header大小一般情况比Nginx服务器允许的大

测试方式:设置同样大小的cookie,通过浏览器直接访问服务器与通过浏览器先访问到Nginx再代理到服务器做对比得出。

const http = require('http');
const url = require('url');
const fs = require('fs-extra');const server = http.createServer(async (req, res) => {if (req.url === '/index.html') {console.log(req.headers);const html = await fs.readFile('./index.html', 'utf8');const cookieArr = [];for (let i = 0; i < 10; i++) {cookieArr.push(`cookie${i}=${Array.from({ length: 80 }, (v, i) => 'abcdefghijklmnopq' + i).join('')}value${i}; `);}res.writeHead(200, {'Content-Type': 'text/html','Set-Cookie': cookieArr});res.end(html);}if (req.url.startsWith('/postMethod')) {console.log('post');res.end('post');}
});
server.listen('3000', '127.0.0.1', () => {console.log('server runing...');
});
结论

过浏览器直接访问服务器的没有问题。
在这里插入图片描述

通过Nginx转发的存在问题

在这里插入图片描述

修改Nginx配置
  • client_header_buffer_size
    client_header_buffer_size size;
    Default: client_header_buffer_size 1k;
    Context: http, server

  • large_client_header_buffers
    Syntax: large_client_header_buffers number size;
    Default: large_client_header_buffers 4 8k;
    Context: http, server

解决方案总结:

  1. cookie要设置合理,不能太大,个数不能太多
  2. 合理设置时效性,max-age,expires
  3. get请求参数过长,出现参数丢失情况
  4. Nginx上修改允许request header头大小配置,很明显,当前的ng默认配置已不能满足需求。
  5. 临时解决方案:让用户清除cookie。影响:用户需要重新登录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/116847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python · PyTorch】数据基础

数据基础 1. 数据操作1.1 入门1.2 运算符1.3 广播机制1.4 索引和切片1.5 节省内存1.6 转化为其他Python对象 2. 数据预处理2.1 读取数据集2.2 处理缺失值2.3 转换为张量格式 本文介绍了PyTorch数据基础&#xff0c;Python版本3.9.0&#xff0c;代码于Jupyter Lab中运行&#xf…

人工智能之深度学习

1. 引言 时至今日&#xff0c;人们常用的计算机程序几乎都是软件开发人员从零编写的。 比如&#xff0c;现在开发人员要编写一个程序来管理网上商城。 经过思考&#xff0c;开发人员可能提出如下一个解决方案&#xff1a; 首先&#xff0c;用户通过Web浏览器&#xff08;或移动…

Elasticsearch的聚集统计,可以进行各种统计分析

说明&#xff1a; Elasticsearch不仅是一个大数据搜索引擎&#xff0c;也是一个大数据分析引擎。它的聚集(aggregation)统计的REST端点可用于实现与统计分析有关的功能。Elasticsearch提供的聚集分为三大类。 度量聚集(Metric aggregation)&#xff1a;度量聚集可以用于计算搜…

MyBatisPlus的使用【详细】

目录 Mybatis MybatisPlus特性 MybatisPlus的使用 常见注解 TableName TableId TableField MP常见配置 条件查询器Wrapper QueryWrapper UpdateWrapper LambdaQueryWrapper 自定义SQL Service接口 批量添加数据 MP的代码生成 MP静态工具 MP扩展功能之逻辑删除…

C++栈、队列、优先级队列模拟+仿函数

目录 一、栈的模拟和deque容器 1.deque 1.1deque结构 1.2deque优缺点 2.stack模拟 二、队列的模拟 三、priority_queue优先级队列 1.优先级队列模拟 2.添加仿函数 一、栈的模拟和deque容器 在之前&#xff0c;我们学过了C语言版本的栈&#xff0c;可以看这篇文章 栈和…

【刷题篇】笔试真题

文章目录 复数乘法一年中的第几天字符串相加字符串相乘 复数乘法 复数 可以用字符串表示&#xff0c;遵循 “实部虚部i” 的形式&#xff0c;并满足下述条件&#xff1a; 实部 是一个整数&#xff0c;取值范围是 [-100, 100] 虚部 也是一个整数&#xff0c;取值范围是 [-100, 1…

MySQL字段加密方案 安当加密

要通过安当KSP密钥管理系统实现MySQL数据库字段的加密&#xff0c;您可以按照以下步骤进行操作&#xff1a; 安装和配置安当KSP密钥管理系统&#xff1a;首先&#xff0c;您需要安装安当KSP密钥管理系统&#xff0c;并按照说明进行配置。确保您已经正确地设置了密钥管理系统的用…

C语言知识回顾

链接&#xff1a;https://pan.baidu.com/s/1CiB1Ydm4LTV6hZE8wx0VFw?pwdna4z 提取码&#xff1a;na4z --来自百度网盘超级会员V6的分享

判断过/欠拟合和学习率

一、说明 这篇博客是判断是否过拟合和学习率大小的问题&#xff0c;并没有给出解决办法。因为每个人的网络模型不一样&#xff0c;解决办法也不同。因此&#xff0c;如果需要解决办法的话&#xff0c;请参考其他博客。 二、拟合问题 1.train_loss 不断下降&#xff0c;test_los…

【Linux系统编程:信号】产生信号 | 阻塞信号 | 处理信号 | 可重入函数

写在前面 通过学习信号可以理解进程与进程的一个相对关系&#xff0c;还能理解操作系统与进程的关系。要注意的是进程间通信中的信号量与这里的信号没有半毛钱关系&#xff0c;就像老婆和老婆饼。 本文要点&#xff1a; 掌握 Linux 信号的基本概念掌握信号产生的一般方式理解…

Unity之ShaderGraph如何实现触电电流效果

前言 之前使用ASE做过一个电流效果的shader&#xff0c;今天我们通过ShaderGraph来实现一个电流效果。 效果如下&#xff1a; 关键节点 Simple Noise&#xff1a;根据输入UV生成简单噪声或Value噪声。生成的噪声的大小由输入Scale控制。 Power&#xff1a;返回输入A的结果…

统信UOS技术开放日:四大领域全面接入AI大模型能力

1024是程序员的节日&#xff0c;10月24日&#xff0c;统信举办2023统信UOS技术开放日暨deepin Meetup北京站活动&#xff0c;发布与大模型同行的UOS AI、浏览器AI助手、邮箱AI助手、自然语言全局搜索、畅写在线等多项最新AI技术与产品应用。 统信软件高级副总经理、CTO、深度社…

周记之马上要答辩了

“ 要变得温柔和强大&#xff0c;就算哪天突然孤身一人&#xff0c;也能平静地活下去&#xff0c;不至于崩溃。” 10.16 今天提前写完了一篇六级阅读&#xff0c;积累了一些词组&#xff1a; speak out against 公然反对&#xff0c;印象最深刻的就这个&#xff1b; 先了解…

opencv dnn模块 示例(19) 目标检测 object_detection 之 yolox

文章目录 0、前言1、网络介绍1.1、输入1.2、Backbone主干网络1.3、Neck1.4、Prediction预测输出1.4.1、Decoupled Head解耦头1.4.2、Anchor-Free1.4.3、标签分配1.4.4、Loss计算 1.5、Yolox-s、l、m、x系列1.6、轻量级网络研究1.6.1、轻量级网络1.6.2、数据增强的优缺点 1.7、Y…

app专项测试:app弱网测试

弱网测试背景 用户体验 APP使用过程中&#xff0c;弱网的高延迟和高丢包&#xff0c;在实时性要求非常高的场景&#xff0c;容易伤害用户体验 非正常情况下&#xff0c;Bug出现几率会增加 在解决日常支持需求中&#xff0c;经常出现一些用户反馈的Bug无法复现&#xff0c;有…

库的操作【MySQL】

文章目录 创建数据库字符集和校验规则概念分类例子 查看数据库显示创建语句修改数据库删除数据库备份和恢复备份恢复 创建数据库 SQL: CREATE DATABASE [IF NOT EXISTS] db_name [[DEFAULT] CHARSETcharset_name] [[DEFAULT] COLLATEcollation_name];其中&#xff0c;大写的单…

xhadmin多应用Saas框架之超级SEO应用介绍

xhadmin是什么&#xff1f; xhadmin 是一套基于最新技术的研发的多应用 Saas 框架&#xff0c;支持在线升级和安装模块及模板&#xff0c;拥有良好的开发框架、成熟稳定的技术解决方案、提供丰富的扩展功能。为开发者赋能&#xff0c;助力企业发展、国家富强&#xff0c;致力于…

面对史上最难求职季,哪些测试技能更容易拿到offer?

在一线大厂&#xff0c;没有测试这个岗位&#xff0c;只有测开这个岗位。这几年&#xff0c;各互联网大厂技术高速更新迭代&#xff0c;软件测试行业也正处于转型期。传统的功能测试技术逐步淘汰&#xff0c;各种新的测试技术层出不穷&#xff0c;测试人员的薪资也水涨船高。与…

ChatGPT 助力英文论文翻译和润色

文章目录 一、前言二、主要内容1. 中英互译2. 中文润色3. 英文润色 三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 随着全球化的推进&#xff0c;跨文化交流变得越来越重要。在学术领域&#xff0c;英文论文的质量对于研究成果的传…

JAVA设计模式全解(独家AI解析)

JAVA设计模式全解&#xff08;独家AI解析&#xff09; 一、JAVA介绍二、JAVA设计模式六大原则三、JAVA设计模式介绍四、JAVA设计模式详解4.1 单例模式4.1.1 懒汉式&#xff08;Lazy Initialization&#xff09;4.1.2 饿汉式&#xff08;Lazy Initialization&#xff09; 4.2 代…