收藏 分享(赏)

http请求编码格式解析.docx

上传人:HR专家 文档编号:12188125 上传时间:2021-10-27 格式:DOCX 页数:5 大小:41.96KB
下载 相关 举报
http请求编码格式解析.docx_第1页
第1页 / 共5页
http请求编码格式解析.docx_第2页
第2页 / 共5页
http请求编码格式解析.docx_第3页
第3页 / 共5页
http请求编码格式解析.docx_第4页
第4页 / 共5页
http请求编码格式解析.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、关于http请求编码1 get post请求的区别http请求存在两种方式 get请求和post请求。 对客户端来说区别之一是:GET的参数是在 HTTP的头部传送的,而 Post的数据则是在 HTTP请求的内容里传送Get方式通过URL提交数据,提交后在地址栏中的地址显示请求信息。即请求参数信息包 含在http请求头的referer字段可以得到。比如,如果是传送用户名密码,我们可能使用这 样的 url 链接?username=MyName& passwd=MyPwd使用key=value的方式传送参数百度、google的首页是这种实现方式。下面是在百度搜索“中文 abc”,抓取报文,使用的即

2、是wd=%D6%D0 %CE%C4 的 key value 方式,如下图3 Hypertext Transfer ProToeolnosr: ywy. baidu. comrnuser-Agent: Moznlla/5-0 (wlndow5; u; wlndovs nt 5.1; zh-c Accapr: text/html,applicatlon/xhtml+ml,appl1 carlon/xml;q Accept-Language: 2h-cn,2h;q=U.5rnAccept-Encoding: g3ip?def 15teVnAccept-Char set : gbZ 312, utf-

3、8; q=0.7,*; q=0.7rnKeep-AlIve; 300rnconnection: keep-alivernRefarer : http:/vww. baldu. con/5?*d-%D6%D0%cE5&T4abcrnIT十1 I inr-b i b-l- i-bii-JH Lr -4 n. IT r-.而 t1尸 ET AT q力力 Pi E- i力 O“中文” 编码为 %D6%D0 %CE%C4Post方式在http请求的内容里传送数据下面是登录时,输入用户名:“中文abc”、密码:“123456”时抓到的数据z3 ne-based text data: a ppi 1 car

4、 1 on/x-ww-f orm-ur 1 ancodadtr uncated _rEVNTTARGET=&-3匚NTARG则二NTT1EWSTATE=S2FWEPDwULLTEyM“Iuoooooooo 0 7 8 9 ab cd e- 533333333 uoo 0-00000oyF3看4电45M6 316952345 5 7&52541 4425364c6f 676。32645d 31及U34 4c6f69方自3725力354242265f 5f45454e6639 23 324 528,62556 45M?2724m 47523f258 Z52466323 U22 527 & d 54

5、43267632 y 2 e 413 9 e 9 476367663ULTt1UHS PBWUE611 n2%2-4use 4%B83UD% abci&Logi sv/or d=12 1n2%24Lo n-E75 9%36A_E6d4 ri.UNMUXttUV URMLogi rName=%E E6%96期 n2%24Pas 34 %&Log ginButto 第BE艇投9 VEhTVALI“中文”编码为 E4%B8%AD %E6%96%872编码2.1 url编码在http传输数据时,url只能使用assic字符集某些特殊字符也需要编码,方式为用加上该字符在ISO-8859-1 charac

6、ter-set字符集中对应的两个16进制数。即在其 assic码的16进制表示前加%。例如:对于汉字,则是将汉字编码后,在每个字节前加%比如,我们对“中文”进行 GB2312编码为(D6D0 CEC4 )验证:我们在百度搜索“中文 #$%”对应关系中文%D6%D0%CE%C4#%23$%24%25卜面的链接中,可以找到所有需要特殊编码的字符。URLs can only be sent over the Internet using the ASCII character-set.Since URLs often contains characters outside the ASCII set

7、, the URL has to be converted. URL encoding converts the URL into a valid ASCII format.URL encoding replaces unsafe ASCII characters with % followed by two hexadecimal digits corresponding to the character values in the ISO-8859-1 character-set.URLs cannot contain spaces. URL encoding normally repla

8、ces a space with a + sign.2.2 如何选择中文编码上面我们可以看出,对于英文url编码只需按字符表处理即可,对于中文,需要先对中文编码,然后再转换为 url编码。这里的中文编码即为我们经常遇到的GB2312 GBK UTF-8 这些编码方式。那我们在 http请求时是如何控制使用哪种编码的呢?这个工作是由浏览器来完成的。并且我们可以控制浏览器使用何种方式编码(通过浏览器的查看-编码,选择自己要用的编码方式, 当然,大多情况下,得到的结果是:页面乱码!)。为了方便下面分析数据,我们在下面的测试中使用“中文 ”作为测试数据,它的编码对 应为:GB2312D6D0 CEC4

9、UTF8E4B8AD E69687GBK(未测试,待补充)2.2.1 Get 请求:Get请求的编码结果比较容易得到,不需要通过抓包,直接在浏览器的地址栏可以得到。而且比较凑巧的是百度和google两个网站,正好给我们提供了一个比对结果的环境。百度使用的编码方式为GB2312 (跟国内大多数网站类似),而google使用的编码方式为 UTF-8。这一点可以通过查看页面源码确认:在源码的 部分指定了使用何种编 码方式。浏览器就是通过这个charset字段来决定用什么编码方式解析这个页面, 以及提交请求数据的编码方式。百度的:谷歌的: 下面我们验证下:在百度和google搜索“中文”,这两个字,做

10、下对比。结果为百度 D6%D0%CE%C4 谷歌%E6%90%9C%E7%B4%A2那么,如果我们强制浏览器改变编码方式,会有什么结果呢? 强制使用utf-8访问百度,页面乱码,输入“中文”,回车搜索,返回页面存在乱码。抓到的数据包,显示请求链接为connect1 on: keep-al ivernReferee : htnp:/Aw- baidu. com/s=%E4%明知口麻37rntruncated Cookie: BAIDUID-OS2D024452C51d172169518035SI8DFE:FG-1; BDU5 rn102d616c6976650dOaF652M4000IB228

11、e5744174442f45r 35717736506-f n6T函H 46965-ii nMaJ 4ar04241 r434-4 r65726572羽62SI642545弘25423337OdOaEB55 49 4-1 3d 30erer : rnttp?7vww. bai d u* cam/s? wd=%4%B 3%AD%EG 9e%37. .SOkie: B AIDUID=O强制使用GB2312访问google,页面同样乱码,输入“中文”,回车,返回正常页 面。请求链接为这个对比也说明了百度没有对utf8的支持,而google则兼容了 GB2312的处理。2.2.2 Post 请求正常情

12、况下,我们访问我们的办公用品网站时,使用的编码方式为 utf-8,这时使用中文用户名可以正常登录;如果我们在浏览器中,强制设置编码方式为GB2312,(查看-编码方式中选择),输入中文名,那么就会登录失败。原因应该是,服务器在接收用户名这个参数时,接收到了 GB2312编码的数据,却仍然尝试用 UTF-8来解码,所以就会认证失败。下面是强制使用 GB2312登录时的数据包,输入的用户名: “中文abc”,密码“ 123445”Hypertext Transfer Protocol+ POST /newa/1 ogi n, aspx HTTP/1. 0rn jJ,.2 PJ . T.3. C|n

13、 P. I. . . . EVENTTAR GET=d VENT ARG U MENT-& VIEWSTAT E-%FWEP DWULLTEy MjU4MZQ2 NjBkZrLT E1UH3UNH UXEOvrBW UEtllURA &Log1n2% 24UserNa me=%ti6%D ,0CE%c4a bc&Loq-in 2啦4pa,足,w 56乱叫1为2应41_口白 Tneutron325494754 e 3 7 5 1-5557752-4 6362 0 17 15 C2259 2 f 9 5444444326363 _e 4 2 4 4 9 2 671cg 尸 5555476M6M4M

14、 14 13 c a69 4fd45 75454576-46332 e 47 Cbo7_5 c 427 a45346M6246WM 3 5 5 522fd6 255 M4445446M2724 66597 aco c 5 3 f 2 GJ 95 4J-7654 6 6632 4 5 6 6 4 e 5 6-d 2 7ed 74554472667632f5f 028111 39 s a545534466766 dfll-干 5 1 e 2 e 4 3 7l 5 555 4545 4m 7 6 6 Oof67 .d55231f4 5052777574667 o O6d 6d3955 o c 4 O

15、O2B443662547 a- Sd42-48135 4 65 5b35334374327 b 8 4 -p-5556-5 3262 1954257354334d25 5 da95 4 555e 44M664322M8 7d 5d5520 249 4444453333600200030004 00050006000700030 0090 00 a0 OObO00C0 oodo OOeO发现,编码对应为“中文”编码为 “%D6%D0%CE%C4 ”,对已 GB2312 编码。而使用UTF8编码访问时,抓到的数据包为j l1 ne-bsed r exx data: appl 1 cat ion/x

16、-ww-form-ur 1 encodedt r uncat ad _eve nttapgei =&_eventargument=vi estate =2FwEpwuLLTEifiU50U 0370 03 SO 0390 0310 oano 03 CO 03 dO03eQ“中文”3 _y 5 _LJ_ & al 5- J66-2 63634 1 3 4 7 1cgf 43763435 3 65 1fd4EJf /_J35 463325 y54_5_c427_w 0工号246EWZ 5 5 2 8 6 2 5 EJ 6 053 327243 0-75 23f258 /52466M23 c 2 2

17、 5 2 7ed5 44-5 2 67652 y 2 e 413 959 M76367663s 2 016 2 4925 0-54 33364 52522756 /5746362s41SI 252535 6e424e6d926254/263334_2r309 5 7 m 7fg 9 . 764376-54 U7581f45 c 362邑72450 C41 463254734 b C5-6 46556 34gMM2745IlLTLLUJI-li rBWUEGll n2%24Use 诙 abc&Logi swor d=1.2 1n2%24Lo 门益E 7X99 9%8&A_EUNHUXtlUV U

18、RA&Logi rName=%E E5%96%87 由2%24Pa5 W4 56(SfL(jg ginBurto 姐日炕与助 VENTV4LI编码为 E4%B8%AD%E6%96%87,可以正常登录系统。3结论很不幸,浏览器事先不知道一个站点的编码方式, 如果想准确获取访问一个站点的编码 方式,只能从页面 meta信息中的charset获取。而这需要解析服务器返回的页面信息,对我 们是不可接受的。侥幸的是,目前国内的大多数站点的编码方式为GB2312、GB18030、GBK (网易采用GBK编码),新增站点多为 UTF-8 ,只需处理这几种中文编码,即可解决大多数问题。又,在中国,大陆最常用的

19、就是GBK18030编码,除此之外还有 GBK, GB2312 ,这几个编码的关系是这样的。最早制定的汉字编码是GB2312,包括6763个汉字和682个其它符号;95年重新修订了编码,命名GBK1.0,共收录了 21886个符号。之后又推出了 GBK18030 编码,共收录了 27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字, 现在 WINDOWS 平台必需要支持 GBK18030编码。按照 GBK18030、GBK、GB2312的顺 序,3种编码是向下兼容,同一个汉字在三个编码方案中是相同的编码。那我们只需使用一种编码检测就可以了。一般来说,用户名、密码这些参数会使用

20、post请求方式,在http请求内容中出现。如果我们检测的内容中存在汉字,依次用GBK18030/GBK/GB2312 之一和UTF8编码方式匹配即可。还有一点问题,用户名、密码在一次登录过程中一般只出现一次,而我们却需要检测所有的请求报文,很不经济。4 其他由以上的分析可知, 我们日常上网的过程中, http 请求的具体编码方式是由服务器通过meta 信息通知浏览器的。浏览器遵循这个meta 指定的编码方式组织请求数据,这样就完成了编码协商过程。网络上的请求数据包是由浏览器产生的, 浏览器自然可以控制使用什么方式来编码。 浏 览器如何编码是一回事,服务器能否识别这一编码又是另一回事。那么,对于其他服务( ftp, database, mail )编码方式的选择是否也存在这样一种协商的过程?在用户第一次连接时, 服务器返回支持的编码方式列表, 客户端根据这些信息确定自己的编码方式。 如果服务器能够支持多种编码方式, 那么, 客户端有可能就会自己选择一种来发送数据,这完全依赖于客户端的实现,可能根本没有什么信息标志使用何种编码。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报