搭建Apache与PHP
- 安装xampp套件,包含Apache和PHP
>>xampp下载
xampp简单配置
- 配置完会在本地启动web服务器,通过浏览器访问打开本地webserver下的php文件
|
|
>>PHP教程
web 服务器、PHP、数据库、浏览器实现动态网站的过程
客户端输入URL,DNS解析URL成IP地址
- 用户在客户端(浏览器)的地址栏输入访问资源所在的URL,然后本机(客户机)根据DNS特定的工作模式将URL解析成IP地址,从而通过IP地址寻址到对应的服务器
客户机通过TCP/IP协议建立到服务器的TCP连接
客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档
Web服务器向客户机发送HTTP协议响应包
- 如果请求的资源是html文档,则Web服务器在受到用户访问请求后,在它管理的文档目录中找到并打开相应的html文件(如index.htm),将文件内容响应给客户端浏览器
- 如果请求的资源是php文件,那么Web服务器本身不能处理php动态语言脚本文件,就寻找并委托PHP应用服务器——将用户请求访问的php文件(如index.php)文件交给PHP应用服务器来处理;php应用服务器接收php文件,打开并解释php文件并最终翻译成html静态代码,再讲html静态代码交还给Web服务器,Web服务器将接收到的html静态代码发送到客户端
- 如果请求的资源是访问数据库,那么Web服务器通过php应用服务器间接访问数据库;PHP应用服务器打开php文件,在php文件中通过对数据库连接的代码来连接本机或者网络上其他机器上的数据库,并在php程序中通过执行标准的SQL查询语句来获取数据库中的数据,再通过PHP应用服务器将数据生成html静态代码;
再将html静态代码交还给Web服务器,最后响应请求
客户端加载并解析文档
- 由客户端解释HTML文档,在客户端屏幕上渲染图形结果,最终实现网页在客户端的呈现
客户机与服务器断开
- 需要注意的是客户机与服务器之间的通信是非持久连接的,也就是当服务器发送了应答后就与客户机断开连接,等待下一次请求
常见的web服务器
Apache
- Apache是世界使用排名第一的Web服务器软件。它几乎可以运行在所有的计算机平台上。由于Apache是开源免费的,因此有很多人参与到新功能的开发设计,不断对其进行完善。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用
Nginx
- Nginx不仅是一个小巧且高效的HTTP服务器,也可以做一个高效的负载均衡反向代理,通过它接受用户的请求并分发到多个Mongrel进程可以极大提高Rails应用的并发能力。
IIS
- IIS(Internet信息服务)英文InternetInformationServer的缩写。它是微软公司主推的服务器。IIS的特点具有:安全性,强大,灵活。
Lighttpd
- Lighttpd是由德国人JanKneschke领导开发的,基于BSD许可的开源WEB服务器软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的webserver环境。具有非常低的内存开销,CPU占用率低,效能好,以及丰富的模块等特点。支持FastCGI,CGI,Auth,输出压缩(outputcompress),URL重写,Alias等重要功能。
Tomcat
- Tomcat是Apache软件基金会(ApacheSoftwareFoundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。
Zeus
- Zeus是一个运行于Unix下的非常优秀的Web服务器,据说性能超过Apache,是效率最高的Web服务器之一。
从URL到页面展现的过程
概述
- 地址栏输入URL
- 域名解析
- 服务器处理请求
- 网站处理
- 浏览器处理响应
- 浏览器绘制网页
输入URL
- URL(Uniform Resoure Locator)统一资源定位符,分为协议、网络地址、资源路径,用于定位互联网上的资源,即网址
协议:浏览器和万维网之间的约定
- http:找到网络上资源的协议
- https:对http进行加密的协议
- file:定位本地电脑文件的协议
- ftp:文件的传输协议
网络地址:指示连接哪台计算机,可以是域名或者IP地址,可以包括端口号
资源路径:指示从服务器上获取哪一项资源
http://www.baidu.com/question/12345/
协议:http
网络地址:www.baidu.com
资源路径:/question/12345/
域名解析
- 我们是通过域名访问,浏览器对域名解析成对应IP地址,找到计算机
IP地址
- IP地址为互联网上每一个网络和每一台主机分配的一个逻辑地址,如220.181.112.244
域名DN(domain name)
- 域名是为了识别主机名称和组织机构名称的一种具有分层的名称,如www.baidu.com
计算机域名系统DNS(Domain Name System or Domain Name Service)
- 主要是用于保存网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器,它是由域名解析器和域名服务器组成
域名解析的流程,如下
- 浏览器缓存——浏览器会缓存DNS记录一段时间
- 系统缓存——从Hosts文件查找是否有该域名和对应IP
- 路由器缓存——一般路由器也会缓存域名信息
- ISP DNS 缓存——比如到电信的DNS上查找缓存(DNS劫持)
- 如果都没有找到,则向根域名服务器查找域名对应IP,根域名服务器把请求转发到下一级,直到找到IP
- 域名与 URL 是两个概念:域名是一台或一组服务器的名称,用来确定服务器在 Internet 上的位置;URL 是统一资源定位符,用来确定某一个文件的具体位置,例如,zhihu.com 是 知乎 的域名,根据这个域名可以找到知乎的服务器, zhihu.com/people/Compile 是 URL ,可以根据这个 URL 定位我的知乎主页
- IP 地址与域名不是一一对应的关系:可以把多个提供相同服务的服务器 IP 设置为同一个域名,但在同一时刻一个域名只能解析出一个 IP地址;同时,一个 IP 地址可以绑定多个域名,数量不限
服务器处理请求
- 服务器上会有安装用于接收处理请求的应用——web server(常见的webserver产品有apache、nginx等),并且决定采用哪种方法来处理这个请求
- 网页请求是一个单向请求的过程,即是一个主机向服务器请求数据,服务器返回相应的数据的过程。
- web server 担任管控的角色,对于不同用户发送的请求,会结合配置文件,把不同请求委托给服务器上处理对应请求的程序进行处理(例如JSP脚本,服务器端JavaScript等一些服务器端技术),然后返回后台程序处理产生的结果作为响应
- 浏览器根据 URL 内容生成 HTTP 请求,请求中包含请求文件的位置、请求文件的方式等
- 服务器响应请求,将数据(可能是根据HTML协议组织的网页,包含页面的布局、文字等)返回给浏览器
- 如果返回的是一个页面,根据页面里一些外链的URL,例如图片的地址,它会按照之前的步骤以及第二步中忽略的请求部分再次获取
网站处理响应
- 网站处理,就是实际后台处理的工作
MVC
- MVC是一种设计模式,模型(model)–视图(view)–控制器(controller),它们各自处理自己的任务,实现输入、处理和输出的分离
- 最上面的一层-视图(view):视图是直接面向用户的一层,是前端工作的主力部分
- 最底下的一层-模型(model):模型是将实际开发中的业务规则和所涉及的数据格式模型化,应用于模型的代码只需写一次就可以被多个视图重用。在MVC的三个部件中,模型拥有最多的处理任务。一个模型能为多个视图提供数据
- 中间的一层-控制器(controller):它负责根据用户从”视图层”输入的指令,选取”数据层”中的数据,然后对其进行相应的操作,产生最终结果

首先,控制器(controller)接收用户请求,并决定调用哪种模型来进行处理
然后,模型(model)用业务逻辑来处理用户的请求并返回数据
最后,控制器(controller)用相应的视图格式化模型返回html字符串给浏览器,浏览器呈现网页给用户。这部分完成后,就要开始接下来的浏览器处理部分
浏览器处理
- 现代浏览器渲染页面的过程是这样的:解析HTML以构建DOM树 –> 构建渲染树 –> 布局渲染树 –> 绘制渲染树
浏览器渲染步骤
加载
- 浏览器对一个html页面的加载顺序是从上而下的,并在加载过程并行进行解析渲染处理。在这个过程中遇到link标签、image标签、script标签时,浏览器会再次向服务器发送请求获取CSS文件、图片资源、JS文件,并执行JS代码,同步进行加载解析
解析、渲染
- 解析的过程,其实就是生成解析树,即DOM树。DOM树是由DOM元素及属性节点组成,加上CSS解析的样式对象和js解析后的动作实现。而渲染,就是将DOM树进行可视化表示
网页展示
- 浏览器通过上面步骤计算得到渲染树,是DOM树的可视化表示,构建渲染树使页面以正确的顺序绘制出来
- 浏览器下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染同时进行
网页展示步骤
- 解析html成DOM树
- 解析html中的css,构建渲染树。完成后浏览器开始布局渲染树并绘制到屏幕
- 解析JavaScript,解析到的时候执行(JS的解析由浏览器中的JS解析引擎完成)