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

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包(请求体,数据会放在这个包中)

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

个人笔记

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

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值