• GET请求和POST请求区别


    get请求:

            从指定的资源请求数据,用于获取数据,一般用于搜索排序和筛选之类的操作。

    post请求:

            向指定的资源提交要被处理的数据,用于将数据发送给服务器,一般用于修改和写入数据。

            get请求和post请求本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。

    区别

            (1)post请求更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中,get请求的是静态资源,则会缓存,如果是数据,则不会缓存

            (2)post请求发送的数据更大get请求有url长度限制,http协议本身不限制,请求长度限制是由浏览器和web服务器决定和设置)

            (3)post请求能发送更多的数据类型(get请求只能发送ASCII字符)

            (4)传参方式不同(get请求参数通过url传递,post请求放在request body中传递)

            (5)get请求的是静态资源,则会缓存,如果是数据,则不会缓存

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

                    post请求产生两个TCP数据包:post请求,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 返回数据)                          

                    

    注意:在发送 POST 的时候都没有带 Expect 头,server 也自然不会发 100 continue。

    post请求的过程:

    (1)浏览器请求tcp连接(第一次握手)

    (2)服务器答应进行tcp连接(第二次握手)

    (3)浏览器确认,并发送post请求头第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送

    (4)服务器返回100 Continue响应

    (5)浏览器发送数据

    (6)服务器返回200 OK响应

    get请求的过程:

    (1)浏览器请求tcp连接(第一次握手)

    (2)服务器答应进行tcp连接(第二次握手)

    (3)浏览器确认,并发送get请求头和数据第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送

    (4)服务器返回200 OK响应

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

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

     

  • 相关阅读:
    算法题练习——NC15 求二叉树的层序遍历、NC88 寻找第K大
    20行代码来爬取某某云的榜单音乐
    Go 匿名函数与闭包
    图片如何制作gif动画?1分钟教会你快速制作gif
    C++运算符重载
    解决vscode项目中无法识别宏定义的问题
    QPainter基本绘图【1】
    富文本文案存储翻译方案
    如何快速落地LLM应用?通过Langchain接入千帆SDK
    The 2021 CCPC Weihai Onsite(vp补题记录,A,J,D,G)
  • 原文地址:https://blog.csdn.net/liuqinhou/article/details/126229002