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 请求工具自己干的。

转载于:https://www.cnblogs.com/onmyway20xx/p/4469202.html

nginx如何解决超长请求串相关推荐

  1. 解决ajax请求跨域,解决ajax请求跨域

    跨域大部分需要通过后台解决,引起跨域的原因: 3个问题同时满足 才可能产生跨域问题,即跨域(协议,主机名,端口号中有一个不同就产生跨域) 下面是解决方法 方法一 // ajax请求跨域 /* *解决a ...

  2. 解决通过Nginx转发的服务请求头header中含有下划线的key,其值取不到的问题

    解决通过Nginx转发的服务请求头header中含有下划线的key,其值取不到的问题 参考文章: (1)解决通过Nginx转发的服务请求头header中含有下划线的key,其值取不到的问题 (2)ht ...

  3. uni-app——一种通过Nginx反向代理处理302重定向请求解决网络请求中无法获取Cookie的解决方案

    问题描述 小程序中不会自动保存和发送Cookie 使用插件(https://uniapp.dcloud.io/api/request/request)方法不能解决302重定向情况下获取Cookie 小 ...

  4. nginx对https的配置,nginx解决post请求被请求两次的问题

    前置条件: 将证书放在:nginx目录下的cert目录中,其中证书有:.pem和.key文件 server {listen 80;listen 443;server_name xxxxx;ssl_ce ...

  5. 利用nginx重定向解决微信H5无法修改安全域名的问题

    文章目录 1.获取用户信息接口 2.设置分享信息接口 ①反向代理 ②运用我方的公众号 1.获取用户信息接口 需要配置信息 ①设置与开发->公众号设置->功能设置底下的几个域名 ②设置与开发 ...

  6. Nginx配置跨域请求 Access-Control-Allow-Origin *

    Nginx配置跨域请求 Access-Control-Allow-Origin * 当出现403跨域错误的时候 No 'Access-Control-Allow-Origin' header is p ...

  7. 摘要: Nginx 网络多并发请求的TCP网络参数做简单说明。

    摘要: Nginx 网络多并发请求的TCP网络参数做简单说明. 需要修改/etc/sysctl.conf来更改内核参数 #原有字段 net.ipv4.tcp_syncookies = 1 #新增字段 ...

  8. nginx 代理解决跨域问题

    前言 可能在某些时候我们的前端项目需要访问一些外部的接口,比如Apollo等,而直接使用axios发送请求的话,会报跨域的错误,具体什么是跨域这里就不啰嗦了,如下图. 这个接口地址当然是正确的,可以放 ...

  9. Nginx 轻松解决跨域问题

    当你遇到跨域问题,不要立刻就选择复制去尝试.请详细看完这篇文章再处理 .我相信它能帮到你. # 分析前准备: 前端网站地址:http://localhost:8080 服务端网址:http://loc ...

最新文章

  1. 全球及中国电子材料行业前景展望与投资机会分析报告2021年版
  2. smart field demo1 - how does system know currency needs to be rendered
  3. 基于verilog的洗衣机设计
  4. 苹果手机显示iphone已停用连接itunes_iphone忘记密码怎么办 iphone忘记密码解决方法【详细步骤】...
  5. 力扣--242有效的字母异位词
  6. 我们一起学习WCF 第五篇数据协定和消息协定
  7. javac 与java_javac和参数用法java命令的-d -cp
  8. opencore 0.6.3 华硕_钜惠嗨翻双11,颜值优选华硕GT501白色狙击手机箱
  9. Flex布局应用---导航栏实现
  10. mysql查询本月第一周_mysql获取当前日期所在周(原则:每年1月1号所在周为第一周,最少1天,12月31日为最后一周)...
  11. Mac下编译WebRTC(Mac和iOS版本)
  12. 带选择头像的用户注册页面
  13. mac系统如何修改网卡mac地址
  14. pytorch进行图像识别_pytorch使用4种不同的模型进行面部表情识别
  15. 高斯混合模型的matlab实现
  16. 习题 8-28 打结(Knots, ACM/ICPC ACM/ICPC Jakarta 2012, UVa1624)
  17. mysql 查看并发数,mysql最大并发连接数的查看与修改()
  18. Unity3D中Rigidbody.velocity和Addforce的区别
  19. 融汇悦生活赴港递交招股书:母公司依赖症难解,独立性存疑
  20. androidStudio gralde zip version 问题

热门文章

  1. shell python优势_python的优势
  2. 输入textbox在datagridview显示结果_Excel输入正确的公式,计算出错,根本没计算解决技巧...
  3. android 多个占位符,Android多语言支持:由于占位符计数不同导致的字符串格式问题...
  4. 计算机技术在石油中的应用,计算机技术在石油工程中的应用.doc
  5. RADStudio连接MySQL_使用FireDac(Delphi)在Firebird中创建数据库
  6. fsum函数测试以及分析
  7. iOS架构篇-3 网络接口封装
  8. xib 拖关联控件的时候报Could not insert new outlet connection错误
  9. [初级]深入理解乐观锁与悲观锁
  10. POJ-1860-Currency Exchange