html post方式提交数据编码问题
Alexis374 opened this issue · 0 comments
Alexis374 commented
最近项目中遇到了这方面的问题,算是比较基础的知识吧。
前端向服务端发起请求,服务端返回一长串数据,数据是类似a=12&b=34c=56
这样的(当然真实的数据远远比这个长且复杂),前端需要分隔出来每个数据然后再组成表单,post到另一个server上。
之前理解的post表单其实是把每个表单的name和value用=
和&
符号连接成字符串发送到server,那是否可以偷懒地传递,即name为a,然后值为12&b=34&c=56...
这样的形式联结起来呢?
结果当然是不可以的。
构造一个html,内容如下
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form action="http://baidu.com" method="POST">
<input type="text" name="a">
<input type="text" name="b">
<input type="submit" value="submit">
</form>
<form action="http://baidu.com" method="POST">
<input type="text" name="a">
<input type="submit" value="submit">
</form>
</body>
</html>
通过抓包分析,第一个表单中分别填入12,34,http的body为a=12&b=34
,若把=12&b=34
填入第二个表单,则http的body为a=12%26b%3D34
,可知&
被转义为 %26,=被转义为 %3D。这种编码方式被成为 百分号编码,或url编码,用于编码url和表单数据。其实从表单的默认enctype=application/x-www-form-urlencoded 也可以看出用的是这种编码。虽然以前知道表单的enctype,但是看来还是需要融会贯通啊