GET 与 POST请求
文章目录
常见情况
GET
- form 标签 method=get
- a 标签
- link 标签引入 css
- Script 标签引入 js 文件
- img 标签引入图片
- iframe 引入 html 页面
- 在浏览器地址栏中输入地址后敲回车
POST
- form 标签 method=pos
区别
比较项 | Get | post |
---|---|---|
参数出现在URL中 | 是 | 否 |
长度限制 | 有 | 无 |
安全性 | 低 | 高 |
URL可传播 | 是 | 否 |
文件上传 | 不支持 | 支持 |
乱码问题
Tips
- tomcat中默认使用的字符编码方式:iso-8859-1,不支持中文
- 常见的支持中文的编码方式
编码方式 | 收录的字符 |
---|---|
gb2312 | 常用简体汉字 |
gbk | 简体和繁体汉字 |
utf-8 | 所有国家需要的字符 |
问题分析
参考文章:
Tomcat的URIEncoding、useBodyEncodingForURI和CharacterEncodingFilter
由StringHttpMessageConverter引出的客户端服务器端之间的乱码过程分析
URL汉字编码问题以及乱码解决
URIEncoding和UseBodyEncodingForURI的解释
Post,Get请求乱码的原因和解决方案
- 当我们在表单中输入参数跳转后,地址栏会显示
http://localhost:8080/test?userName=张三&userPwd=1&rePwd=1&bd=手机号
,如果复制地址后粘贴,则内容为http://localhost:8080/day0321/login/doLogin.jsp?userName=%E5%BC%A0%E4%B8%89&userPwd=1&rePwd=1&bd=%E6%89%8B%E6%9C%BA%E5%8F%B7
,这是编码后的地址,采用的何种编码方式称为URL编码
(chrome浏览器始终以UTF-8的编码形式将中国转换成字节数组) - 当浏览器发送请求时,服务器是以请求的content-type来解析请求数据的,当浏览器请求没有指定content-type时,Tomcat服务器默认采用ISO-8859-1
- 由于两种编码方式不一样,因此出现乱码
解决方法
- 设置请求和响应的编码方式(适用于post)
//要在获取请求参数之前调用才有效
request.setCharacterEncoding("utf-8");//设置请求的编码
response.setCharacterEncoding("utf-8");//一般page已经设置过utf-8了,这一句可以不加
<%@ page language="java" contentType="text/html; charset=utf-8"%>
-
get请求出现乱码
① 治标:new String( s.getBytes("iso-8859-1"), "utf-8" );
② 治本:配置 tomcat\conf\server.xml 文件
URIEncoding="UTF-8"
:统一设置用于解码URL的字符编码(包括地址和参数),默认值为ISO-8859-1
useBodyEncodingForURI="true"
:表示是否用request.setCharacterEncoding设置的编码对请求参数(不包括地址)进行解码,默认false,主要用于Tomcat4.1.x中。
为什么post 与 get 两种提交方式的解决方案不同
POST
① 其编码是由页面来决定的,即ContentType(“text/html; charset=utf-8”)
② 当提交表单时,浏览器首先会根据ContentType的编码格式对参数进行编码,然后提交给服务器。
③ 在服务器端同样也是用ContentType的编码来进行解码
GET
① GET提交方式会将参数附加到地址中,因此参数的编码是由URL编码来决定的
② page中的ContentType 与request.setCharacterEncoding
方法未对HTTP文头的内容进行解码
③ 因此GET方法依旧使用默认ISO-8859-1进行解码
④ 想要正确解码必须设置 URIEncoding
或者 设置完request.setCharacterEncoding
再设置useBodyEncodingForURI