1>浏览器向服务器发送请求报文
http:/www/baidu.com:80/login.aspx
- 第一步:根据这个www/baidu.com的域名来找DNS服务器,解析成对应的IP地址。
- 第二步:浏览器解析到IP地址后,对指定的URL进行HTTP封装,把URL封装成http报文。
- 第三步:浏览器把URL封装成HTTP报文后,将这个HTTP请求报文发送到服务器。(注:浏览器是如何把http请求报文发送到服务器的呢? 答案:浏览器会在内部建立一个Socket对象,把http请求报文转变成byet[]字节,然后调用Socket.Sent()方法把这些数据发送到服务器的)
2>服务器向浏览器响应
在服务器端:
- 第一步:服务器获取到浏览器发送过来的HTTP请求报文
(注:服务器是如何获取到浏览器发送过来的HTTP请求报文的呢?答案:服务器也是通过Socket.Receive()方法接收到了浏览器发送过来的http请求报文数据) - 第二步:服务器对接收到的http请求报文数据进行处理:
1> 先解析http请求报文
2> 根据解析好的http报文,在服务器端查找用户请求的资源(如果浏览器请求的是静态资源,则服务器直接通过文件操作读取这些资源然后把资源通过调用服务器端socket的send()方法直接发送给浏览器,如果浏览器请求的是动态网页,则web服务器会调用对于的.NET FreameWork来执行对应的动态网页中的代码,执行完毕后生成的HTML代码再通过调用Socket.Sent()发送给浏览器)
3>浏览器解析渲染服务器响应的报文(HTML代码)
浏览器端:
浏览器通过Socket.Receive()方法收到服务器发送过来的HTML代码,然后对这些HTML代码进行渲染。
浏览器怎么解析这些HTML代码呢?答案:浏览器接收到服务器发送过来的html代码,然后浏览器会对这些HTML代码从上到下一句一句的解析。
- 遇到一些标签,比如<div>,<a> ,<span> ,<p>等标签,浏览器会调用渲染引擎对这些标签进行渲染,然后把结果显示到页面。
-
遇到语义解释性的标签嵌入文件(image,JS脚本,CSS样式)例如:遇到
的时候浏览器会首先显示一个图片的框(窗口),如果img标签里设置了宽度和高度,它会立即将这个框(窗口)的大小给固定,如果没有宽度和高度,就显示一个小的默认大小的的框(窗口),然后再次通过Socket向服务器发送请求报文,来请求123.png这张图片,请求到123.png这张图片后,如果img之前没有设置过宽度和高度,这个时候才重新渲染它 的高度和宽度,如果img之前已经设置过高度和宽度了,这时候只要把123.png这张图片填到框里就可以了。
- 遇到 <link href="StyleSheet1.css" rel="stylesheet" />的时候浏览器会再次通过Socket向服务器发送请求报文,来请求这个StyleSheet1.css文件
- 遇到<script src="jquery-1.11.2.js"></script>的时候,浏览器又会像服务器发送请求报文,来请求这个jquery-1.11.2.js文件