网络服务器初探

来源:互联网 发布:齐柏林飞艇 知乎 编辑:程序博客网 时间:2024/05/06 02:15

最近在学习网络编程,为了结合实例,打算研读一下nginx的源码,在细说nginx之前,先从宏观上弄清楚网络服务器的定义及其与浏览器的交互。

先看wiki上的定义:

网页服务器(Web server)一词有三个意思:
一台提供服务的电脑
一台负责提供网页的电脑,主要是HTML文件,通过HTTP协定传给客户端(一般是指网页浏览器)。
一个提供网页的服务器程序。

虽然每个网页服务器程序有多不同,但都有着一些共同的特点。每一个网页服务器程序从网络接受HTTP请求,然后提供HTTP回复给请求者。HTTP回复一般包含一个HTML文件,但也可以包含一个纯文本文件、一个图像或其他类型的文件。
一般来说这些文件都存储在网页服务器的本地文件系统里,而URL和本地文件名都有一个阶级组织结构的,服务器会简单的把URL对照到本地文件系统中。当正确安装和设置好网页服务器软件,服务器管理员会从服务器软件放置文件的地方指定一个本地路径名为根目录。
例如,我们在example.funnycorp.com服务器上设置了服务器软件,我们可以把服务器软件的根目录设置为/home/public/web/,当一个浏览者输入URL http://example.funnycorp.com/lips/raspberry.html,example.funnycorp.com上的服务器软件就会读取/home/public/web/lips/raspberry.html这个文件。

通过以上来理解:网络服务器最基本的作用就是接收浏览器请求,然后从本地(或网络上)获取该HTML文件(或图像,文本等其他类型的文件),把这些文件通过层层的网络封装后发送到客户端浏览器上。至于这些文件如何解析和展示给用户,那就是浏览器的问题了。

接下来再粗略的看一下浏览器的功能。

浏览器详解看这里:http://kb.cnblogs.com/page/129756/

浏览器的主要功能
  浏览器的主要功能是将用户选择的web资源呈现出来,它需要从服务器请求资源,并将其显示在浏览器窗口中,资源的格式通常是HTML,也包括PDF、image及其他格式。用户用URI(Uniform Resource Identifier统一资源标识符)来指定所请求资源的位置。
  HTML和CSS规范中规定了浏览器解释html文档的方式(这就是为什么HTML文件开头总带着协议规范了),由W3C组织对这些规范进行维护,W3C是负责制定web标准的组织。

浏览器的主要构成(High Level Structure)
  浏览器的主要组件包括:
  1. 用户界面 - 包括地址栏、后退/前进按钮、书签目录等,也就是你所看到的除了用来显示你所请求页面的主窗口之外的其他部分。
  2. 浏览器引擎 - 用来查询及操作渲染引擎的接口。
  3. 渲染引擎 - 用来显示请求的内容,例如,如果请求内容为html,它负责解析html及css,并将解析后的结果显示出来。
  4. 网络 - 用来完成网络调用,例如http请求,它具有平台无关的接口,可以在不同平台上工作。
  5. UI后端 - 用来绘制类似组合选择框及对话框等基本组件,具有不特定于某个平台的通用接口,底层使用操作系统的用户接口。
  6. JS解释器 - 用来解释执行JS代码。
  7. 数据存储 - 属于持久层,浏览器需要在硬盘中保存类似cookie的各种数据,HTML5定义了web database技术,这是一种轻量级完整的客户端存储技术。 

需要注意的是,不同于大部分浏览器,Chrome为每个Tab分配了各自的渲染引擎实例,每个Tab就是一个独立的进程。(这应该就是chrome占用内存的原因了吧。)


HTTP使用一种基于消息的模型:客户端送出一条请求消息,而后由服务器返回一条响应消息。该协议基本上不需要连接,虽然HTTP使用有状态的TCP协议作为它的传输机制,但每次请求和响应交换都自动完成,并且可能使用不同的TCP连接。

因为我以前并没有用过nginx,所以这里用tomcat举例说明一下流程吧。首先,在浏览器中打上localhost:8080/**/**,tomcat监听该端口,发现请求后进行与请求想对应的处理动作(就是上层的java应用程序),然后把处理结果或html文件封装后发给客户端浏览器。