首页 新闻 会员 周边

servlet提交编码问题

0
[已解决问题] 解决于 2022-04-19 14:16

今天遇到一个很操蛋的情况,potamain中提交的params参数如果是中文不转encodeUrlComponent码会报错400,如果转码就可以正常获取参数,这是为什么呀,但是在浏览器上的话就不需要转码,就可以正常的获取到结果,实在是不懂什么原理,哪位大佬能帮忙解答下,我上网查说是转码的话浏览器会自动转码,而postmain却不会自动转码,所以要手动转码,真的不懂了

sunny-JJ的主页 sunny-JJ | 初学一级 | 园豆:-3
提问于:2022-04-18 17:30
< >
分享
最佳答案
1

potamain是什么?搜了一下,完全没有提到。后面提到了postmain,不确定是不是postman。
姑且将其当做一个请求测试工具,与postman类同回答以下问题。

这里提到一个概念,即url编码方案。在浏览器的地址栏直接输入url,浏览器会对参数中的非ascii字符进行url编码。各浏览器对ascii字符集内哪些字符也进行url编码有所差异,但是对中文编码是必然的。此时没有content-type的http字段
url编码方案是先将字符进行utf-8编码,然后每个字节写作十六进制,用%做字节前缀。
其次表单form的enctype属性为默认值application/x-www-form-urlencoded时,浏览器也会对表单中输入元素进行url编码。此时http的content-type属性为application/x-www-form-urlencoded

以上是浏览器端的编码方案,是自动的。对应的,服务端容器根据参数在url中还是体部中,以及content-type字段,决定是否进行url编码解码,以及解码是否可行。

猜测在postmain工具中,并不会自动对参数进行url编码,然后替换参数位置。所以本来应该编码的,而工具未编码,导致服务器解析异常,报400错误。
继续说下去,我也尝试过类似的工具开发,一个问题就是,请求测试工具一般无法分辨你要测试的参数是否需要进行编码。有些地方是需要编码,但是有些地方又不需要。所以需要工具使用人员灵活的进行设置,选择是否进行url编码。

如果实在搞不懂,测一下就知道了,接收乱码或者报4xx就说明需要编码。

看在我回答到这个地步的份上,麻烦看到答案满意的话,快速关闭,我也要攒豆子提问,不知道怎么回事被扣成负的了~~~

奖励园豆:5
黑白猫123 | 初学一级 |园豆:-41 | 2022-04-19 13:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册