趁热打铁!HTTPGet与HTTPPost的区别详解_其它综合

来源:脚本之家  责任编辑:小易  

   Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认 为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。   1 .根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。   (1).所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。   * 注意:这里安全的含义仅仅是指是非修改信息。   (2).幂等的意味着对同一URL的多个请求应该返回同样的结果。这里我再解释一下幂等 这个概念:   幂等 (idempotent、idempotence)是一个数学或计算机学概念,常见于抽象代数中。   幂等有一下几种定义:   对于单目运算,如果一个运算对于在范围内的所有的一个数多次进行该运算所得的结果和进行一次该运算所得的结果是一样的,那么我们就称该运算是幂等的。比如绝对值运算就是一个例子,在实数集中,有abs(a)=abs(abs(a))。   对于双目运算,则要求当参与运算的两个值是等值的情况下,如果满足运算结果与参与运算的两个值相等,则称该运算幂等,如求两个数的最大值的函数,有在在实数集中幂等,即max(x,x) = x。   看完上述解释后,应该可以理解GET幂等的含义了。   但在实际应用中,以上2条规定并没有这么严格。引用别人文章的例子:比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操 作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。从根本上说,如果目标是当用户打开一个链接时,他可以确信从自身的角度来看没有改变资源即可。   2 .根据HTTP规范,POST表示可能修改变服务器上的资源的请求。继续引用上面的例子:还是新闻以网站为例,读者对新闻发表自己的评论应该通过POST实现,因为在评论提交后站点的资源已经不同了,或者说资源被修改了。   上面大概说了一下HTTP规范中GET和POST的一些原理性的问题。但在实际的做的时候,很多人却没有按照HTTP规范去做,导致这个问题的原因有很多,比如说:   1 .很多人贪方便,更新资源时用了GET,因为用POST必须要到FORM(表单),这样会麻烦一点。   2 .对资源的增,删,改,查操作,其实都可以通过GET/POST完成,不需要用到PUT和DELETE。   3 .另外一个是,早期的Web MVC框架设计者们并没有有意识地将URL当作抽象的资源来看待和设计,所以导致一个比较严重的问题是传统的Web MVC框架基本上都只支持GET和POST两种HTTP方法,而不支持PUT和DELETE方法。   * 简单解释一下MVC:MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。   以上3点典型地描述了老一套的风格(没有严格遵守HTTP规范),随着架构的发展,现在出现REST(Representational State Transfer),一套支持HTTP规范的新风格,这里不多说了,可以参考《RESTful Web Services》。   说完原理性的问题,我们再从表面现像上面看看GET和POST的区别:   1 .GET请求的数据会附在URL之后(就是 把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd& password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空 格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以 16进制表示的ASCII。   POST把提交的数据则放置在是HTTP包的包体中。   2 ."GET方式提交的数据最多只能是1024字节,理论上POST没有限制,可传较大量的数据,IIS4中最大为80KB,IIS5中为100KB"??!   以上这句是我从其他文章转过来的,其实这样说是错误的,不准确的:   (1).首先是"GET方式提交的数据最多只能是1024字节",因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了。而实际上,URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。   注意这是限制是整个URL长度,而不仅仅是你的参数值数据长度。[见参考资料5]   (2).理论上讲,POST是没有大小限制的,HTTP协议规范也没有进行大小限制,说“POST数据量存在80K/100K的大小限制”是不准确的,POST数据是没有限制的,起限制作用的是服务器的处理程序的处理能力。   对于ASP程序,Request对象处理每个表单域时存在100K的数据长度限制。但如果使用Request.BinaryRead则没有这个限制。   由这个延伸出去,对于IIS 6.0,微软出于安全考虑,加大了限制。我们还需要注意:   1).IIS 6.0默认ASP POST数据量最大为200KB,每个表单域限制是100KB。   2).IIS 6.0默认上传文件的最大大小是4MB。   3).IIS 6.0默认最大请求头是16KB。   IIS 6.0之前没有这些限制。[见参考资料5]   所以上面的80K,100K可能只是默认值而已(注:关于IIS4和IIS5的参数,我还没有确认),但肯定是可以自己设置的。由于每个版本的IIS对这些参数的默认值都不一样,具体请参考相关的IIS配置文档。   3 .在ASP中,服务端获取GET请求参数用 Request.QueryString,获取POST请求参数用Request.Form。在JSP中,用request.getParameter (/"XXXX/")来获取,虽然jsp中也有request.getQueryString()方法,但使用起来比较麻烦,比如:传一个 test.jsp?name=hyddd&password=hyddd,用request.getQueryString()得到的是: name=hyddd&password=hyddd。在PHP中,可以用$_GET和$_POST分别获取GET和POST中的数据,而$ _REQUEST则可以获取GET和POST两种请求中的数据。值得注意的是,JSP中使用request和PHP中使用$_REQUEST都会有隐患, 这个下次再写个文章总结。   4 .POST的安全性要比GET的安全性 高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的Security 的含义,比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存,(2)其他人查看浏览器的历史纪录,那么 别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击。   总结一下,Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为"GET",实质上,GET和POST只是发送机制不同,并不是一个取一个发!www.zgxue.com防采集请勿采集本网。

今天在老师工作室做项目的时候,突然看到一个页面用了2种不同的传值类型,突然有了兴趣,想弄明白本质的区别,虽然以前用的知道2种的用法,但是还是云里雾里的,下面是那位大神的文章:

AndroidHTTPClient是android自己优化过的Http请求,其他的是appach一类提供的http请求包,都是java的,相比来说AndroidHTTPClient会优化过 会好一点

GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。

name. * Returns null if there is no session or if the session has no such attribute. * Does not create a new session if none has existed before! * @param request current HTTP r

最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。

2)GET请求的参数在HTTP中是通过url传递的,POST请求的数据是通过requestbody体传递的 3)GET请求资源再服务器上能够缓存,而POST就不能够了 4)GET请示的参数的数据

你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。

url 后,数据都会直接显示在 url 上,就像用户点击一个链接一样;Post 方法通过 HTTP post QueryString 来取得变量的值;而 Post 方式通过RequestForm 来访问提交的内容; Get 方

当你在面试中被问到这个问题,你的内心充满了自信和喜悦。

p.open "GET",url,false ----设置http对象打开方式 GET方式,URL[连接页面 2)。 与UBOUND相对应的是另外一个函数:LBOUND,它返回数组的最小下标。与UBO

你轻轻松松的给出了一个“标准答案”:

我的curl里用 curl_setopt($this->_ch, CURLOPT_SSL_VERIFYPEER, false ); curl_setopt($this->_ch, CURLOPT_SSL_VERIFYHOST, false ); 这网站伺服器回你 http_code

GET在浏览器回退时是无害的,而POST会再次提交请求。

1:对现有资源的解释 2:向电子公告栏、新闻组、邮件列表或类似讨论组发信息。 3:提交数据块 4:通过附加操作来扩展数据库 从上面描述可以看出,Get是向服务器发索取数

GET产生的URL地址可以被Bookmark,而POST不可以。

1.GET方法 GET方法提交数据不安全,数据置于请求行,客户端地址栏可见; GET方法提交的数据大小限制在255个字符之内 GET方法不可以设置书签 2.POST方法 POST方

GET请求会被浏览器主动cache,而POST不会,除非手动设置。

1.GET 方法 GET 方法提交数据不安全,数据置于请求行,客户端地址栏可见; GET 方法提交的数据大小限制在255 个字符之内 GET 方法不可以设置书签 2.POST 方法 POS

GET请求只能进行url编码,而POST支持多种编码方式。

POST都由HTTP请求头组成,这些请求头定义了客户端从服务器请求了什么。HTTP:定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST. HTTP-GET和HTTP-P

GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

列客户端程序使用 HTTP 协议与服务器交互情况用 GET POST 式现流行 WebService 通 HTTP 协议交互使用 POST 与稍所同 WebService 提交数据内容接收数据内容都使用

GET请求在URL中传送的参数是有长度限制的,而POST么有。

; HttpGet getMethod = new HttpGet(baseUrl + "?" + param);//将URL与参数拼 ; } catch (IOException e) { e.printStackTrace(); } 2. POST方式 方式传递参数 //和GET方

对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

则您就可以快速地解决您的项目版本与服务器的项目版本之间的差异。当您签入自己的挂起的更改时,可以避免做出可能不容易与服务器协调的更改。 在 get 操作期间,如果您

GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

1.GET 方法 GET 方法提交数据不安全,数据置于请求行,客户端地址栏可见; GET 方法提交的数据大小限制在255 个字符之内 GET 方法不可以设置书签 2.POST 方法 POST 方法

GET参数通过URL传递,POST放在Request body中。

首先,提醒你一点: 你定义的函数与你调用的时候,最好大小写保持一致,大写就大写,小写就小写 其次,你应该把错误信息发出来 最后,如果说没有错误信息的话,你应该在代码中

(本标准答案参考自w3schools)

“很遗憾,这不是我们要的回答!”

请告诉我真相。。。

如果我告诉你GET和POST本质上没有区别你信吗?

让我们扒下GET和POST的外衣,坦诚相见吧!

GET和POST是什么?HTTP协议中的两种发送请求的方法。

HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。

HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。

那么,“标准答案”里的那些区别是怎么回事?

在我大万维网世界中,TCP就像汽车,我们用TCP来运输数据,它很可靠,从来不会发生丢件少件的现象。但是如果路上跑的全是看起来一模一样的汽车,那这个世界看起来是一团混乱,送急件的汽车可能被前面满载货物的汽车拦堵在路上,整个交通系统一定会瘫痪。为了避免这种情况发生,交通规则HTTP诞生了。HTTP给汽车运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,HTTP规定,当执行GET请求的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以方便记录。如果是POST请求,就要在车上贴上POST的标签,并把货物放在车厢里。当然,你也可以在GET的时候往车厢内偷偷藏点货物,但是这是很不光彩;也可以在POST的时候在车顶上也放一些数据,让人觉得傻乎乎的。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。

但是,我们只看到HTTP对GET和POST参数的传送渠道(url还是requrest body)提出了要求。“标准答案”里关于参数大小的限制又是从哪来的呢?

在我大万维网世界中,还有另一个重要的角色:运输公司。不同的浏览器(发起http请求)和服务器(接受http请求)就是不同的运输公司。 虽然理论上,你可以在车顶上无限的堆货物(url中无限加参数)。但是运输公司可不傻,装货和卸货也是有很大成本的,他们会限制单次运输量来控制风险,数据量太大对浏览器和服务器都是很大负担。业界不成文的规定是,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。超过的部分,恕不处理。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器直接忽略,所以,虽然GET可以带request body,也不能保证一定能被接收到哦。

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

你以为本文就这么结束了?

我们的大BOSS还等着出场呢。。。

这位BOSS有多神秘?当你试图在网上找“GET和POST的区别”的时候,那些你会看到的搜索结果里,从没有提到他。他究竟是什么呢。。。

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

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

长的说:

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

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

也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

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

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

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

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

现在,当面试官再问你“GET与POST的区别”的时候,你的内心是不是这样的?

看了上面大神的形象概述,我相信大家心里都有了自己的看法与理解,首先这位大神通过汽车的模型形象的描述了一个抽象的数据传参的过程,也许GET看起来比POST更加裸露,直接暴露在url中,甚至不是那么安全,而POST虽说是比较安全,但其实并非说POST比GET更加好用,而是各有个的优点,GET方法犹如KCF中的汉堡方便快捷还好吃,而POST则像家中小菜虽然费时费力,但能使你更加的放心

到此这篇关于趁热打铁!HTTPGet与HTTPPost的区别详解的文章就介绍到这了,更多相关HTTPGet与HTTPPost 区别内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网! 您可能感兴趣的文章:HTTP请求 GET与POST方法的区别HttpRequest Get和Post调用其他页面的方法HTTP中get和post的区别详解都2019年了,还问http中GET和POST的区别

这些都不是android特有的,java里面一直以来都有,分下类的话,前两个是server端的,后两个是client端的,其中,httpservletrequest是在server端用来取http请求发过来的数据,比如header,parameter等等。httpservletresponse是server端用来给client端返回数据,即response。httpget是client端用来发送http协议的get请求。httppost是client端用来发送http协议的post请求。具体的看javadoc,不过建议你从网络基础知识学起内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • rpc、rmi、soap的区别详解
  • 大数据helloworld-flink实现wordcount
  • delphi 本地路径的创建、清空本地指定文件夹下的文件
  • dedecms 5.7 sp1远程文件包含漏洞(cve-2015-4553)
  • 百度hi qq和msn 阿里旺旺贸易通msn在线客服在线聊天代码
  • 使用 ffmpeg 命令拼接mp3音频文件异常问题及解决方法
  • delphi使用chilkat 组件和库从sftp下载文件的方法
  • git撤销&回滚操作(git reset 和 get revert)
  • hadoop框架起步之图解ssh、免密登录原理和实现方法
  • 人人都能看懂的 6 种限流实现方案(纯干货)
  • android中httpservletrequest、hettpservletresponse、 httpget 、...
  • HTTP中Get与Post的区别
  • 我用android写http请求 HttpGet request = new HttpGet(url); 但是...
  • httpResponse = HttpClient.execute(httpGet);静态与非静态错误
  • Android:HTTPClient的HTTPGet与HTTPPost与HttpURPConnec...
  • HttpSession session = request.getSession() 与HttpSession ses...
  • http协议中post与get有什么区别
  • HTTP协议传输中GET方式与POST方式区别
  • getHTTPPage(url) 什么意思
  • HTTP.get 与 open-url 的结果为什么不一样
  • http 的get方法与 post方法有何区别
  • HTTP协议请求方法GET与POST的区别?
  • HTTP 协议请求方法GET 与POST 的区别?
  • 求http:get/post区别?
  • vb.net/.net怎样使用http协议的get和post?
  • android中http get请求总是超时怎么办
  • 关于http协议的get命令的用法
  • HTTP 协议请求方法GET 与POST 的区别?
  • getHTTPPage(url) 求解 多谢了
  • 为什么android httpURLConnection get得到的不是页面源码
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全javascriptasp.netphp编程ajax相关正则表达式asp编程jsp编程编程10000问css/htmlflex脚本加解密web2.0xml/rss网页编辑器相关技巧安全相关网页播放器其它综合dart首页都2019年了,还问http中get和post的区别rpc、rmi、soap的区别详解大数据helloworld-flink实现wordcountdelphi 本地路径的创建、清空本地指定文件夹下的文件dedecms 5.7 sp1远程文件包含漏洞(cve-2015-4553)百度hi qq和msn 阿里旺旺贸易通msn在线客服在线聊天代码使用 ffmpeg 命令拼接mp3音频文件异常问题及解决方法delphi使用chilkat 组件和库从sftp下载文件的方法git撤销&回滚操作(git reset 和 get revert)hadoop框架起步之图解ssh、免密登录原理和实现方法人人都能看懂的 6 种限流实现方案(纯干货)最新idea2020注册码永久激活(激活intellij idea2020永久破解,亲测intellij idea激活码获取方法(i删除svn三种方法delsvn(windows+c/s和b/s两种架构的概念、区别和intellij idea 2020最新注册码(亲网址(url)支持的最大长度是多少5个linux平台程序员最爱的开发工url中斜杠/和反斜杠\的区别小结ie cookie文件格式说明mybatiscodehelper-pro插件破解版详细教程利用二进制文件安装etcd的教程详解阿里巴巴开源 dragonwell jdk 最新版本 8matlab中乘法“*”和点乘“.*”;除法“/程序员的新年祝福 happy new year微信小程序应用号开发体验sha:安全散列算法简析 附实例删除svn三种方法delsvn(windows+linux)8种类型极品程序员,不知你属于哪一种?
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved