web服务器访问流程


一.DNS解析

 

域名系统(英文:Domain Name System,缩写:DNS)是因特网的一项服务。

DNS是域名和IP地址相互映射的一个数据库。采用分布式,层次数据库,没有一台DNS服务器具有因特网上所有主机的映射关系,映射分布在所有的DNS服务器上。

 

DNS服务器分为四种类型:

   *根域名服务器(13个根域名服务器)

   *顶级域名服务器(负责顶级域名和所有国家的顶级域名)

   *权限域名服务器(负责一个区的域名服务器)

   *本地域名服务器(起到代理作用,一般像一个大学都有自己的本地域名服务器)

 

DNS是用户可以方便的访问网络,不需要记繁琐的IP地址。

DNS的解析查询方式有两种:迭代查询和递归查询。

 

第一种查询方式:迭代查询

以www.baidu.com为例:

   ·  用户主机向本地服务器A发送查询请求;

   ·  如果本地服务器A上有baidu的记录,则直接将baidu对应的IP返回给用户主机;

   ·  如果本地服务器A上没有记录,则向根域名服务器B发送查询请求;

   ·  根域名服务器B把负责com域的域名服务器C的IP地址返回给本地服务器A;

   ·  A再向C发送查询请求,获得负责baidu.com域的域名服务器D的IP地址;

   ·  A再向D发送查询请求,获得www.baidu.com对应的IP地址;

   ·  A将获得的IP地址返回给用户主机完成域名的解析。

第二种查询方式:递归查询

以www.baidu.com为例:

   ·  用户主机向本地服务器A发送查询请求;

   ·  如果本地服务器A上有baidu的记录,则直接将baidu对应的IP返回给用户主机;

   ·  如果本地服务器A上没有记录,则向根域名服务器B发送查询请求;

   ·  根域名服务器B向负责com域的域名服务器C发送请求;

   ·  C再向负责baidu.com域的域名服务器D发送查询请求;

   ·  D再返回给服务器C,www.baidu.com对应的IP地址,C返回给B,B返回给A;

   ·  A将获得的IP地址返回给用户主机完成域名的解析。

 

迭代查询和递归查询:

用户主机向本地服务器的查询一般都是用递归查询;而本地服务器的查询通常都是采用迭代查询,递归查询很少使用,对于流量比较大的13台根域名服务器如果对每个解析请求都代为查询的话,将会消耗极大的服务器的资源,很容易导致服务器崩溃。

 

 

 二.与服务器建立TCP连接

 

建立TCP连接需要用“三次握手”。

假设有客户A和服务器B,此时两者的TCP进程处于“CLOSED”状态。

   ·  A主动打开,A的TCP向B发送连接请求报文段,其首部的同步位SYN=1,并选择序号seq=x,表明传送数据的第一个数据字节的序号为x;

   ·  B的TCP收到连接请求报文段后,如同意,则返回确认,确认报文段中SYN=1,ACK=1,确认号ack=x+1,自己选择的序号seq=y,被动打开;

   ·  A收到此报文段后向B给出确认,其ACK=1,确认号ack=y+1,A的TCP通知上层应用进程,连接已经建立,B的TCP收到主机A的确认后,也通知其上层应用进程,连接已经建立;

 

 

三.客户端与服务器传送数据

 

在“最后一次握手”后,客户端向服务端开始传输数据,通信双方都有发送和接受两个窗口,双方分别有发送缓冲区和接受缓冲区,应用程序将数据提交给发送缓冲区,由TCP协议来控制,接收方将数据放到接受缓冲区,高层应用在合适的时间到缓冲区提取数据。

 

 

四.HTTP与TCP之间的关系

 

TCP:传输控制协议。握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”

 

HTTP:超文本传输协议。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
 

 

五.Http get请求过程

 

在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)。

 

Http的get方法请求从指定的资源获取数据。

GET提交,请求的数据会附在URL之后(就是把数据放置在请求行(request line)中),以?分割URL和传输数据,多个参数用&连接。Url的编码格式采用的是ASCII码,而不是Unicode,这也就是说你不能在Url中包含任何非ASCII字符,所有非ASCII字符均需要编码再传输。

 

例子:

 

请求

 

GET /DEMOWebServices2.8/Service.asmx/CancelOrder?UserID=string&PWD=string&OrderConfirmation=string HTTP/1.1
Host: api.efxnow.com

 

回复

 

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length


<--文档内容省略-->(注:文档内容与上面有一个空行)

 

六.Http post请求过程

 

Http的post方法向指定的资源提交要被处理的数据。

POST提交:把提交的数据放置在是HTTP包的包体中。因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变。

 

例子:

 

请求

 

POST /DEMOWebServices2.8/Service.asmx/CancelOrder HTTP/1.1
Host: api.efxnow.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length
<--此处空一行-->
UserID=string&PWD=string&OrderConfirmation=string

 

回复

 

Host: api.efxnow.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<--此处空一行-->

<--文档内容省略-->

 

 

七.Nginx

 

Nginx是一款轻量级夸平台的Web服务器。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。

其特点是占有内存少,并发能力强,安装简单,中国大陆使用nginx网站用户有:新浪、网易、腾讯等。

Nginx由内核和模块组成,内核设计简洁微小,完成工作简单便捷,仅通过查找配置文件将客户端请求映射到location block(location是Nginx配置中的一个指令,用于URL匹配),在location中配置的每个指令将会启动不同的模块完成相应的工作。

 

八.Nginx工作流程

 

Nginx接到一个HTTP请求时,它仅仅是通过查找配置文件将此次请求映射到一个location block,而此location中所配置的各个指令则会启动不同的模块去完成工作,因此模块可以看做Nginx真正的劳动工作者。通常一个location中的指令会涉及一个handler模块和多个filter模块(当然,多个location可以复用同一个模块)。handler模块负责处理请求,完成响应内容的生成,而filter模块对响应内容进行处理。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值