其实这个协议有很多的可以分析的,然而HTTP又是最常用的协议了,于是就从这个入手吧。
分析用到的工具: firefox+WSExplorer
先通过一个浏览器访问 http://127.0.0.1:8080
通过在WsExplorer 中查看服务器的第一次请求中我们收到了
GET /index HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
这个就是HTTP的请求头信息了,看来只是简单的在浏览器输入一个地址,程序还是做很多事情的,第一行中通过空格隔开了有3个参数,第一个参数代表当前使 用的请求方式,而通过浏览直接输入地址方式为GET,二的个参数为请求的路径,如果存在参数的也会直接在后面直接通过追加,而使用POST方式情况会是请求头信息结束完后在追加一个请求头信息 Content-Length: 13 来指定这个POST的数据域的大小。然后会是数据信息 就是这些参数告诉服务器用户的信息,如使用何种编码来请求服务器,用户使用浏览器信息,等。服务解析这些信息就能知道用户要请求那个页面
既然既然知道用户在请求那个页面服务器需要的就是返回用户信息。这里就是响应头了
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=34A40E9B57CAC849311E1096D4A151ED; Path=/zrlog/; HttpOnly
Content-Type: text/html;charset=UTF-8
Content-Length: 5071
Date: Tue, 17 Feb 2015 14:48:47 GMT
--- 这里数据
这里也通上面一样。第一行数据也是3个。不过这里多的是响应状态及描述
浏览器收到响应头就会做一些事情了。如, text/html;charset=utf-8 告诉了这个的MimeType和需要使用的编码方式。set-cookie 及添加一个cookie信息到用户的浏览器中。而浏览器需要怎样去处理服务器响应的数据就依赖这些响应头。而MimeType 就会表示这些数据是什么了。如是css还是Html
整个流大致为 浏览器发起HTTP请求(建立连接后就直接进行HTTP协议头和请求头) 服务器收到进行处理响应,服务端根据请求里面的Connect头信息决定是否关闭连接。
说道这里对HTTP协议就有一个大致的了解,动手简单实现一个webserver
http://git.oschina.net/94fzb/simplewebserver
这个只是简单的实现对浏览器请求的处理,可以简单的展示一些静态页面,支持文件的上传,JSON数据的响应,Cookie+Session 简单的会话的实现,请求路由的支持。