zoukankan      html  css  js  c++  java
  • 浅谈get和Post(整理于知乎多篇回答,比较适合新人)

    我是写.net的,最近客户跟我说可能要搞web API,老大让我看看http。一说http必然要扯到get和post,在网上翻阅了很多回答和博客,最后整理出此文,如有不当之处,还望指正!感激不尽!

    先谈一下什么是表单,我们来看百度的官方解释:

    表单在网页中主要负责数据采集功能。一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法。 表单域:包含了文本框、密码框、隐藏域多行文本框复选框单选框、下拉选择框和文件上传框等。 表单按钮:包括提交按钮、复位按钮和一般按钮;用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。

    如需知详情,请移步百度百科:https://baike.baidu.com/item/%E8%A1%A8%E5%8D%95/5380322?fr=aladdin

    以下是知乎网友关于get,post的回答整理

    get 与 post的区别?

    1.GET请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连,

    POST把提交的数据则放置在是HTTP包的包体中。

    2.GET的长度受限于url的长度,而url的长度限制是特定的浏览器和服务器设置的,理论上GET的长度可以无限长。

    3.POST是没有大小限制的,HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力

    4.在ASP中,服务端获取GET请求参数用Request.QueryString,获取POST请求参数用Request.Form。

    5.POST的安全性要比GET的安全性高

    application json 与form表单的区别?

    瀏覽器默認的提交方式就是表單。首先,Content-Type 被指定为 application/x-www-form-urlencoded,jQuery的Ajax请求默认方式,其次,数据以键值对形式?key1=value1&key2=value2的方式发送到服务器

    1、post和get的选择?

    私密性的信息请求使用post。

    查询信息和可以想要通过url分享的信息使用get。



    作者:技能树IT修真院
    链接:https://www.zhihu.com/question/28586791/answer/621747763
    来源:知乎


    说到底,我觉得是要正确理解“GET的页面”和“POST的页面”的区别。

    要说清楚这两个区别,首先要说清楚一个概念——你输入内容的页面和没输入内容的页面是两种东西。

    当你进入一个有表单的页面时,假如其URL是"",你把这个URL分享给朋友,朋友进入这个页面看到的所有内容将和你看到的一摸一样;

    此时你在表单里输入你的名字,没有提交,URL还是“www.haha.com”,此时有两种情况:

    1.这个表单的method值是POST。你把这个URL分享给朋友,朋友看到的是和你不一样的页面(页面表单里没有你的名字,除此之外一摸一样)。

    2.这个表单的method值是GET。你把这个URL分享给朋友,朋友看到的页面和你的还是不一样(GET能本地缓存(应该没有“联网缓存”)——在某些应用里,关闭网页后再次进入,你会看到一个有你名字的表单。QQ空间网页版就是这样,你在说说处输入内容但不发布,重新打开时你还能看到那个没发布的内容。当然,你清除浏览器的Cookie和网站记录后再次进入这个页面就看不到未发布的内容了)。

    现在,你把表单提交了(注意,有时候你可能都不知道自己提交了这个表单,比如百度搜索里,回车就是提交~),有两种情况:

    1.表单的method是POST,URL变成了“”。此时页面被刷新,你的数据被提交服务器脚本返回给你一个新页面。此时就算你“后退”到“www.haha.com”也看不到你原来输入了内容的那个表单了;你把这个网页分享给朋友,朋友是看不到你的页面的(你这个页面必须是提交相同的数据后才能看到),这也是为什么你登陆微博后,直接复制地址栏的URL发给别人,别人看不到这个网页的原因。

    2.表单的method是GET,URL变成了“"haha"&.....”。此时页面被刷新,同样得到一个新页面。如果你“后退”,你能看到原来输入了内容的表单;你可以保存为书签,关闭后再次打开能看到保存书签时的网页(因为URL里有你发给服务器脚本的所有数据,就相当于再次发送给服务器脚本相同的数据,返回的页面自然也就一样——服务器脚本处理这些数据得到的结果还是一样的话);你可以把这个页面分享给朋友,朋友打开后能看到一摸一样的页面(理由和书签里说的一样)

     

    作者:坑坑
    链接:https://www.zhihu.com/question/28586791/answer/276679109
    来源:知乎

     


    大家现在度娘一下,查得最多的区别,可能就是:
    “Get把参数写在URL中,Post通过请求体来传参的”
    “GET没有POST安全,因为Get参数直接显示在URL上”
    “Get请求在URL中传送的参数是有长度限制的,而POST是没有的”
    但是,真相是这样的吗?!!!真相永远只有一个!!!

    1、GET和POST与数据如何传递没有关系??


    GET和POST是由HTTP协议定义的。那么使用哪个方式与应用层的数据如何传输是没有相互关系的。从而,HTTP就没有要求,POST一定要放到请求体里面,GET就一定要放到URL里面。
    在HTML标准中,是有着类似的定义。但这只是HTML标准对HTTP协议的用法的约定。也就是规范上说,无区别。
    那么,这个说法是从何而来的呢?是因为有各种浏览器等软件的实现,就变成了我们现在熟知的现象,GET要用URL传参,POST用body传参。


    2、HTTP协议对GET和POST有没有对长度的限制??


    HTTP协议明确地指出了,HTTP请求头和请求体都没有长度的要求。
    而对于URL长度上的限制,有两方面的原因造成:


    1、浏览器。
    据说IE对URL长度会限制在2048个字符内。但是就我所知,firefox是支持10W以上的长度。


    2、服务器。
    服务器处理超长的URL本身就是一种负担,更何况遭受恶意攻击呢?
    因此,多数服务器出于安全、稳定等多方面的考虑,会给URL长度加限制。但是这个限制是针对所有HTTP请求的,与GET、POST没有关系。


    3、安全不安全和GET、POST有没有关系??
    这个问题,首先你得确认面向对象。
    举个例子:
    1、你现在要让我爸爸妈妈去看看这个URL,你觉得安全吗?
    2、你现在要让一个刚入门的初级功能测试工程师去测试这个链接,你觉得安全吗?
    3、你现在要让安全测试工程师去看看get请求,你觉得安全吗?
    所以,针对不同的人群,安全的定义就会不一样。


    “如果你愿意一层一层一层的剥开我的心 ,你会发现你会讶异 ,你是我最压抑 ,最深处的秘密 ”
    把Get和Post剥开后,他们的本质上就是TCP链接,并无差别。


    只是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。


    那么真相到底是什么呢?


    Get产生一个TCP数据包;Post产生两个TCP数据包。

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

    作者:柠檬班软件测试
    链接:https://www.zhihu.com/question/28586791/answer/571627708
    来源:知乎
     

    GET幂等,POST不幂等

    幂等是指同一个请求方法执行多次和仅执行一次的效果完全相同。

    1.按照RFC规范,PUT,DELETE和安全方法都是幂等的。虽说是规范,但服务端实现是否幂等是无法确保的。

    2.引入幂等主要是为了处理同一个请求重复发送的情况,比如在请求响应前失去连接,如果方法是幂等的,就可以放心地重发一次请求。这也是浏览器在后退/刷新时遇到POST会给用户提示的原因:POST语义不是幂等的,重复请求可能会带来意想不到的后果。

    3.比如在微博这个场景里,GET的语义会被用在「看看我的Timeline上最新的20条微博」这样的场景,而POST的语义会被用在「发微博、评论、点赞」这样的场景中。



    作者:silence
    链接:https://www.zhihu.com/question/28586791/answer/153556269
    来源:知乎

     
  • 相关阅读:
    Ubuntu安装搜狗输入法
    Ubuntu 命令
    ubuntu忽然不能登录,输入密码正确一直返回登录界面
    chmod用法
    Maven学习(六)maven使用中遇到的坑
    win10下装mysql-5.7.18-winx64
    Maven学习(五)使用Maven构建多模块项目
    Maven学习(四)eclipse创建maven项目
    Maven学习(三)maven原理概念详述
    Struts2+Hibernate4+Spring4框架整合搭建Java项目原型
  • 原文地址:https://www.cnblogs.com/jyj666/p/12565634.html
Copyright © 2011-2022 走看看