讲一下 http get和 post请求的区别?

1、Get请求提交的数据会在地址栏显示出来,而post请求不会再地址栏显示出来.GET 提交,请求的数据会附在 URL 之后(就是把数据放置在 HTTP 协议头中),?分割 URL 和传输数据,多个参数用&连接;POST 提交:把提交的数据放置在 HTTP 包的包体中。 因此,GET 提交的数据会在地址栏中显示出来,而 POST提交,地址栏不会改变

2、传输数据的大小

http Get 请求由于浏览器对地址长度的限制而导致传输的数据有限制。而POST请求不会因为地址长度限制而导致传输数据限制。

3、安全性,POST 的安全性要比 GET 的安全性高。由于数据是会在地址中呈现,所以可以通过历史记录找到密码等关键信息。

根据这些信息,博主到网上查阅了更加详细的说明,现在分享给大家:



一、原理区别

一般我们在浏览器输入一个网址访问网站都是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 print?在CODE上查看代码片派生到我的代码片
  1. <method> <request-URL> <version>  
  2. <headers>  
  3.   
  4. <entity-body>  
<method> <request-URL> <version>
<headers>

<entity-body>

 

 

 

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

GET请求实例:

 

[plain] view plain copy print?在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  
GET http://weibo.com/signup/signup.php?inviteCode=2388493434
Host: weibo.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
POST请求实例:

 

 

[plain] view plain copy print?在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  
POST /inventory-check.cgi HTTP/1.1
Host: www.joes-hardware.com
Content-Type: text/plain
Content-length: 18

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 print?在CODE上查看代码片派生到我的代码片
  1. <version> <status> <reason-phrase>  
  2. <headers>  
  3.   
  4. <entity-body>  
<version> <status> <reason-phrase>
<headers>

<entity-body>

 

  博客部分资源来源于: https://www.cnblogs.com/wangli-66/p/5453507.html

猜你喜欢

转载自blog.csdn.net/qq_32575047/article/details/80163427