HTTP中Get与Post,PUT,DELETE的区别( 二 )


POST把提交的数据则放置在是HTTP包的包体中 。
2."GET方式提交的数据最多只能是1024字节 , 理论上POST没有限制 , 可传较大量的数据 , IIS4中最大为80KB , IIS5中为100KB"??!
以上这句是我从其他文章转过来的 , 其实这样说是错误的 , 不准确的:
(1).首先是"GET方式提交的数据最多只能是1024字节" , 因为GET是通过URL提交数据 , 那么GET可提交的数据量就跟URL的长度有直接关系了 。而实际上 , URL不存在参数上限的问题 , HTTP协议规范没有对URL长度进行限制 。这个限制是特定的浏览器及服务器对它的限制 。IE对URL长度的限制是2083字节(2K+35) 。对于其他浏览器 , 如Netscape、FireFox等 , 理论上没有长度限制 , 其限制取决于操作系统的支持 。
【HTTP中Get与Post,PUT,DELETE的区别】注意这是限制是整个URL长度 , 而不仅仅是你的参数值数据长度 。[见参考资料5]
(2).理论上讲 , POST是没有大小限制的 , HTTP协议规范也没有进行大小限制 , 说“POST数据量存在80K/100K的大小限制”是不准确的 , POST数据是没有限制的 , 起限制作用的是服务器的处理程序的处理能力 。
对于ASP程序 , Request对象处理每个表单域时存在100K的数据长度限制 。但如果使用Request.BinaryRead则没有这个限制 。
由这个延伸出去 , 对于IIS 6.0 , 微软出于安全考虑 , 加大了限制 。我们还需要注意:
1).IIS 6.0默认ASP POST数据量最大为200KB , 每个表单域限制是100KB 。
2).IIS 6.0默认上传文件的最大大小是4MB 。
3).IIS 6.0默认最大请求头是16KB 。
IIS 6.0之前没有这些限制 。
所以上面的80K , 100K可能只是默认值而已(注:关于IIS4和IIS5的参数 , 我还没有确认) , 但肯定是可以自己设置的 。由于每个版本的IIS对这些参数的默认值都不一样 , 具体请参考相关的IIS配置文档 。
3.在ASP中 , 服务端获取GET请求参数用Request.QueryString , 获取POST请求参数用Request.Form 。在JSP中 , 用request.getParameter("XXXX")来获取 , 虽然jsp中也有request.getQueryString()方法 , 但使用起来比较麻烦 , 比如:传一个test.jsp?name=hyddd&password=hyddd , 用request.getQueryString()得到的是:name=hyddd&password=hyddd 。在php中 , 可以用$_GET和$_POST分别获取GET和POST中的数据 , 而$_REQUEST则可以获取GET和POST两种请求中的数据 。值得注意的是 , JSP中使用request和PHP中使用$_REQUEST都会有隐患 , 这个下次再写个文章总结 。
4.POST的安全性要比GET的安全性高 。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念 。上面“安全”的含义仅仅是不作数据修改 , 而这里安全的含义是真正的Security的含义 , 比如:通过GET提交数据 , 用户名和密码将明文出现在URL上 , 因为(1)登录页面有可能被浏览器缓存 , (2)其他人查看浏览器的历史纪录 , 那么别人就可以拿到你的账号和密码了 , 除此之外 , 使用GET提交数据还可能会造成Cross-site request forgery攻击 。
总结一下 , Get是向服务器发索取数据的一种请求 , 而Post是向服务器提交数据的一种请求 , 在FORM(表单)中 , Method默认为"GET" , 实质上 , GET和POST只是发送机制不同 , 并不是一个取一个发!




推荐阅读