基本请求简介
Http 定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。
GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
URL 简介
URL 全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源。
URL 的编码格式采用的是 ASCII 码,而不是 Unicode,这也就是说你不能在 Url 中包含任何非 ASCII 字符,所有非 ASCII 字符均需要编码再传输,关于 Url 编码可参考:http://kb.cnblogs.com/page/133765/。
Get 和 Post 的区别:
1 形式上:
(1) Get 的请求参数放在 URL 后面(把数据放置在请求行(request line)中),并且第一个参数用 ? 拼接,后面从第二个参数开始,直到最后一个,用 & 分开,例如https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1
(2) Post 的参数是放在请求体里面;
因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变。
2 传输数据的大小
首先声明:HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。
所以:”GET方式提交的数据最多只能是1024字节,理论上POST没有限制,可传较大量的数据“?
其实这样说是错误的,不准确的(我也一度被误导了,too young to simple)
实际开发中存在的限制主要有:
(1) GET: 特定浏览器对URL长度有限制,例如 IE 对 URL 长度的限制是2083字节( 2K+35 )。对于其他浏览器,如 Netscape、FireFox 等,其限制取决于操作系统的支持。因此对于 GET 提交时,传输数据就会受到URL 长度的限制。
(2) POST: 由于不是通过 URL 传值,理论上数据不受限。但实际各个 WEB 服务器会规定对 post 提交数据大小进行限制,Apache、IIS6 都有各自的配置。
3 安全性
POST的安全性要比GET的安全性高。GET 的参数是暴露在地址栏的,并且有缓存(比如登录界面),其他人查看浏览器的历史纪录,就可以从缓存中得到登录的账号和密码等敏感数据;而 POST 提交的记录是没有缓存的。
4 其他
对于 GET 方式,服务端用 Request.QueryString 获取变量的值,对于POST 请求方式,服务端用 Request.Form 获取提交的数据。
POST 需要明确的指定方法, GET 不需要,并且默认就是 GET 请求。
总结:
记录 | GET | POST |
---|---|---|
后退/刷新 | 无害 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。 |
书签 | 可收藏为书签 | 不可收藏为书签 |
缓存 | 能被缓存 | 不能缓存 |
历史 | 参数保留在浏览器历史中。 | 参数不会保存在浏览器历史中。 |
对数据长度的限制 | URL 的长度由浏览器限制 | 数据长度由服务器限制 |
对数据类型的限制 | 只允许 ASCII 字符。 | 没有限制。也允许二进制数据。 |
安全性 | GET 的安全性较差,因为所发送的数据是 URL 的一部分。 | POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。 |
可见性 | 数据在 URL 中对所有人都是可见的。 | 数据不会显示在 URL 中。 |
最后,对各个浏览器对 URL 的限制
浏览器 | 最大字节数 |
---|---|
IE | 2083 |
firefox | 65,536 |
chrome | 8182 |
360极速浏览器 | 2118 |
Safari | 80,000 |
Opera | 190,000 |
参考博客/资料:
http://blog.csdn.net/gideal_wang/article/details/4316691
http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html
http://www.baiwar.com/post/the-maximum-length-of-the-url-in-the-browser-get-request-limits.html
http://www.w3school.com.cn/tags/html_ref_httpmethods.asp
http://blog.csdn.net/yang_5/article/details/8174889
说明:
本篇博客属于自己的理解,如有错误之处,欢迎拍砖。谢谢!