get和post提交方式的异同

xiaoxiao2021-03-01  17

前言:

做Web开发就一定会涉及到浏览器和服务器的交互,所以了解浏览器和服务器交互的方式就尤为重要。从接触B/S开始就已经接触到了get和post

HTTP协议

说道GET和POST,就不得不提HTTP协议,因为浏览器和服务器的交互是通过HTTP协议执行的,而GET和POST也是HTTP协议中的两种方法。

HTTP全称为Hyper Text Transfer Protocol,中文翻译为超文本传输协议,目的是保证浏览器与服务器之间的通信。HTTP的工作方式是客户端与服务器之间的请求-应答协议。

get方式:

1)提交的参数信息会出现在请求行url的后面,参数信息和url是以?分开,参数名称与参数值“=”连接,参数之间用&分隔开。

2)不适合敏感数据的提交

3)URL编码格式采用的是ASCII编码,而不是Unicode,即所有的非ASCII字符都要编码之后再传输。

4)因为URL的长度限制,GET方式传输的数据大小有所限制,传送的数据量不超过2KB。

5)GET方式服务器端用Request.getQueryString()获取变量的值

6)GET方式传输的参数安全性低,因为传输的数据会显示在请求的URL中

7)GET请求能够被缓存

8) get请求会保存在浏览器浏览记录中

post方式:

1)实体内容(uri后面的内容)在post中,适合敏感数据的提交

2)POST方式将表单内各个字段和内容放置在HTML HEADER中一起传送到Action属性所指定的URL地址,用户是看不到这个过程的。

3)POST方式传送的数据量比较大,一般被默认为没有限制,但是根据IIS的配置,传输量也是不同的。

4)POST方式传输的数据安全性较高,因为数据传输不是明显显示的。

5)POST请求不能被缓存下来

6) POST请求不会保存在浏览器浏览记录中

7)GET在浏览器回退时是无害的,POST会再次提交请求。

总结:

POST和GET方式的安全性是相对的,另外也要看是从哪个角度来看的。从数据传输过程方面来看,POST方式是更加安全的,但是从对服务器数据的操作来看,POST方式的安全性又是比较低的。即使是传输过程用POST来执行,安全性也是相对的,如果了解HTTP协议漏洞,通过拦截发送的数据包,同样可以修改交互数据,所以这里的安全不是绝对的。

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

获取参数数据的小例子

package b_servlet; import java.io.IOException; import java.util.Enumeration; import java.util.Map; import java.util.Set; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/RequestDemo4") public class RequestDemo4 extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /*String value = request.getParameter("username"); System.out.println(value); String password = request.getParameter("password"); System.out.println(password); System.out.println("-----------"); Enumeration<String> enums = request.getParameterNames(); while(enums.hasMoreElements()){ String paraName = enums.nextElement(); //再根据参数名称获取参数值 String paraValue = request.getParameter(paraName); System.out.println(paraName+"="+paraValue); } System.out.println("---------------");*/ Map<String, String[]> map = request.getParameterMap(); //遍历,获取所有的键 Set<String> keySet =map.keySet(); //通过键获取值 for(String key:keySet){ String[] values = map.get(key); System.out.println(key+"="+values[0]); System.out.println("---------"); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }

转载请注明原文地址: https://www.6miu.com/read-3199997.html

最新回复(0)