网站首页 > 技术教程 正文
每天分享java知识,欢迎关注,每天一点进步!
nginx是一个强大的http服务器,但是在使用过程中发现,当遇到超长的post请求或者get请求时,nginx会返回413、400、414等状态码,这是因为请求串长度超过了nginx默认的缓存大小或者请求串大小,那么我们需要怎么样来解决这些问题呢?
针对POST请求,我们可以调整如下两个配置项来解决:
client_body_buffer_size
语法:client_body_buffer_size the_size
默认值:8k/16k
使用字段:http, server, location
这个指令可以指定连接请求使用的缓冲区大小。
如果连接请求超过缓存区指定的值,那么这些请求或部分请求将尝试写入一个临时文件。
默认值为两个内存分页大小值,根据平台的不同,它可能是8k或16k
client_max_body_size
语法:client_max_body_size size
默认值:client_max_body_size 1m
使用字段:http, server, location
这个指令指定允许客户端请求的最大的单个文件字节数,它出现在请求头部的Content-Length字段。
如果请求大于指定的值,客户端将收到一个"Request Entity Too Large" (413)错误。
需要记住,浏览器并不知道怎样显示这个错误。
同时针对post请求还需要注意下面这个参数的配置,如果不打开这个选项当请求串大于client_body_buffer_size大小时,需要手动去读取存储在磁盘的请求,这里需要注意的是存入磁盘的请求是一个完整的请求并不是大于client_body_buffer_size的部分
client_body_in_single_buffer
语法:client_body_in_single_buffer
默认值:off
使用字段:http, server, location这个指令(0.7.58版本)指定将一个完整的连接请求放入缓冲区,当使用$request_body时推荐使用这个指令以减少复制操作。
如果无法将一个请求放入单个缓冲区,将会被放入磁盘。
针对get请求,我们可以通过修改另外两个配置来解决请求串超长的问题:client_header_buffer_size
语法:client_header_buffer_size size
默认值:1k
使用字段:http, server
这个指令指定客户端请求的http头部缓冲区大小绝大多数情况下一个头部请求的大小不会大于1k不过如果有
来自于wap客户端的较大的cookie它可能会大于1k,Nginx将分配给它一个更大的缓冲区,这个值可以在
large_client_header_buffers里面设置。
large_client_header_buffers
语法:large_client_header_buffers number size
默认值:large_client_header_buffers 4 4k/8k
使用字段:http, server
指令指定客户端请求的一些比较大的头文件到缓冲区的最大值,如果一个请求的URI大小超过这个值,服务
器将返回一个"Request URI too large" (414),同样,如果一个请求的头部字段大于这个值,服务器
将返回"Bad request" (400)。
缓冲区根据需求的不同是分开的。
默认一个缓冲区大小为操作系统中分页文件大小,通常是4k或8k,如果一个连接请求将状态转换为
keep-alive,这个缓冲区将被释放。
那么有人就会觉得奇怪了,为什么修改http header的大小就能解决get请求串过长的问题呢,
这就要从http协议的get请求说起了,其实GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中)。
大家看到没,其实get请求的参数就是存放在http header中的,所以修改header的大小限制
当然可以解决请求串过长的问题啦。此外还有给大家澄清一点啦,HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制,我们日常生活中遇到的长度限制都是各个浏览器或者http请求工具自己干的。
猜你喜欢
- 2024-10-13 nginx请求头数据读取流程(nginx查看请求header)
- 2024-10-13 Nginx获取请求响应时间,可配合狐表进行请求耗时统计
- 2024-10-13 日常Bug排查-Nginx重复请求?(nginx频繁502)
- 2024-09-28 从PHP-FPM、NGINX的请求处理来学习阻塞与非阻塞
- 2024-09-28 意犹未尽的一篇Nginx详解原理,面试官看了都忍不住给我点赞
- 2024-09-28 linux里查看web服务器(nginx,http的并发请求数及其tcp连接转态
- 2024-09-28 详解nginx日志中添加请求的response日志
- 2024-09-28 nginx实现range请求(nginx用法)
- 2024-09-28 Web性能优化之-HTTP长连接(电脑性能优化插件)
- 2024-09-28 Nginx中Head参数踩坑(nginx http头)
你 发表评论:
欢迎- 最近发表
-
- Win10 TH2正式版官方ESD映像转换ISO镜像方法详解
- 使用iso镜像升级到Windows 10的步骤
- macOS Ventura 13.2 (22D49) Boot ISO 原版可引导镜像
- 安利一个用ISO镜像文件制作引导U盘的的小工具RUFUS
- CentOS 7使用ISO镜像配置本地yum源
- 用于x86平台的安卓9.0 ISO镜像发布下载:通吃I/A/N、完全免费
- AlmaLinux 9.6发布:升级工具、初步支持IBM Power虚拟化技术
- Rufus写入工具简洁介绍与教程(写入模式)
- 新硬件也能安装使用了,Edge版Linux Mint 21.3镜像发布
- 开源工程师:Ubuntu应该抛弃32位ISO镜像
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)