(1)http是应用层的协议,发送请求之前要先通过socket建立TCP连接,socket是通过IP和端口号建立的,所以在建立连接前要通过DNS协议把URL转换成对应的IP,客户端先把这个url发给本机配置的DNS服务器,如果能够找到相应的url就返回ip,否则DNS将继续把解析请求发送给上级DNS服务器,请求会一直发送到根DNS服务器直到得到结果解析的IP。
(2)DNS解析URL得到IP地址后,通过TCP的三次握手,建立TCP连接,之后就可以发送数据了。HTTP请求包括请求行、请求头、一个空行、请求正文。请求行包括请求方式,URL、HTTP协议版本,请求方式分7种,GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS,常用的是GET和POST。URL指定了要访问的服务器上的资源,HTTP协议版本通常是1.1。
请求头附加了浏览器的一些环境信息,常见的有accept表明浏览器可以接受的数据类型、Accept-Language浏览器可以显示的语言,User-Agent浏览器使用的操作系统和浏览器的名称和版本,Connection: keep-alive一次请求完成后,再次访问服务器上的网页,会继续使用这条已经建立的TCP连接 ,Host表示服务器的域名,还有cookie(将cookie发送到服务器)、Content-Length(请求正文的长度)、range请求的字节范围等。空行用于分隔请求头和请求正文。请求正文中放入向服务器发送的数据,一般GET方式的请求正文为空,POST方式把数据放入请求正文里。
(3)HTTP报文加上头信息后传到TCP传输层,TCP报文加上头信息后传入IP层,通过IP地址可以找到目标主机,之后报文传到网络接口层,网络接口层通过APR协议(地址解析协议),将IP地址转换成硬件地址(Mac地址、网卡地址),客户机先会查看自己的ARP高速缓存中是否有目标主机的MAC地址记录,如果客户机的高速缓存中有目标主机的记录,就通过这个MAC地址进行数据传输,否则会向局域网所有主机广播一个ARP请求,寻找目标主机的MAC地址。
(4)目标主机的网络接口层收到报文段后,通过RARP(逆地址解析协议)将硬件地址转为IP地址,之后报文段从IP层经过TCP层再到应用层,会依次解封装,从下到上传递,请求报文段最终到达目标主机应用层。目标主机处理完成后,会把HTTP响应作为报文发送到客户机,过程和上述类似。http响应包括状态行、响应头、一个空行、响应正文。状态行包括HTTP协议版本、响应状态码,状态码告诉浏览器,服务器在收到请求后的执行情况,是不是返回了预期的资源,常用的状态码有200 OK,表示请求被成功地完成,所请求的资源成功返回,302 Found表示重定向,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的请求,304 Not Modified表示请求的文件原来已经缓存,并且没有改变,可以继续使用原来的文件,404 Not Found表示请求的资源不存在(URL输错了)。响应正文。响应头中包括了服务器的一些配置环境信息以及返回资源的一些属性信息,Date表示生成消息的具体时间和日期,Server表示服务器的版本和型号,Expires表示文件什么时候过期,过期之后重新从服务器获取,更新缓存,Last-Modified表示资源的最后修改日期,Location用于重定向一个新的位置,包含新的URL地址。响应正文就是服务器返回的HTML文档,浏览器解析后,可以显示出来。
(5) 服务器返回数据后,分情况是否关闭TCP连接,如果浏览器或服务器头信息包括了Connection:keep-alive,服务器返回数据后,TCP仍然保持连接,浏览器可以继续发送请求,节省建立连接的时间。
参考链接:
http://www.cnblogs.com/yuteng/articles/1904215.html
http://www.cnblogs.com/EricaMIN1987_IT/p/3837436.html
http://kb.cnblogs.com/page/130970/
http://www.cnblogs.com/biyeymyhjob/archive/2012/07/28/2612910.html