javaweb学习总结(八)——GET和POST的区别
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javaweb学习总结(八)——GET和POST的区别,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3978字,纯文字阅读大概需要6分钟。
内容图文
![javaweb学习总结(八)——GET和POST的区别](/upload/InfoBanner/zyjiaocheng/853/1de707d6745148ea9c67b73642be979f.jpg)
原理性上的区别
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" />男
<input type="radio" name="sex" value="1" />女<br />
爱好:<input type="checkbox" name="hobby" value="0" />打球
<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中。
内容总结
以上是互联网集市为您收集整理的javaweb学习总结(八)——GET和POST的区别全部内容,希望文章能够帮你解决javaweb学习总结(八)——GET和POST的区别所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。