GET方法和POST方法的区别,Get方法到底可传递的字符串的最大长度是多少?

GET方法和POST方法的区别,Get方法到底可传递的字符串的最大长度是多少?曾经人介绍,如果使用GET方式传输参数,URL的最大长度是256个字节,对此深信不疑.

但是最近看到一些超长的url,能够在IE下工作,复制下来测算了一下长度,大概是650个字节,这个长度远远超过了256个字节.这时候对以前的说法不由得有些怀疑—-用各大搜索引擎翻了个遍,最后找到最权威的解释—-Maximum URL length is 2,083 characters in Internet Explorer.———Microsoft Internet Explorer的最大统一资源定位符(URL)长度为2,083个字符。

Internet Explorer的最大路径长度为2,048个字符。此限制适用于POST请求和GET请求URL。

如果使用GET方法,则最多限制为2,048个字符,减去实际路径中的字符数。

但是,POST方法不受提交名称/值对的URL大小的限制。这些对在标题中传输,而不是在URL中传输。

RFC 2616,“超文本传输??协议 – HTTP / 1.1”,未指定对URL长度的任何要求。

没错,IE的url最大长度是2083个字节,可以用于GET传递数据的长度是2048个字节,这个数字不小,远超过256这个曾经认为无比正确的数字.

另外POST方式传递的数据不受这个长度影响,它的值通过浏览器header传输而不是url.

浏览器

经过实际测试:

1、在IE8 下的URL地址总长度为:4076,超过该长度会自动忽略后面的内容;

2、在firefox 25下的URL地址总长度可以达到:7530,超过该长度会访问错误;

3、在chrome 29.0.1547.62 的最大总长度达到:7675,超过该长度会访问错误;

由此可见,在以前的浏览器下,或许URL的最大长度为256是可能的(现在找不到IE6或以前的版本来测试),随着浏览器的更新升级支持的长度也会随着变化。

服务器

1、apach

apache 能接受url长度限制为8 192 字符

2、IIS

Microsoft Internet Information Server(IIS)能接受url长度限制为16 384个字符。

3、Perl HTTP::Daemon

Perl HTTP::Daemon 至少可以接受url长度限制为8000字符。Perl HTTP::Daemon中限制HTTP request headers的总长度不超过16 384字节(不包括post,file uploads等)。但当url超过8000字符时会返回413错误。
这个限制可以被修改,在Daemon.pm查找16×1024并更改成更大的值。

4、ngnix

可以通过修改配置来改变url请求串的url长度限制。

client_header_buffer_size 默认值:client_header_buffer_size 1k

large_client_header_buffers默认值 :large_client_header_buffers 4 4k/8k

注意事项:

由于jsonp跨域请求只能通过get请求,url长度根据浏览器及服务器的不同而有不同限制。
若要支持IE的话,url长度限制为2083字符,若是中文字符的话只有2083/9=231个字符。
若是Chrome浏览器支持的最大中文字符只有8182/9=909个。

原文地址:https://www.cnblogs.com/Javi/p/11577303.html

时间: 2024-11-08 00:09:00

GET方法和POST方法的区别,Get方法到底可传递的字符串的最大长度是多少?的相关文章

在php中分别使用curl的post提交数据的方法和get获取网页数据的方法

在php中分别使用curl的post提交数据的方法和get获取网页数据的方法整理分享一下额,具体代码如下: (1)使用php curl获取网页数据的方法: $ch=curl_init(); //设置选项,包括URL curl_setopt($ch,CURLOPT_URL,"http://www.nettuts.com"); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_HEADER,0); //执行

object的wait()、notify()、notifyAll()、方法和Condition的await()、signal()方法

wait().notify()和notifyAll()是 Object类 中的方法 从这三个方法的文字描述可以知道以下几点信息: 1)wait().notify()和notifyAll()方法是本地方法,并且为final方法,无法被重写. 2)调用某个对象的wait()方法能让当前线程阻塞,并且当前线程必须拥有此对象的monitor(即锁) 3)调用某个对象的notify()方法能够唤醒一个正在等待这个对象的monitor的线程,如果有多个线程都在等待这个对象的monitor,则只能唤醒其中一个

BeanUtils.copyProperties()方法和PropertyUtils.copyProperties()的区别

首先两者来源于同一个包: import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.PropertyUtils; 千万不要导包错误,否者会报异常. BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码

android中webview loadUrl(String url,Map header)方法和postUrl(String url,byte[] postData)方法同时使用问题;

首先说明 loadUrl(String url,Map header)是用于加载webview中添加请求头的方法 postUrl(String url,byte[] postData)是用于加载webview中添加请求体的方法 但是比较坑的是如果你想同时添加请求头和请求体这两个方法都不能用,并且android自带的webview中也没有提供方法 在stackoverflow上搜索后有用其他第三方封装的http请求做的,但是比较麻烦,在这里说出我自己的处理方法,不一定适合所有人, 但是绝对简单粗暴

继承PagerAdapter类需要重写五个方法和ViewPager的点击事件方法小结

继承PagerAdapter类需要重写五个方法: public int getCount() { return pages.size(); } 返回page的长度 public boolean isViewFromObject(View arg0, Object arg1) { return arg0==arg1; } 判断instantiateItem(ViewGroup container, int position)返回的要加载的pager对象是不是view视图,是则返回true并显示,不

Class类的getResource(String name)方法和ClassLoader的getResource(String name)方法

1.Class.getResource(String name) package path; import org.junit.Test; import jodd.emial.JoddDemo; public class PathTest { @Test public void pathTest() { System.out.println(JoddDemo.class.getResource(""));//输出file:/E:/workspace/MyDemo/target/clas

jquery触发事件的方法和trigger triggerHander的区别

<div> <p>fff</p> </div> <button type="">d</button> <input></input> $("div").on('click', function(event) {alert(22);}); 可以直接跟上方法名触发 $("button").click(function(event) { $("di

sleep()方法和wait()方法的区别? sleep()方法和yield()方法的区别?

sleep()方法和wait()方法的区别? sleep方法是Thread的静态方法,wait方法是Object类的普通方法 sleep方法不释放同步锁,wait方法释放同步锁(执行notify方法唤醒wait的线程时是不释放同步锁的) wait方法用于线程间通信,而sleep方法用于短暂的暂停线程 sleep针对当前线程,而wait针对被同步代码块加锁的对象 sleep方法是当前线程暂停指定时间,将执行机会让给其它线程,时间结束后进入就绪状态等待 调用wait方法会暂停线程,当前线程释放对象的

StringUtils工具类中的isBlank()方法和isEmpty()方法的区别

1.isBlank()方法 1 public static boolean isBlank(String str) { 2 int strLen; 3 if (str == null || (strLen = str.length()) == 0) { //判断str是否为null或者str长度是否等于0 4 return true; 5 } 6 for (int i = 0; i < strLen; i++) { 7 if ((Character.isWhitespace(str.charAt