今天遇到一个很操蛋的情况,potamain中提交的params参数如果是中文不转encodeUrlComponent码会报错400,如果转码就可以正常获取参数,这是为什么呀,但是在浏览器上的话就不需要转码,就可以正常的获取到结果,实在是不懂什么原理,哪位大佬能帮忙解答下,我上网查说是转码的话浏览器会自动转码,而postmain却不会自动转码,所以要手动转码,真的不懂了
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就说明需要编码。
看在我回答到这个地步的份上,麻烦看到答案满意的话,快速关闭,我也要攒豆子提问,不知道怎么回事被扣成负的了~~~