• HTTP 两种基本请求方法 GET和 POST的区别


    GET方法

    1、GET交互方式是从服务器上获取数据,而并非修改数据,所以GET交互方式是安全的。就像数据库查询一样,从数据库查询数据,并不会影响数据库的数据信息,对数据库来说,也就是安全的。
    2、GET交互方式是幂等的,幂等是一个数学概念,幂等函数就是可以使用相同参数重复执行,并且能获得相同结果的函数。在GET交互这里就是,对同一个URL的多个请求,得到的结果是相同的。就像数据库查询,不同的数据库连接对同一个数据库表用相同条件查询时,得到的结果也是一样的。

    POST方法

    1、POST交互是可以修改服务器数据的一种方式,涉及到信息的修改,就会有安全问题。就像数据库的更新,Update一个数据库表时,如果条件没有写对,就可能把不需要修改的数据给修改了,得到的数据就是错误的了。

    2、一般的POST交互是必须要用到表单的,但是表单提交的默认方法是GET,如果改为POST方式,就需要修改表单提交时的Method。

    GET和POST表现形式区别

    GET 方法查询字符串(名称/值对)是在 GET 请求的 URL 发送的:

    GET /test/demo_form.php?name1=value1&name2=value2 HTTP/1.1

    POST 方法查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:

    POST /test/demo_form.php HTTP/1.1
    Host: runoob.com
    
    name1=value1&name2=value2

     

    GET

    POST

    后退按钮/刷新

    无害

    数据会被重新提交(浏览器应该告知用户数据会被重新提交)。

    书签

    可收藏为书签

    不可收藏为书签

    缓存

    能被缓存

    不能缓存

    编码类型

    application/x-www-form-urlencoded

    application/x-www-form-urlencoded or multipart/form-data。为二进制数据使用多重编码。

    历史

    参数保留在浏览器历史中。

    参数不会保存在浏览器历史中。

    对数据长度的限制

    是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。

    无限制。

    对数据类型的限制

    只允许 ASCII 字符。

    没有限制。也允许二进制数据。

    安全性

    与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。
    在发送密码或其他敏感信息时绝不要使用 GET !

    POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。

    可见性

    数据在 URL 中对所有人都是可见的。

    数据不会显示在 URL 中。

    GET和POST本质区别

    GET和POST本质上都是TCP链接,能做的事情并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。 

    GET和POST还有一个重大区别:

    GET产生一个TCP数据包:对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

    POST产生两个TCP数据包:对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

    因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?

    1. GET与POST都有自己的语义,不能随便混用。

    2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

    3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

    参考:https://www.cnblogs.com/logsharing/p/8448446.html

  • 相关阅读:
    iOS
    “Swift Language Version” (SWIFT_VERSION) build setting must be set to a supported value for targets which use Swift
    iOS
    iOS
    springboot rabbitmq 死信队列应用场景和完整demo
    LRU
    分布式系统高可用原则
    Java8 Stream 流使用场景和常用操作
    下载安装Zookeeper
    Java8内置的函数式编程接口应用场景和方式
  • 原文地址:https://www.cnblogs.com/lalong/p/9336402.html
Copyright © 2020-2023  润新知