form表单两种提交方式的不同

  我们在使用

表单的时候,最常用的提交方式就是get和post。我们都知道这两种方式最大的差别就是安全性,除此之外,它们还有哪些其他的区别,你知道吗?

  在表单中,method的提交方式有两种,分别是get请求和post请求。
  这两种请求方式分别对应HttpServlet中的doGet()doPost()方法(继承HttpServlet类并重写doGet()doPost()方法)。
  它们的区别如下:

1.参数传递的方式不同:

  • get请求相较于post请求来说,更加的简单直接,因为get请求是把参数放在HttpHead中的,也就是直接用”?”隔开拼接在url路径之后的,参数之间使用”&”来分隔开,所以get请求是没有请求包体的,参数都是明文显示的
  • Post请求并不是拼接在url之后的,它是将参数放在HttpBody(Http报文)中的,所以相较于可以直接在url栏中看到参数的get请求,post请求的参数是隐匿起来的

2.能够传递的数据量的不同:

  • get请求简单直接,但缺点也很明显,因为它是通过url提交的数据,所以其能传递的数据量和url的长度有直接关系。但从本质上来说,get请求是没有参数上限的,因为HTTP协议规范没有对其长度约束,之所以常说get请求有长度限制,是因为这个限制是特定浏览器和服务器对它的限制。IE的限制为2083字节(2K+25),其他浏览器没有规定,此时限制取决于操作系统能够支持多少
  • Post请求理论上来讲是不存在上限的,因为HTTP协议没有对post请求进行大小限制,所以无法说post请求最大限制是多少,而限制post请求的是服务器的处理能力

3.请求的安全性不同:

  • get请求无安全性可言:因为它的参数是直接拼接在url之后的明文,我们可以直接从地址栏或浏览历史记录中获取敏感信息,造成严重的密码泄露问题。除此之外,还可能会遭受Cross-site request forgery(跨站请求伪造)攻击。所以页面需要输入重要数据的时候,最好不要用get方式提交
  • Post请求相较于get请求来讲,是真正意义上的安全:它的数据都放在http报文中,所以从url地址栏和浏览器浏览历史记录中,是无法直接获取到密码等敏感信息的(除浏览器缓存)

4.数据编码格式的不同

  • get请求为表单默认的请求方式,当采用这种方式提交数据的时候,其url后的参数编码格式为ISO-8859-1,这个时候我们在Servlet中获取的数据就会出现乱码,所以通常我们会进行转码操作
  • Post请求虽然没有这个问题,但是我们在实际操作的时候,也会经常给它加上转码的操作以防万一

5.发送机制不同

  • get请求的发送机制是一种向服务器索取数据的请求机制
  • post请求的发送机制是一种向服务器提交数据的请求机制,这是其本质的区别。

6.页面刷新时有无提示的不同

  • 采用get请求的时候,如果我们在提交数据的时候刷新页面,则不会提示我们。
  • 采用post请求的时候,如果我们在提交数据的时候刷新页面,则会提示我们“数据已改变,是否重新提交表单”

之所以会出现提示,是因为在我们刷新页面的时候,浏览器会将数据通过HTTP报文偷偷发送给服务器;
而直接输入网址的话就相当于重新发送了一次请求,所以这个新的页面就不会再偷偷的发送HTTP报文给服务器了。

你可能感兴趣的:(form表单两种提交方式的不同)