专栏/面试中get和post的区别

面试中get和post的区别

2022年12月16日 09:53--浏览 · --点赞 · --评论
野人李小白
粉丝:101文章:127

     

    1. get比post更不安全,因为参数直接暴露在URl中,所以不能用来传递敏感的信息。

    2. 对参数的数据类型,get只接受ASCLL字符,而post没有限制

    3. get在URl中传递的参数是有长度限制的,而post没有

    4. get请求会被浏览器主动cache,而post不会除非手动设置

    5. get在浏览器回退时无请求的,而post会再次请求

    6. get参数通过URl传递,post放在request body中

    7. get请求只能进行url编码,而post支持多种编码方式

    8. get比post更快

    常见误区

    误区1、get在URl中传递的参数是有长度限制的,而post没有

    首先,HTTP协议并未规定get和post的长度限制,get的最大长度限制是因为浏览器和web服务限制了URL的长度,不同的浏览器和web服务器,限制的最大长度不一样。

    即使get有长度限制,也是限制整个URL的长度,而不仅仅是参数值数据长度,就要看各个浏览器厂家的规定或者根据web服务器的处理能力来决定的。

    以下就是对各种浏览器和web服务器的最大处理能力做一些说明:

    • IE      (Browser):URL最大长度限制为2083个字符。

    • Firefox      owser):对于Firefox浏览器URL的长度限制为65,536个字符。

    • afari      (Browser):URL最大长度限制为 80,000个字符。

    • Opera      (Browser):URL最大长度限制为190,000个字符。

    • oogle      (chrome):URL最大长度限制为8182个字符。

    • che      (Server):能接受最大url长度为8,192个字符。

    • Microsoft Internet      Information Server(IIS):能接受最大url的长度为16,384个字符。

    为了符合所有标准,url的最好不好超过最低标准的2083个字符(2k+35)。当然在做客户端程序时,url并不展示给用户,只是个程序调用,这时长度只受web服务器的影响了。对于中文的传递,一个汉字最终编码后的字符长度是9个字符。

    最常见的form表单,浏览器默认的form表单,默认的content-type是application/x-www-form-urlencoded,提交的数据会按照key value的方式,jquery的ajax默认的也是这种content-type。当然在post方式中添加querystring一定是可以接收的到,但是在get方式中加body参数就不一定能成功接收到了。

    误区2、post比get更安全

    这里的安全是相对性,并不是真正意义上的安全,通过get提交的数据都将显示到url上,页面会被浏览器缓存,其他人查看历史记录会看到提交的数据,而post不会。另外get提交数据还可能会造成Cross-site request forgery攻击。

    误区3、为什么get比post快

    post请求包含更多的请求头,(如content-type),但这影响不了多少,最重要的是post在真正接受接受数据之前会先将请求头发送给服务器进行确认,然后才是真正的发送数据。

    看看post的请求过程:

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

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

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

    • 服务器返回100 Continue响应

    • 浏览器发送数据

    • 服务器返回200 OK响应

    get的请求过程:

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

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

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

    • 服务器返回200 OK响应

    误区4、GET产生一个TCP数据包;POST产生两个TCP数据包。

    我在网上查了查,千万不要被某些内容引导你。

    GET和POST还有一个重大区别,简单的说:

    GET产生一个TCP数据包;POST产生两个TCP数据包。

    长的说:

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

    而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

    这个结论是错误的。

    而实际上,不论哪一种浏览器,在发送 POST 的时候都没有带 Expect 头,server 也自然不会发 100 continue。通过抓包发现,尽管会分两次,body 就是紧随在 header 后面发送的,根本不存在『等待服务器响应』这一说。

    注:误区4观点参考网上大神结论。

    误区5、get和post都符合安全性和幂等性

    幂等性:就是对数据库的操作次数,一次或者多次操作获得的结果是一样的,则认为符合幂等性。

    安全性:对数据库的操作没有改变数据库中的数据,则认为符合安全性。

    从数据库层面来看,GET请求方式是做查询操作,因此不会改变数据库中原有的数据,认为符合安全性。事实上GET请求可能会出现多次请求的结果(例如在两次请求中间对数据库中的数据作了更改),从这来说是不符合幂等性的定义,但是因为GET请求知识查询数据库,不会对数据库做任何更改,因此也认为是幂等的。

    POST请求方式是既不幂等又不安全,首先POST请求方式往数据库中提交数据的,因此会改变数据库中的数据。其次,POST请求方式每次获得的结果都有可能不一样,因为POST请求是作用在上一级的URL上的,则每一次请求都会添加一份新资源(这也是POST和PUT方式的最大区别,PUT方式是幂等的)。

    赶紧学,我们不希望下次见到你还是那些老套的区别,我们只想简单的知道你到底对get和post有没有去深入的了解。

图片

     


投诉或建议

玻璃钢生产厂家梅州人物玻璃钢雕塑浙江商场美陈供货商台州欧式玻璃钢雕塑优势正宗玻璃钢雕塑在线咨询玻璃钢蓝精灵雕塑工厂商场美陈打卡周口玻璃钢马雕塑石河子商场美陈深圳室内商场美陈销售盘锦玻璃钢雕塑生产厂家广州玻璃钢雕塑 欧式园林北京玻璃钢雕塑供应商玻璃钢公园雕塑看邳州玻璃钢花盆花器玻璃钢长颈鹿雕塑玻璃钢雕塑临沂观云雕塑江阴商场春节美陈商场美陈广告企划培训课程清远商场装饰玻璃钢人物雕塑宝鸡标牌玻璃钢雕塑通山玻璃钢造型雕塑江苏省玻璃钢雕塑定制沈阳动物玻璃钢雕塑生产厂家和田商场美陈淄博玻璃钢仿真水果雕塑价格玻璃钢做的雕塑有毒吗天津景区玻璃钢雕塑图片房山玻璃钢雕塑商场美陈 直播户外玻璃钢雕塑服务电话香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化