HTTP请求中POST与GET的区别

转载 2016年08月22日 14:08:39

转载网址:http://blog.csdn.net/yipiankongbai/article/details/24025633


一、原理区别

一般我们在浏览器输入一个网址访问网站都是GET请求;再FORM表单中,可以通过设置Method指定提交方式为GET或者POST提交方式,默认为GET提交方式。

HTTP定义了与服务器交互的不同方法,其中最基本的四种:GET,POST,PUT,DELETE,HEAD,其中GET和HEAD被称为安全方法,因为使用GET和HEAD的HTTP请求不会产生什么动作。不会产生动作意味着GET和HEAD的HTTP请求不会在服务器上产生任何结果。但是安全方法并不是什么动作都不产生,这里的安全方法仅仅指不会修改信息。

根据HTTP规范,POST可能会修改服务器上的资源的请求。比如CSDN的博客,用户提交一篇文章或者一个读者提交评论是通过POST请求来实现的,因为再提交文章或者评论提交后资源(即某个页面)不同了,或者说资源被修改了,这些便是“不安全方法”。



二、表现形式区别

搞清楚了两者的原理区别后,我们来看一下在实际应用中的区别。

首先,我们先看一下HTTP请求的格式:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <method> <request-URL> <version>  
  2. <headers>  
  3.   
  4. <entity-body>  


在HTTP请求中,奇异行必须是一个请求行,包括请求方法,请求URL,报文所用HTTP版本信息。紧接着是一个herders小节,可以有零个或一个首部,用来说明服务器要使用的附加信息。在首部之后就是一个空行,最后就是报文实体的主体部分,包含一个由任意数据组成的数据块。但是并不是所有的报文都包含实体的主体部分。

GET请求实例:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. GET http://weibo.com/signup/signup.php?inviteCode=2388493434  
  2. Host: weibo.com  
  3. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8  

POST请求实例:

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. POST /inventory-check.cgi HTTP/1.1  
  2. Host: www.joes-hardware.com  
  3. Content-Type: text/plain  
  4. Content-length: 18  
  5.   
  6. item=bandsaw 2647  

接下来看看两种请求方式的区别:

1、GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。

POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数据。

因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。


2、传输数据的大小

在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。

对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。


3、安全性

POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过GET请求,用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击


4、HTTP中的GET,POST,SOAP协议都是在HTTP上运行的


三、HTTP响应

HTTP响应报文的格式

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <version> <status> <reason-phrase>  
  2. <headers>  
  3.   
  4. <entity-body>  


status,状态码描述了请求过程中发生的情况

reson-phrase 是数字状态码的可读版本

常见的状态码以及含义如下:

200 OK 服务器成功处理请求

301/302 Moved Permanently(重定向)请求的URL已移走。响应报文中应该包含一个Location URL,说明资源现在所处的位置

304 Not Modified(未修改) 客户的缓存资源是最新的,要客户端使用缓存内容

404 Not Found 未找到资源

501 Internal Server Error 服务器遇到错误,使其无法对请求提供服务

HTTP响应示例

HTTP/1.1 200 OK

[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. Content-type: text/plain  
  2. Content-length: 12  
  3.   
  4. Hello World!  


[plain] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <pre code_snippet_id="300067" snippet_file_name="blog_20140418_2_9713022" name="code" class="plain"><pre code_snippet_id="300067" snippet_file_name="blog_20140418_2_9713022"></pre>  
  2. <pre></pre>  
  3. <pre></pre>  
  4. <pre></pre>  
  5. <pre></pre>  
  6. <pre></pre>  
  7. <pre></pre>  
  8. <pre></pre>  
  9.      
  10. </pre>  
13

HTTP请求中POST与GET的区别

一、原理区别 一般我们在浏览器输入一个网址访问网站都是GET请求;再FORM表单中,可以通过设置Method指定提交方式为GET或者POST提交方式,默认为GET提交方式。 HTTP定义了与服务器...
  • yipiankongbai
  • yipiankongbai
  • 2014年04月18日 17:15
  • 99598

http中post 和 get 请求方法区别

前言 做Web开发就一定会涉及到浏览器和服务器的交互,所以了解浏览器和服务器交互的方式就尤为重要。从接触B/S开始就已经接触到了get和post,但是对它们的了解确实不深入。在后来不断的做项目过程中...
  • wswit
  • wswit
  • 2016年03月01日 22:06
  • 11184

HTTP请求方式GET和POST的区别详解

HTTP请求方式GET和POST的区别详解 标签: soap服务器encodingwindowsurl浏览器 2012-08-18 16:24 937人阅读 评论(0) 收藏 举报 ...
  • LoveStudy_girl
  • LoveStudy_girl
  • 2016年11月09日 08:40
  • 2626

http请求的post和get方式的区别

在网上找了post和get请求方式的不同和区别,感觉这个比较好,转载过来和大家分享! Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。UR...
  • qq_36687674
  • qq_36687674
  • 2017年08月11日 10:41
  • 318

get与post的区别get请求方式与post请求方式的区别

Get和Post的区别 1. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,在URL中可以看到。 2.post是通过HTTPPOST机制,将表单内各个字段与其内容放置在HTML...
  • dianzijinglin
  • dianzijinglin
  • 2016年08月03日 16:59
  • 1613

C#的HTTP协议中POST与GET的区别

C#的HTTP协议中POST与GET的区别 引言 HTTP协议我想任何IT人士都耳熟能详了,大家都能说出个所以然来。但是如果我问你HTTP协议的请求方法有哪些?POST与GET的差异?GET或...
  • u010678947
  • u010678947
  • 2014年07月26日 11:47
  • 1769

post 请求与get请求的区别?

Java面试题老被问道这个问题,之前也没想起来整理,今天看了一下servlet教程看到了部分的内容,想了起来,就去截取了一些信息,觉得不对的可以及时提出来。get请求的参数一般放在url中,但是浏览器...
  • z1729734271
  • z1729734271
  • 2016年08月28日 12:48
  • 1210

【JavaScript】2.Http中Get与Post两种请求方式的差异

Get和Post在面试中一般都会问到,一般的区别: (1)post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中) (2)post发送的数据更大(get有url...
  • benben513624
  • benben513624
  • 2017年04月26日 12:40
  • 727

Android Http方法:Get请求与Post请求的区别及实例示范

Http方法:Get请求与Post请求的区别 Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求 Get是获取信息,而不是修改信息,类似数据库查询功能一样,数据不会被修改...
  • chenlove1
  • chenlove1
  • 2014年04月30日 09:54
  • 7259

http协议中get和post的区别(转)

HTTP请求格式 GET 和 POST的区别 [] 在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着...
  • hu_jiangan
  • hu_jiangan
  • 2015年10月15日 14:04
  • 1134
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HTTP请求中POST与GET的区别
举报原因:
原因补充:

(最多只允许输入30个字)