<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[ HTTP协议分析[Gxter] ]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Sat, 12 Jun 2010 08:59:16 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	HTTP协议分析<br/>HTTP协议之我见<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>原文地址：http://bbs.sotenet.com/viewthread.php?tid=47&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>//起因是昨天看了YELLOW哥的HTTP传文件的文章。下面的东西可能看起来有点乱。但基本原理写的都很清楚了。<br/><br/><br/>/*<br/>对HTTP协议进行分析：<br/>测试环境：<br/>WIN 2K -SP4<br/>Apache/1.3.29 (Win32)<br/>IE 6.0<br/>Firefox/1.0<br/><br/>测试步骤：<br/>1：先建立TCP连接。<br/>2：发送如下请求：<br/>GET /index.html HTTP/1.1<br/>Accept:*?*<br/>Accept-Language: zh-cn<br/>User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)<br/>Host:192.168.0.119<br/>Connection: Keep-Alive<br/><br/>3：如后接受数据：<br/>接受到的的结构如下：&nbsp;&nbsp;HTTP协议回应 + 网页正文 + HTTP的结尾结构<br/><br/>//------------------------------------------------------------------------具体数据如下<br/><br/><br/>HTTP/1.1 200 OK<br/><br/>Date: Mon, 19 Dec 2005 10:51:54 GMT<br/><br/>Server: Apache/1.3.29 (Win32)<br/><br/>Last-Modified: Tue, 16 Mar 2004 12:24:28 GMT<br/><br/>ETag: &quot;0-dab-4056f1fc&quot;<br/><br/>Accept-Ranges: bytes<br/><br/>Content-Length: 3499<br/><br/>Keep-Alive: timeout=30, max=100<br/><br/>Connection: Keep-Alive<br/><br/>Content-Type: text/html<br/><br/><br/>//**************************************网页正文（略）<br/><br/><br/>HTTP/1.1 414 Request-URI Too Large<br/><br/>Date: Mon, 19 Dec 2005 10:51:54 GMT<br/><br/>Server: Apache/1.3.29 (Win32)<br/><br/>Connection: close<br/><br/>Content-Type: text/html; charset=iso-8859-1<br/><br/><br/><br/><br/><br/><br/><br/><br/>Request-URI Too Large<br/>The requested URL&#039;s length exceeds the capacity<br/>limit for this server.<br/><br/>request failed: URI too long<br/><br/><br/><br/><br/><br/>--------------------------------------------------------------------------------<br/><br/><br/>Apache/1.3.29 Server at localhost Port 8080<br/><br/><br/><br/>//------------------------------------------------------------------------数据结束<br/><br/><br/>这之间还要有一个地方值得注意的就是当发出请求后，服务器回送数据时是分段发送的。<br/>比如Apache/1.3.29 (Win32)返回一个大网页数据的时候就发送了5个包<br/>1，2，3，4包是4098字节，最后剩下的数据由第5个包返回是1953个字节。<br/>这5个包的数据结构如下：<br/>1包：HTTP回应头结构 + 网页正文<br/>2包：网页正文<br/>3包：网页正文<br/>4包：网页正文<br/>5包：网页正文 + HTTP回应结尾结构<br/><br/><br/>今天上午大哥说的东西其实就是这样一个东西：<br/>1：SERVER开一个端口80。<br/>2：CLIENT 连接 SERVER 用TCP协议，然后提出一个HTTP请求。<br/>3：CLIENT 接收 SERVER 的数据，结构：HTTP回应头结构 + 文件内容 + HTTP回应结尾结构<br/><br/><br/>从这些我们基本就可以看出来HTTP协议是建立在TCP协议之上。协议的请求和回应的结构也不是很严格。<br/>这点和TCP，UDP等协议比较起来，HTTP协议并不像TCP/UDP等协议严格。<br/>其实如果要较细致的学习这个协议，主要就是学习请求和回应的格式。<br/><br/><br/>这是我截获的 IE6.0 的HTTP请求，访问命令：http://192.168.0.119:800<br/><br/>GET / HTTP/1.1<br/>Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, *?*<br/>Accept-Language: zh-cn<br/>Accept-Encoding: gzip, deflate<br/>User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)<br/>Host: 192.168.0.119:800<br/>Connection: Keep-Alive<br/><br/>这是我截获的 firefox 的HTTP请求，访问命令：http://192.168.0.119:800<br/><br/>GET / HTTP/1.1<br/>Host: 192.168.0.119:800<br/>User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.7.5) Gecko/20041224 Firefox/1.0<br/>Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*?*;q=0.5<br/>Accept-Language: zh-cn,zh;q=0.5<br/>Accept-Encoding: gzip,deflate<br/>Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7<br/>Keep-Alive: 300<br/>Connection: keep-alive<br/><br/><br/>注：以上请求里面有都一个*?*,其实这“?”应该是“/”&nbsp;&nbsp;原因是因为是程序里面的注释符号<br/><br/><br/><br/>今天就着昨天的研究成果上面又具体的看了一下，还那昨天的那5个包做例子：<br/><br/>这之间还要有一个地方值得注意的就是当发出请求后，服务器回送数据时是分段发送的。<br/>比如Apache/1.3.29 (Win32)返回一个大网页数据的时候就发送了5个包<br/>1，2，3，4包是4098字节，最后剩下的数据由第5个包返回是1953个字节。<br/><br/>(info_php.php)<br/>这5个包的数据结构如下：<br/>1包4098：HTTP回应头结构 + 5个字节的数据（） +&nbsp;&nbsp;网页正文<br/>2包4098：5个字节的数据（）&nbsp;&nbsp;+&nbsp;&nbsp;网页正文<br/>3包4098：5个字节的数据（）&nbsp;&nbsp;+&nbsp;&nbsp;网页正文<br/>4包4098：5个字节的数据（）&nbsp;&nbsp;+&nbsp;&nbsp;网页正文<br/>5包1953：5个字节的数据（）&nbsp;&nbsp;+&nbsp;&nbsp;网页正文 +&nbsp;&nbsp;5个字节的数据（通常是0） + HTTP回应结尾结构 + 网页结构<br/><br/><br/>以上是对大于两个分段的网页的测试：（index.htm）<br/>两个分段的网页：<br/>1包4096：HTTP回应头结构 + 网页正文 + HTTP回应结尾结构 + 网页结构（一半）<br/>2包195：网页结构（另一半）<br/><br/>以上是对大于一个分段的网页的测试：（index.html）<br/>1包949： HTTP回应头结构 + 网页正文 + HTTP回应结尾结构 + 网页结构<br/><br/>一点小小的疑惑：当我测试普通的网页（*.html）反回分段时没有那5个字节的数据。<br/>但当我测试动态网页（*.php）时在里面有那5个字节的数据，我不明白是不是里面还有什么别的机制来控制<br/>HTTP协议的数据分段。另外说一点就是，那个5个字节的数据是16进制的数据。<br/>大概是代表本分段里面的网页正文数据的字节数。<br/><br/>相信HTTP协议里面还有我没有发现的东西，但基本的东西我想我这里面写应该差不多了！<br/><br/>下面是我测试的小程序代码：<br/><br/><br/><br/><br/><br/>//----------------------THE----END--------------------------------------<br/>
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论]  HTTP协议分析[Gxter] ]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>