get提交流程:
数据串联在url后面作为参数---->浏览器会对url中英文字母以外的字符进行URL encode(此时的编码方式因浏览器而定)---->发送给服务器时最终用iso-8859-1编码成二进制0,1来传输---->服务器对数据用iso-8859-1解码。
经常遇到中文乱码的原因也就在于第二步那里,我们并不知道浏览器的用哪种编码方式对字符进行了编码,而我们常见的解决方案就是把参数中文部分URLencode后再拼接到url后面,而编码方式一般设置为utf-8.
post提交:
在html文件中如果有<meta .... charset="GBK,utf-8"/>,那么post就会用此处指定的编码方式编码。
tips:GBK与utf-8的区别。GBK中英文都是双字节,包含全部的中文,国家编码;utf-8中文是24位,英文是8位,包含全世界所有国家用到的字符,国际编码。
而当我们遇到request乱码和response乱码,其本质上都是浏览器与服务端的编码方式不一致造成的。
可以通过指定他们的字符编码集,使其一致。
response.setCharacterEncoding("utf-8")
response.setContentType("text/html;charset=utf-8")
request.setCharacterEnoding("utf-8")
其实很多时候提到GET和POST都会谈到两者的区别。
GET请求 | POST请求 |
请求可被缓存 | 不会被缓存 |
保留在历史记录中 | 不会保留在历史记录中 |
有长度限制,约2K | 数据长度不限制(一般由后端规定) |
多用于取数据(查) | 多用于修改数据 |
get产生一个TCP数据包 header+data | post产生两个数据包 1.header包(请求头) 2.body包(请求体,数据会放在这个包中) |
比较多忽略的是最后一点的差异。
以上内容是自己看了很多网上资料后的个人总结,如有不对的地方,欢迎指出!