GET和POST提交及参数传递中的编码问题

get提交流程

数据串联在url后面作为参数---->浏览器会对url中英文字母以外的字符进行URL encode(此时的编码方式因浏览器而定)---->发送给服务器时最终用iso-8859-1编码成二进制0,1来传输---->服务器对数据用iso-8859-1解码。

经常遇到中文乱码的原因也就在于第二步那里,我们并不知道浏览器的用哪种编码方式对字符进行了编码,而我们常见的解决方案就是把参数中文部分URLencode后再拼接到url后面,而编码方式一般设置为utf-8.

post提交:

在html文件中如果有,那么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包(请求体,数据会放在这个包中)

比较多忽略的是最后一点的差异。

GET和POST提交及参数传递中的编码问题_第1张图片

以上内容是自己看了很多网上资料后的个人总结,如有不对的地方,欢迎指出!

你可能感兴趣的:(javascript知识点)