参考:
1.http://blog.csdn.net/gueter/article/details/1524447 http协议
2.http://blog.csdn.net/gueter/article/details/1524447 http协议
3.http://www.cnblogs.com/weekend001/p/3796939.html Chrome DEBUG network 的Timing说明
HTTP 基于请求(request)与响应(response)的无状态无连接协议,一次请求一个连接,响应完毕,则断开http连接
HTTP定义的事务处理由以下四步组成:
1.建立连接
2.客户端发送HTTP请求头
3.服务器端响应生成结果 回发
4.服务器端关闭连接,客户端解析回发响应头,恢复页面
举例子进行流程梳理
请求:http://write.blog.csdn.net/postedit/test.txt
1、建立连接(http三次握手建立客户端服务器连接)
本机 请求 连接 write.blog.csdn.net:80(为空默认为80)
chrome Debug Timing : Proxy、DNS LoopUp、Blocking(浏览器发请求前本地的操作时间,比如去缓存中查看页面缓存等)
java 代码:
<pre name="code" class="java" style="font-size: 14px; line-height: 26px;">//URL方法,创建HttpURLConnection对象
httpURLConnection = (HttpURLConnection) url.openConnection();
//设置url连接超时时间
httpURLConnection.setConnectTimeout(5000);//httpURLConnection方法
//设置HTTP请求方式
httpURLConnection.setRequestMethod("GET");//httpURLConnection方法
//打开输入流
httpURLConnection.setDoInput(true);//URL方法,httpURLConnection继承,开打输入流
2. 客户端发送HTTP请求头((TCP三次握手建立客户端服务器数据传输连接))
发送请求内容并传递响应参数 如 GET或POST 传递的参数 Accept Content_length Content_type User_Agent Expire(expire Time 多少时间过期,控制浏览器是否页面缓存等)等
本机请求: GET /postedit/test.txt HTTP1.0
chrome Debug Timing : Connecting(建立TCP连接的时间,就相当于客户端从发请求开始到TCP握手结束这一段,包括DNS查询+Proxy时间+TCP握手时间。),Sending(发送请求时间,这个时间一般很小,当然如果POST请求,请求体比较大,那么这个时间段就会比较长了。)
java代码:
httpURLConnection.connect();//调用connect方法,建立tcp连接
服务器端接受请求,按照请求里的方式处理数据后生成响应返回数据到客户端 (本机)
chrome Debug Timing :waiting(发送请求完毕到接收请求开始的时间,这个时间段就代表服务器处理和返回数据网络延时时间了,服务器优化的目的就是要让这个时间段尽可能短)
java代码 如查询数据库处理数据等
4.服务器端关闭连接,客户端(本机)解析回发相应头,恢复页面
1)浏览器先解析状态行,查看请求是否成功的状态代码--HTTP响应码:404 400 200 ....
2) 解析 每一个响应头标 如
ContentType: text/html;charset=gb2312
Content-Length: 122 ---响应中的字节数,只在浏览器使用永久(Keep-alive)HTTP连接时需要。
3) 读取响应数据HTML,根据它的语法标签<html></html>等和内容恢复标准的HTML格式页面或者其它。
4)一个HTML 文档可能包含其它的需要被载入的资源,浏览器会识别,并对这些资源再进行额外的请求,这个过程可以一直循环到所有的数据都按照响应头标中规定的格式恢复到页面中。
5)数据传送完毕,服务器端关闭连接,即无状态协议。
chrome Debug Timing:receiving(接收数据时间,返回数据比较大,接收时间比较大)
java代码
// 返回状态码 200ok
if(httpURLConnection.getResponseCode() == 200){
<span style="white-space:pre"> </span>//从服务器获得一个输入流
<span style="white-space:pre"> </span>inputStream = httpURLConnection.getInputStream();
br = new BufferedReader(new InputStreamReader(inputStream));
String i = "";
while((i = br.readLine()) != null){
<span style="white-space:pre"> </span>result += i;
}
}