zoukankan      html  css  js  c++  java
  • Http协议中get和post的区别----学习笔记

    因为是做接口测试,所以接触http协议的时间最多,但是几年下来只能是理解http的皮毛,每次出去面试,面试官都会问以及经典的问题:

    GET 与 POST的区别???

    那么区别到底是什么呢?网上的答案有很多,如下:

    1、GET请求参数直接拼接在url后面例如:url?params1=value1&param2=value2

      POST请求的参数则是放到body体里

    2、浏览器会自动缓存GET请求,而POST不会自动缓存,除非手动设置。

    3、GET 请求在浏览器中可回退,而POST会再次请求

    4、GET请求时只能通过url编码,而POST则可以支持多种编码格式

    5、GET的请求参数可以被完整保存到历史记录中,而POST不会被保留

    6、GET产生的url可以被bookmark,而POST不可以

    7、GET可接受的参数类型为ASCII字符,而POST没有限制

    8、GET在ulr中传送的参数有长度限制??? 而POST没有限制

    如果是一个真正了解http协议的面试官可能会微微一笑,告诉你:不完全对,并不是我们要的答案

    so。。。。。。WTF。。。。。

    那么GET 与 POST的真正的区别是什么呢?

    如果要了解GET与POST的根本区别,首先要了解HTTP协议的是什么? 

    百度:     http协议

    维基百科:https://zh.wikipedia.org/wiki/超文本传输协议

    HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。也就是说HTTP协议本身是基于TCP/IP协议。

    所以无论是GET  还是 POST 都是一个标准的TCP链接,所以是两者能完成的事情是一样的,在GET请求中设置body 和 POST 的url中加入参数也是完全可行的

    那么请问上面的那些区别是虾米?

    举个例子:我们把每一个需要传送的TCP数据包比作汽车,但是生活中对于汽车有各种不同的需求,如果每一辆车都一样那么就会出现家用轿车运货,开着货车旅游的情况,为了做到一个规范,http就产生了。我们给家用的车命名为GET , 把 货车命名为POST ,分别贴上标签各做各的,将资源最大化

    那么,其实家用轿车GET 也是可以用作货车的,这个就看个人爱好以及特殊的管制了。因为并不是所有的服务器都会在处理GET请求时取获取body中的数据,也就是说你可以在GET的body中放入数据,有的服务器会帮你check request body 而有的服务器可能就会直接忽略掉,同理POST也是一样。

    至于最经典的问题:GET中的url长度限制? 这个好比你再汽车顶上放置了好多的货物,在卸货的时候不好处理,所以对车顶的货物做了控制,也就是说 GET方法本身是不对url长度做限制的,真正限制url长度的是浏览器和web服务器本身。目前业界大部分的浏览器限制url长度为2K, 而服务器限制为64K ,这个不是定值,各有不同。

    以上只是表面层,那么更深一层的区别还是在于TCP层,真正的区别来了:

    GET请求只会产生一个TCP包,也就是说浏览器会把所有的请求数据(header和data)一起发出去,服务器响应200时成功

    POST 请求“可能” 会产生两个TCP包,第一次浏览器会先发送header,服务器响应100后,再次发送data

    也就是说GET只需一次就将货物送到,而POST 会先告诉服务器我要发送数据,然后再把数据送过去,所以在调用时间上POST要稍微慢一点

    那么是否可以把POST都换成GET呢?-----最好不要

    原因:

    1、在网络正常的情况下,一次调用跟两次调用基本无差别,就算是在网络较差的情况下,发送两次TCP包在数据完整性校验上有很大的优势

    2、上面说了POST可能会产生两个TCP包,这是根据浏览器而定的,firefox浏览器就只会发送一次。

    总结,GET 与 POST 在表现层并无差别,只是在TCP层存在一定的差异,各有各的实际用途,目的是将资源使用做到最优。

  • 相关阅读:
    【Nginx】Nginx性能优化及配置文件
    【算法】常见算法分类和思想
    【PHP】php位运算及其高级应用
    【数据结构】数据结构-图的基本概念
    【Redis】Redis缓存穿透解决方案之布隆过滤器
    【Linux】Linux系统5种IO模型
    【linux】/dev/null作用和/dev/random
    【Linux】Linux查找功能
    【算法】算法复杂度
    Docker Hub公共镜像仓库的使用
  • 原文地址:https://www.cnblogs.com/LeeForLeslie/p/6339746.html
Copyright © 2011-2022 走看看