1. http协议
a) http协议是基于请求相应模式的协议,客户端发送一个请求,服务器端返回该请求的响应。http是建立在tcp/ip为基础的高层协议。http协议第一个版本是http0.9,后来发展到了http1.0,现在最新版本是http1.1被广泛使用。
b) http请求
i. 请求方法/URI/版本
ii. 请求头
iii. 请求正文(请求头和请求正文之间是一个空行(回车换行),这个非常重要,它表示请求头已经结束,接下来是请求正文。
c) http响应
i. 协议/状态码/描述
ii. 响应头
iii. 响应正文(响应头和响应正文之间也是用空行分开(回车换行))
2. post提交方式消息结构
POST /drp1.4/test_encoding.jsp HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh,en-us;q=0.5
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: localhost:8080
Content-Length: 16
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=92B6F142987C5B900BD0742FFEC4BFEA
name=Hello+World |
3. get提交方式消息结构
GET /drp1.4/test_encoding.jsp?name=Hello+World+ HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: zh,en-us;q=0.5
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: localhost:8080
Connection: Keep-Alive
Cookie: JSESSIONID=92B6F142987C5B900BD0742FFEC4BFEA
|
4. html中的post提交主要是把表单信息放到了消息体中,而get提交则是把消息放到了消息头中,在tomcat5.X中post和get字符集的处理方式不同,所以get提交时需要 在TOMCAT_HOME/conf/server.xml,找到web使用的Connector,加入URIEncoding=”GB18030”属性,如:
<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GB18030"/> |
5.
post提交主要是把表单信息放到了消息体中被http按照固定的格式封装起来了,在客户端中传递时,不会被客户端的底层解封转码,在传到服务器中,服务器如果设置了Filter,Filter会截取请求,按照固定的http协议解封,把体内的中文(含有中文意思的编码)转换为中文,然后服务器会拿到中文进行处理,
get提交则是把消息放到了消息头中,头中有中文的时候,在客户端向服务器端传输的过程中,就会被客户端的底层转换成其他编码,到服务器端就已经不是想要的中文了,故服务器端的Filter已经不能在把乱码转换成中文了,所以传到客户端就是乱码了,