首页 php教程 php手册 HTTP中GET长度问题

HTTP中GET长度问题

Jun 06, 2016 pm 08:13 PM
get http 接口 长度 问题

曾做过一个plist的接口,需要将参数编码后放在URL上传递,编码后的URL很长,长到让人担心这么传有没有问题?要弄清这个问题得先弄明白HTTP报文请求格式,借用网上一张图片: 一个HTTP请求由四部分组成:Request Line、Headers、空行和Request Body。见下面GE

曾做过一个plist的接口,需要将参数编码后放在URL上传递,编码后的URL很长,长到让人担心这么传有没有问题?要弄清这个问题得先弄明白HTTP报文请求格式,借用网上一张图片:

http

一个HTTP请求由四部分组成:Request Line、Headers、空行和Request Body。见下面GET示例:

http_get

可以看到GET请求时,数据放在Request Line中Request-URI传递;若发送POST请求时,数据则放在Request Body中传递,不同的地方决定了其享受不同的待遇。

HTTP手册上是这么说的:

HTTP协议不会对URI做任何限制,服务端必须能处理不限长度的URI,如果不能处理则返回414

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).

http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.2.1

虽然HTTP协议中并未限制Request-URI的大小,但不同浏览器和WEB服务器则有不同的限制。

浏览器限制

不同的浏览器限制不同,若通过浏览器访问,2000个字符长度以内基本上都可以兼容。

WEB服务器

这里在SAE上写了个脚本,访问地址http://ipbt.vipsinaapp.com/demo/Http/request.php?len=8151,看到可以正常访问,若len参数改为8152则提示

414 Request-URI Too Large

可见这是当前NGINX环境下的极限值,此时Request Line的总长度为8190。同样的请求本地Apache配置的服务器,当Request Line长度超过8190时,Aapche也会提示

Request-URI Too Large

The requested URL's length exceeds the capacity limit for this server.

可见Nginx和Apache在请求行的长度控制上是一致的,默认都是8190个字符长度。但同时该值也是可以调整的,Nginx中可以通过large_client_header_buffers来控制请求行的最大长度;Apache中可设置LimitRequestLine的值来控制。

LimitRequestLine指令
语法:LimitRequestLine bytes
默认:LimitRequestLine 8190
这个指令用来设置客户端发送的HTTP请求行的最大字节数。请求行包括HTTP方法、URL、协议版本等。因此LimitRequestLine指令能够限制URL的长度,服务器会需要这个值足够大以装载它所有的资源名,包括可能在GET请求中所传递的查询部分的所有信息。
一般情况下,不要更改这个值,使用默认即可。

当把本地Apache LimitRequestLine 调整为 8190000后,加3个0在请求也没问题。。。

GET /ipbt/1/demo/Http/response.php?s=11111111.....
Host: localhost:80
Connection: Close
HTTP/1.1 200 OK
Date: Tue, 05 Aug 2014 23:19:17 GMT
Server: Apache/2.2.11 (Win32) PHP/5.4.7
X-Powered-By: PHP/5.4.7
Content-Length: 14
Connection: close
Content-Type: text/html
Length:8000000
登录后复制

可见GET请求实际上也是没有长度限制的,只是浏览器和WEB服务器做了控制。。。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

电脑主板内部接口都有什么 推荐电脑主板内部接口介绍 电脑主板内部接口都有什么 推荐电脑主板内部接口介绍 Mar 12, 2024 pm 04:34 PM

我们在电脑组装的过程中,安装过程虽然简单,不过往往都是在接线上遇到问题,经常有装机用户误将CPU散热器的供电线插到了SYS_FAN上,虽然风扇可以转动,不过在开机可能会有F1报错“CPUFanError”,同时也导致了CPU散热器无法智能调速。下面装机之家分享一下电脑主板上CPU_FAN、SYS_FAN、CHA_FAN、CPU_OPT接口知识科普。电脑主板上CPU_FAN、SYS_FAN、CHA_FAN、CPU_OPT接口知识科普1、CPU_FANCPU_FAN是CPU散热器专用接口,12V工作

Go语言中常见的编程范式和设计模式 Go语言中常见的编程范式和设计模式 Mar 04, 2024 pm 06:06 PM

Go语言作为一门现代化的、高效的编程语言,拥有丰富的编程范式和设计模式可以帮助开发者编写高质量、可维护的代码。本文将介绍Go语言中常见的编程范式和设计模式,并提供具体的代码示例。1.面向对象编程在Go语言中,可以使用结构体和方法实现面向对象编程。通过定义结构体和给结构体绑定方法,可以实现数据封装和行为绑定在一起的面向对象特性。packagemaini

PHP接口简介及其定义方式 PHP接口简介及其定义方式 Mar 23, 2024 am 09:00 AM

PHP接口简介及其定义方式PHP是一种广泛应用于Web开发的开源脚本语言,具有灵活、简单、强大等特点。在PHP中,接口(interface)是一种定义多个类之间公共方法的工具,实现了多态性,让代码更加灵活和可重用。本文将介绍PHP接口的概念及其定义方式,同时提供具体的代码示例展示其用法。1.PHP接口概念接口在面向对象编程中扮演着重要的角色,定义了类应

如何使用C++实现HTTP流传输? 如何使用C++实现HTTP流传输? May 31, 2024 am 11:06 AM

如何在C++中实现HTTP流传输?使用Boost.Asio和asiohttps客户端库创建SSL流套接字。连接到服务器并发送HTTP请求。接收HTTP响应头并打印它们。接收HTTP响应正文并打印它。

PHP数组长度限制是多少? PHP数组长度限制是多少? Mar 13, 2024 pm 06:30 PM

PHP中数组的长度并没有固定的限制,它可以根据系统的内存大小来动态调整。在PHP中,数组是一种非常灵活的数据结构,可以存储任意数量的元素,每个元素可以是任意类型的值,甚至可以是另一个数组。PHP数组的长度限制主要取决于系统的内存大小和PHP配置的内存限制。一般来说,如果系统的内存足够大,并且PHP的内存限制足够高,数组的长度可以很大。但是,如果系统内存不足或

Java 中接口和抽象类在设计模式中的应用 Java 中接口和抽象类在设计模式中的应用 May 01, 2024 pm 06:33 PM

接口和抽象类在设计模式中用于解耦和可扩展性。接口定义方法签名,抽象类提供部分实现,子类必须实现未实现的方法。在策略模式中,接口用于定义算法,抽象类或具体类提供实现,允许动态切换算法。在观察者模式中,接口用于定义观察者行为,抽象类或具体类用于订阅和发布通知。在适配器模式中,接口用于适配现有类,抽象类或具体类可实现兼容接口,允许与原有代码交互。

透视鸿蒙系统:功能实测与使用感受 透视鸿蒙系统:功能实测与使用感受 Mar 23, 2024 am 10:45 AM

鸿蒙系统作为华为推出的全新操作系统,在行业内引起了不小的轰动。作为华为在美国禁令之后的一次全新尝试,鸿蒙系统被寄予了厚望和期待。近日,我有幸得到了一部搭载鸿蒙系统的华为手机,经过一段时间的使用和实测,我将分享一些关于鸿蒙系统的功能实测和使用感受。首先,让我们来看一下鸿蒙系统的界面和功能。鸿蒙系统整体采用了华为自家的设计风格,简洁清晰,操作流畅。在桌面上,各种

HTTP 503错误怎么解决 HTTP 503错误怎么解决 Mar 12, 2024 pm 03:25 PM

解决方法:1、重试:可等待一段时间后重新尝试,或者刷新页面;2、检查服务器负载:检查服务器的CPU、内存和磁盘使用情况,如果超过了容量限制,可尝试优化服务器配置或增加服务器资源;3、检查服务器维护和升级:在服务器恢复正常之前,只能等待;4、检查网络连接:确保网络连接稳定,检查网络设备、防火墙或代理设置是否正确;5、确保缓存或CDN配置正确;6、联系服务器管理员等等。

See all articles