1. 域名解析
2. 发起TCP的3次握手
3. 建立TCP连接后发起http要求
4. 做事器端相应http要求,浏览器得到html代码
5. 浏览器解析html代码,并要求html代码中的资源
6. 浏览器对页面进行渲染呈现给用户
1.域名解析
便是将网站名称转变成IP地址:localhost-->127.0.0.1
像什么hosts文件,DNS域名解析等等可以实现这种功能
2.发起TCP的3次握手
在客户机和做事器之间建立正常的TCP网络连接时:
客户机首先发出一个SYN,
做事器利用SYN+ACK应答表示吸收到了这个,
末了客户机再以ACK相应。
这样在客户机和做事器之间才能建立起可靠的TCP连接,数据才可以在客户机和做事器之间通报。
下面一段内容引自一次完全的HTTP事务是若何一个过程?
拿到域名对应的IP地址之后,User-Agent(一样平常是指浏览器)会以一个随机端口(1024 < 端口 < 65535)向做事器的WEB程序(常用的有httpd,nginx等)80端口发起TCP的连接要求。这个连接要求(原始的http要求经由TCP/IP4层模型的层层封包)到达做事器端后(这中间通过各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别该连接要求,解封包,一层一层的剥开),还有可能要经由Netfilter防火墙(属于内核的模块)的过滤,终极到达WEB程序(本文就以Nginx为例),终极建立了TCP/IP的连接。
3.发起HTTP要求(HTTP Request)
所谓的HTTP要求,也便是Web客户端向Web做事器发送信息,这个信息由如下三部分组成:
(1)要求行
例如:GET www.cnblogs.com HTTP/1.1
要求行写法是固定的,由三部分组成,
第一部分是要求方法:
除了常见的只有Get和Post方法,实际上HTTP要求方法还有很多,比如: PUT方法,DELETE方法,HEAD方法,CONNECT方法,TRACE方法
第二部分是要求网址,
第三部分是HTTP版本。
(2)HTTP头
HTTP头在HTTP要求可以是3种HTTP头:1. 要求头(request header) 2. 普通头(general header) 3. 实体头(entity header)
常日来说,由于Get要求每每不包含内容实体,因此也不会有实体头。
(3)内容
只在POST要求中存在,由于GET要求并不包含任何实体
4.做事器端HTTP相应(HTTP Response)要求
当Web做事器收到HTTP要求后,会根据要求的信息做某些处理(这些处理可能仅仅是静态的返回页,或是包含Asp.net, PHP, Jsp等措辞进行处理后返回),相应的返回一个HTTP相应。HTTP相应在构造上很类似于HTTP要求,也是由三部分组成,分别为:
1.状态行
例如:HTTP/1.1 200 OK
第一部分是HTTP版本
第二部分是相应状态码
第三部分是状态码的描述
信息类 (100-199)
相应成功 (200-299)
重定向类 (300-399)
客户端缺点类 (400-499)
做事端缺点类 (500-599)
2.HTTP头
HTTP相应中包含的头包括:1. 相应头(response header) 2. 普通头(general header) 3. 实体头(entity header)。
3.返回内容
HTTP相应内容便是HTTP要求所要求的信息。这个信息可以是一个HTML,也可以是一个图片。相应的数据格式通过Content-Type字段来得到:Content-Type:image/png;或者我们熟习的Content-Type:text/html
下面是一些常见的Content-Type字段的值。
text/plain
text/html
text/css
image/jpeg
image/png
image/svg+xml
audio/mp4
video/mp4
application/javascript
application/pdf
application/zip
application/atom+xml
5.浏览器解析html代码,并要求html代码中的资源
有时候我们获取一个HTML页面,在对浏览器对HTML解析的过程中,如果创造额外的URL须要获取的内容,会再次发起HTTP要求去做事器获取,比如样式文件,图片。许多个HTTP要求,只依赖一个TCP连接就够了,这便是所谓的持久连接。也是所谓的一次HTTP要求完成。