关闭

GET和POST的区别

标签: webjava webgetpost
116人阅读 评论(0) 收藏 举报
分类:

原理性上的区别

HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET、POST、PUT、DELETE。URL全称是资源描述符,我们可以这么认为:一个URL地址,它用于描述网络上的一个资源,而HTTP的GET、POST、PUT、DELETE就对应着对这个资源的4个操作。所以GET和POST的第一个区别:GET一般用于获取/查询资源信息,POST一般用于更新资源信息。

1、根据HTTP规范,GET用于信息获取,而且应该是安全和幂等的,安全和幂等的意思是:

(1)所谓安全意味着该操作用于获取信息而不是修改信息,换句话说,GET请求一般不应该产生副作用,也就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改、增加数据,不影响资源的状态

(2)所谓幂等意味着对同一个URL的多个请求应该返回相同的结果

比如一个新闻网站,读者打开一个链接获取新闻应该使用GET实现

2、根据HTTP规范,POST表示可能修改服务器上的资源的请求,比如一个新闻网站,读者对新闻资源发表的评论应该通过POST实现,因为在评论提交之后站点的资源已经不同了,或者说是资源被修改了

另外还有很重要的一点,从浏览器发起一次HTTP请求:

1、一些静态资源比如.css文件、.js文件是很少发生变化的,让这些文件放在浏览器缓存里面,请求的时候从浏览器缓存里面拿这些资源而不去服务器上拿,可以有效地减轻服务端的压力,加快浏览器的访问速度

2、服务器响应完可能将一些资源放到客户端的浏览器缓存中

只有GET方式才能从缓存中存、取资源,POST方式则不可以。

 

事实说话:表象上的区别

说完原理性的区别,我们用事实说话,从表象上看一下GET和POST的区别,首先我写一个Servlet:

复制代码
public class GetAndPostServlet extends HttpServlet
{
    /**
     * 序列化
     */
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        System.out.println("Enter GetAndPostServlet.doGet()");
        String str = request.getParameter("a");
        System.out.println("a = " + str);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        System.out.println("Enter GetAndPostServlet.doPost()");
        String str = request.getParameter("a");
        System.out.println("a = " + str);
    }
}
复制代码

web.xml里面的Servlet配置就不放了,都会。

1、URL请求的方式为GET方式。我从浏览器导航栏中输入"http://localhost:8080/TestWeb/submitMethod",看一下打印结果:

Enter GetAndPostServlet.doGet()
a = null

2、表单默认提交方式为GET方式。我的jsp页面为:

复制代码
...
<body> <form action="submitMethod"> <input type="submit" value=" 提交 " /> </form> </body>
...
复制代码

控制台打印的内容为:

Enter GetAndPostServlet.doGet()
a = null

3、表单的action中?后面带了参数,只有POST方式可以取到。jsp页面不变,先让表单以GET方式提交,运行结果为:

Enter GetAndPostServlet.doGet()
a = null

如果我把表单提交方式改为POST的:

复制代码
...
<body> <form action="submitMethod?a=1" method="post"> <input type="submit" value=" 提交 " /> </form> </body>
...
复制代码

后台打印的结果为:

Enter GetAndPostServlet.doPost()
a = 1

4、表单提交,GET方式会把所有控件值都带在action后面,即使是password,也是明文形式的,POST方式则不会。我把jsp修改一下:

复制代码
...
<body> <form action="submitMethod?a=1" method="GET"> 姓名:<input type="text" name="name" /><br /> 密码:<input type="password" name="password" /><br /> 性别:<input type="radio" name="sex" value="0" />男&nbsp;&nbsp;&nbsp; <input type="radio" name="sex" value="1" />女<br /> 爱好:<input type="checkbox" name="hobby" value="0" />打球&nbsp;&nbsp;&nbsp; <input type="checkbox" name="hobby" value="1" />唱歌<br /> <input type="submit" value=" 提交 " /> </form> </body>
...
复制代码

页面上的表单这么写:

点一下提交,导航栏里面的URL为"http://localhost:8080/TestWeb/submitMethod?name=aaa&password=bbbccc&sex=0&hobby=0&hobby=1",看到即使是密文的密码,在URL里面也变成了明文了,原有的"a=1"并不出现在URL里面。

把表单给成POST的,点提交,导航栏里面的URL为"http://localhost:8080/TestWeb/submitMethod?a=1",action里面怎么样还是怎么样。

从这个角度说,说POST提交表单比GET方式提交表单更安全也是有道理的,因为GET方式提交的数据,表单参数是在URL中的,而POST方式提交的数据,表单参数是在请求体中的,可以这么证明这一点,F12查看请求信息,POST方式提交的时候:

Content-Length即请求体,现在是46,checkbox我只选一个的时候,Content-Length变成了35,而GET方式提交数据则没有Content-Length这个头信息,证明了POST方式提交的表单参数存放在HTTP BODY中。

 

0
0
查看评论

$_GET 和 $_POST 的区别

以下的是从网上总结的资料。因为网上的都是大同小异,千篇一律的。而且还有好多是错的。我也不敢保证我的一定是正确的。仅供自己参考使用吧。 <?php /** 都是传递表单的一种方式 只不过$_GET传递的话,会在信息栏显示表单信息,并且传送的数据一般小于2K, 安全性的 1. g...
  • xiao_tommy
  • xiao_tommy
  • 2016-11-16 09:41
  • 1194

深入解析Ajax($.post和$.get的主要区别)——系列(二)

深入解析Ajax
  • laijieyao
  • laijieyao
  • 2014-10-24 13:59
  • 17036

HTTP 协议中GET和POST到底有哪些区别

HTTP 定义了与服务器交互的不同方法,最常用的有4种,Get、Post、Put、Delete,如果我换一下顺序就好记了,Put(增),Delete(删),Post(改),Get(查),即增删改查,下面简单叙述一下, 1)      ...
  • wangzhilife
  • wangzhilife
  • 2013-10-08 16:40
  • 23866

GET和POST面试知识点

导读:大部分APP都依赖于网络通信,对于开发者来说,基于网络通信的开发无疑是必须掌握的。HTTP通信作为目前计算机主要的通信协议,是企业面试当中必问的。对于HTTP通信的概念,本文不作说明,我将在后续的文章中详细介绍。本文主要讲讲热点问题,就是HTTP网络请求中GET和POST方法的区别。 一...
  • gao1440156051
  • gao1440156051
  • 2016-08-16 09:23
  • 3549

GET和POST区别详解

1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。 2、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相...
  • tangxiangpi
  • tangxiangpi
  • 2009-03-16 18:47
  • 8591

http中post 和 get 请求方法区别

前言 做Web开发就一定会涉及到浏览器和服务器的交互,所以了解浏览器和服务器交互的方式就尤为重要。从接触B/S开始就已经接触到了get和post,但是对它们的了解确实不深入。在后来不断的做项目过程中,对它们不断接触中发现,以前的了解真的是太浅了。本篇博客就探讨一下,GET和POST的区别。 ...
  • wswit
  • wswit
  • 2016-03-01 22:06
  • 11196

$.get(),$.post(),$.ajax()的区别和联系

背景   软考之后,又投入到了项目当中。刚敲几行Web前端代码,就敲不下去了。之前也做过很长一段时间项目,本应该很熟练的啊!哎,都是不及时总结的原因,悔恨中……这不,又遇到了在MVC中传值问题。不会就查,所以查到了题目中的三种方法,然后哪种可以完成自己想要的功能,就用哪种,用的很随意,十分不专业...
  • u010924834
  • u010924834
  • 2015-06-05 16:50
  • 2139

关于post与get方法的区别

GET和POST有什么区别?及为什么网上的多数答案都是错的。      如果有人问你,GET和POST,有什么区别?你会如何回答? 我的经历      前几天有人问我这个问题。我说GET是用于获取数据的...
  • flytomoon8023
  • flytomoon8023
  • 2015-11-07 11:19
  • 4556

GET和POST提交数据方式的区别和使用

数据提交到服务器一般有两种方式,GET和POST。 GET的优点: 1.执行效率比POST高。 2.可以通过url传递数据,查找数据的时候就会体现到它的好处。 GET的缺点: 1.安全性很低,因为上传的数据都会显示在url上,所以一般用在上传无关紧要的数据上。 2.上传的数据量较小,一般...
  • qq_18297675
  • qq_18297675
  • 2016-07-08 15:29
  • 3792

HTTP请求中POST与GET的区别

一、原理区别 一般我们在浏览器输入一个网址访问网站都是GET请求;再FORM表单中,可以通过设置Method指定提交方式为GET或者POST提交方式,默认为GET提交方式。 HTTP定义了与服务器交互的不同方法,其中最基本的四种:GET,POST,PUT,DELETE,HEAD,其中GET和HE...
  • yipiankongbai
  • yipiankongbai
  • 2014-04-18 17:15
  • 99610
    个人资料
    • 访问:46548次
    • 积分:834
    • 等级:
    • 排名:千里之外
    • 原创:19篇
    • 转载:112篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论