get和post提交方式的异同

前言:

做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中

扫描二维码关注公众号,回复: 2865973 查看本文章

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);
	}

}



猜你喜欢

转载自blog.csdn.net/Luna_ll/article/details/79664456