转自:https://blog.csdn.net/cscrazybing/article/details/53895289

由于之前的一个web项目中,要用get方法去获取数据,但结果时常报错,经过仔细排查才发现原来url长度超过了限制,通过缩短url和发送多次请求的方法解决了该问题,之后在网上查了些资料,发现这个问题还是内藏玄机,要比自己想的复杂。

首先,其实http 1.1 协议中对url的长度是不受限制的,协议原文:

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 proxyimplementations might not properly support these lengths.

翻译:

HTTP协议不对URI的长度作事先的限制,服务器必须能够处理任何他们提供资源的URI,并且应该能够处理无限长度的URIs,这种无效长度的URL可能会在客户端以基于GET方式的请求时产生。如果服务器不能处理太长的URI的时候,服务器应该返回414状态码(此状态码代表Request-URI太长)。

注:服务器在依赖大于255字节的URI时应谨慎,因为一些旧的客户或代理实现可能不支持这些长度。

具体参见协议 中的3.2.1

虽然协议中未明确对url进行长度限制,但在真正实现中,url的长度还是受到限制的,一是服务器端的限制,二就是游览器端的限制。

一、服务器端

在服务器端,主要是apache,jboss和nginx等,我在网上找到的调节方法可以参加下文:关于http请求url长度以及请求消息体长度的研究(一)(服务器端)

1.1 nginx

由于现在项目中主要用到nginx,所以强调下它的设置参数:large_client_header_buffers

该参数对nginx服务器接受客户端请求的头信息时所分配的最大缓冲区的大小做了限制,也就是nginx服务器一次接受一个客户端请求可就收的最大头信息大小。这个头不仅包含 request-line,还包括通用信息头、请求头域、响应头域的长度总和。这也相当程度的限制了url的长度。

nginx服务器默认的限制是4K或者8K,这是根据服务器的硬件配置有关的,一般为内存一页的大小,目前大部分为4K,即4096字节。

1.2 nodejs

这主要是针对nodejs程序员,如不做相关开发可以直接忽略这一节。

nodejs的http服务,设置url长度限制和headers的大小还是相对比较灵活的,我简单实现了控制程序,这里_limit就是url长度的控制器

var http = require('http');var _limit = 40;var app = http.createServer(function(req,res){console.log('hello world');
var potocol = 'http:\/\/';
var host = req.headers.host;
var url = req.url;var code = 200;
var allurl  = potocol + host + url;console.log(allurl);
var len = allurl.length;
if(len > _limit){
var code = 414;res.writeHead(code, {});res.end();}
else{
var body = {'name':'jifeng'};res.writeHead(code, {});res.end(JSON.stringify(body));}
});app.listen(1987,function(){console.log('server listen on 1987');
});

备注: connect中的limit中有实现相类似功能的模块,

二、游览器端

游览器的种类繁多,并且对URL的长度限制是有所差异的,具体如下:

游览器 最大长度(字符数)           备注
 Internet Explorer   2083      如果超过这个数字,提交按钮没有任何反应
 Firefox 65,536  
 chrome 8182  
 Safari  80,000  
 Opera 190,000  
curl(linux下指令) 8167  

这些数据主要通过网上数据搜索而来,笔者还没有亲自验证过。但都有限制是不争的事实,大家在做开发时要特别注意。

HTTP中的URL长度限制相关推荐

  1. mysql url 长度_http中url的长度限制

    get 请求中url的最大长度限制 在网上查询之后,浏览器和服务器对url长度都有限制,现总结如下. 浏览器 1.IE IE浏览器(Microsoft Internet Explorer) 对url长 ...

  2. 搜索引擎中的URL散列

    散列(hash)也就是哈希,是信息存储和查询所用的一项基本技术.在搜索引擎中网络爬虫在抓取网页时为了对网页进行有效地排重必须对URL进行散列,这样才能快速地排除已经抓取过的网页.最理想的状态是对联网上 ...

  3. 一种精确从文本中提取URL的思路及实现

    在今年三四月份,我接受了一个需求:从文本中提取URL.这样的需求,可能算是非常小众的需求了.大概只有QQ.飞信.阿里旺旺等之类的即时通讯软件存在这样的需求.在研究这个之前,我测试了这些软件这块功能,发 ...

  4. 浏览器和服务器 对http请求(post get) url长度限制

    1. GET  URL长度限制 在Http1.1协议中并没有提出针对URL的长度进行限制,RFC协议里面是这样描述的,HTTP协议并不对URI的长度做任何的限制,服务器端 必须能够处理任何它们所提供服 ...

  5. jsonp请求url长度过长的替代(ajaxcdr的使用)

    问题描述:跨域使用jsonp时url过长的问题 问题解释: 跨域请求时,若用jsonp请求(详情见:MVC4 Web Api 与 Ajax交互存在的跨域问题总结)jsonp因是请求的script标签, ...

  6. Http协议中的各种长度限制总结

    1. URL长度限制 在Http1.1协议中并没有提出针对URL的长度进行限制,RFC协议里面是这样描述的,HTTP协议并不对URI的长度做任何的限制,服务器端必须能够处理任何它们所提供服务多能接受的 ...

  7. 图解Http协议 url长度限制

    http请求报文的格式 一般请求所带有的属性: http响应报文的格式: 响应首部一般包含如下内容: 一.技术基石及概述 问:什么是HTTP? 答:HTTP是一个客户端和服务器端请求和响应的标准TCP ...

  8. 在关于mailto的使用中,关于url长度出现超长的问题

    #搜索过程中发现,各浏览器与各Web Server对URL均有长度的限制如下: 一.IE IE浏览器对URL的最大限制为2083个字符,如果超过这个数字,提交按钮没有任何反应. 二.Firefox ( ...

  9. 一步步学会使用ASP.NET 4 WEB应用程序中使用URL Routing(翻译)

    创建路由 路由就是将URL路径映射到具体的物理文件.若要将路由添加到网站中,请使用 RouteCollection.MapPageRoute 方法将它们添加到RouteTable类的静态Routes属 ...

  10. Python中的urllib.quote和Go中的url.QueryEscape关系探讨

    工作中多次遇到Python版本的签名算法,需要用Go版本再实现一遍,这就需要牵扯到Python 2.7中的urllib中的quote,quote_plus和Go中net/url包中的url.Query ...

最新文章

  1. 企业实战_14_MyCat跨分片查询_全局表
  2. Linux移植笔记--arm64上的Linux系统移植
  3. 解码2022中国网安强星丨构建企业第一重“安全感”,联软科技以零信任重塑网络安全边界
  4. 如何设置计算机休眠播放幻灯片,如何设置电脑休眠屏保幻灯片
  5. oracle查询日志空间大小,ORACLE 管理 日志与空间
  6. 基于Spring Boot的微生活的设计与实现
  7. Proof_Of_Work机制
  8. 网络技术故障背后:50元发动的DDoS流量攻击
  9. MSI B450迫击炮装机常见问题解决方法
  10. C# 实时监控线程类
  11. 数据结构之顺序表的删除、查找、遍历
  12. 多属性决策的权重确定方法及matlab 程序
  13. 解决SecureFX无法连接linux服务器
  14. RAM与ROM与CMOS
  15. 科学家发现病毒感染细胞和染色体密切相关,提取出这些染色体的最大相似之处
  16. 水星MW4530R刷机总结
  17. [附源码]java毕业设计毕业生离校管理系统
  18. 访问学者美国访学哪些东西不能带?
  19. html中列表前面的序号带圆圈,js动态添加带圆圈序号列表的实例代码
  20. 中国网络光缆出口分布图

热门文章

  1. Felica的文件系统
  2. python3.7源码剖析——python对象
  3. ea6500 v1 刷梅林_Linksys EA6500v1刷DD-WRT及救砖方法
  4. 用python实现pdf转word(带格式)_python实现pdf转换成word/txt纯文本文件
  5. python 谷歌翻译_Python:谷歌翻译20次的程序如何实现?
  6. iOS 端 HTTP 抓包分析工具推荐-Thor
  7. oracle常见sql笔试题,一路SQL笔试题
  8. 基于GPON的光纤光栅通信网与传感网融合技术研究
  9. 目录-换热器工艺设计
  10. maven项目关于ojdbc14依赖配置