• 浅析 Get 和 Post 的区别


    基本请求简介

    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

    说明:

    本篇博客属于自己的理解,如有错误之处,欢迎拍砖。谢谢!

  • 相关阅读:
    多线程与多进程
    Socket网络编程
    Python之路【第五篇】:面向对象及相关
    python 面向对象(进阶篇)
    面向对象
    day1
    day3
    day2
    黑马程序员--C语言中的指针(6)
    黑马程序员--C语言中的指针(5)
  • 原文地址:https://www.cnblogs.com/xiaocai-ios/p/7779760.html
Copyright © 2020-2023  润新知