读书人

浏览器是如何解析表单并POST信息的

发布时间: 2012-11-03 10:57:44 作者: rapoo

浏览器是怎么解析表单并POST信息的?
我抓包到这样一个POST数据:

C/C++ code
POST /exporter/sendCsLeadsAction.html HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-ms-application, application/vnd.ms-xpsdocument, application/xaml+xml, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */*Referer: http://exporter.alibaba.com/exporter/registry.html?srctrace=y&originType=50Accept-Language: zh-cnContent-Type: application/x-www-form-urlencodedUA-CPU: x86Accept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 3.5.21022)Host: exporter.alibaba.comContent-Length: 1238Connection: Keep-AliveCache-Control: no-cacheCookie: ali_apache_id=221.232.223.51.1204690406902.0; __last_loginid__=kezhon; ali_apache_track=c_mt=2|c_mid=kezhon|c_lid=kezhon|c_ms=1;_intl_temp_other_=/z2HMndRfnwramL4FO/BB/Gt82aZ2PyoTRSiosV4cFEqfPmAC52wBhRx+Vu7SgdE; ali_apache_tracktmp=; ali_apache_sid=211.69.161.68.1207216999217.8|1207218815; JSESSIONID=DB1872374DA672B97E0C5A3A11EAAAA5name=%E7%8E%8B%E5%B2%9A&emailprefix=znuse&mail_postfix=163.com&mail_post=&companyName=%E8%93%9D%E8%B0%83%E5%A1%91%E8%83%B6%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&countryName=%E4%B8%AD%E5%9B%BD&country=China&province=province5&provinceName=%E5%B9%BF%E4%B8%9C%E7%9C%81&provinceValue=province5&city=city45&cityName=%E5%B9%BF%E5%B7%9E%E5%B8%82&county=country237&countyName=%E5%B9%BF%E5%B7%9E%E5%B8%82&notCNCity=&companyAddress=%E7%8E%AF%E5%B8%82%E4%B8%AD%E8%B7%AF15%E5%8F%B7&countryCode=%2B86&workPhoneArea=020&workPhoneNumber=85627546&industry=100000080&mobilePhone=&consultation=%E6%88%91%E6%84%BF%E6%84%8F%E6%94%B6%E5%88%B0%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E6%96%B0%E4%BA%A7%E5%93%81%2F%E6%9C%8D%E5%8A%A1%E7%9A%84%E9%80%9A%E7%9F%A5%E4%BF%A1&email=znuse@163.com&address=%E4%B8%AD%E5%9B%BD%2C%E5%B9%BF%E4%B8%9C%E7%9C%81%2C%E5%B9%BF%E5%B7%9E%E5%B8%82%2C%E5%B9%BF%E5%B7%9E%E5%B8%82%2C%E7%8E%AF%E5%B8%82%E4%B8%AD%E8%B7%AF15%E5%8F%B7&subject=Mini%E4%BE%9B%E5%BA%94%E5%95%86%E6%8B%9B%E5%95%86%E5%8F%8D%E9%A6%88&phone=%2B86-020-85627546&remark=%E5%9C%A8%E5%9B%BD%E9%99%85%E7%AB%99%E6%8F%90%E4%BA%A4%E6%B3%A8%E5%86%8C%E5%9B%BD%E9%99%85%E7%AB%99%E4%BC%9A%E5%91%98%E7%94%B3%E8%AF%B7&needFeedbackEmail=Y&submitbtn2=%E6%B3%A8%E5%86%8C%E4%BC%9A%E5%91%98


有这样几个疑问:
1:浏览器怎么确定在POST时需要加哪些标题字段,因为我发现不同网站的表单提交时POST标题字段都不一样,浏览器根据什么确定的?
Accept:
Referer:
Accept-Language:
Content-Type:
UA-CPU:
Accept-Encoding:
User-Agent:
Host:
Content-Length:
Connection:
Cache-Control:
Cookie:

2:cookie里面都是些什么信息,浏览器怎么确定需要包含哪些信息?

3:是不是Form中所有的元素包括所有的Input和Select的name=value对全部需要提交,包括type="hidden"这一类元素?如果不是全部都提交的话浏览器怎么确定哪些需要提交哪些不需要?

[解决办法]
1,这叫做HTTP Message header,根据很多因素而定,不过除了referer和cookie字段,其它对于控制IE自动提交表单都不大重要。referer就是你提交表单按钮所在的网页的链接,cookie是以前服务器发送过来的,只要域名相同,都会自动发送给服务器。
2,cookie的信息客户端并不关心,只是原样发送给服务器,cookie的发送策略见1。
3,全部提交,不论隐藏与否
[解决办法]
把form中的所有input都用name=value的形式构造,然后用&连接到一起就是要post提交的数据。当然type=img的元素被忽略,type=submit的情况下,如果只有一个submit,则也忽略,如果有多个submit,则寻找有焦点的那个submit,然后用submit=name形式再连接到post数据的后面

读书人网 >VC/MFC

热点推荐