1. 简单描述下web 服务器、PHP、数据库、浏览器是如何实现动态网站的?
- 用户端访问服务端的HTML文件
- 用户本机中的host文件中查找,若找不到就会继续向上一级的DNS(域名服务器)寻找相应的DNS服务器,将网站的主机域名解析为操作系统中对应的IP地址,如
http://www.baidu.com/
对应的IP地址为14.215.177.37
- 通过http协议链接到IP地址对应的web服务器系统,通过默认的80端口请求web服务器上的对应目录下的html文件,一般80端口为计算机默认的本地端口,输入URL(资源定位符)不用输入端口
- web服务器收到用户的访问请求后,在它管理的目录中找到对应的html文件,并将内容响应给浏览器
- 浏览器收到web服务器的响应后,接收和下载传输过来的html代码,并进行解析,生成DOM树和渲染树,最终将页面呈现出来
- 用户端访问服务器端的php文件
- 该步与上面访问html静态网页是一样的,通过DNS服务器解析出相应的Web服务器的IP地址。
- 与上面访问html静态页面相似,不过最后请求的是web服务器上相应目录下的php文件,如index.php
- web服务器自己不能处理php的动态脚本语言,于是寻找相应的PHP应用服务器处理,并将请求访问的php文件交给php应用服务器
- PHP应用服务器接收php文件(如index.php),打开并解释php文件,最终翻译成html静态代码,再将html静态代码交还给web服务器,web服务器将接收到的html静态代码输出到浏览器
- 与上面访问html静态页面相同,浏览器收到Web服务器的响应后,接收并下载服务器端的html静态代码,然后浏览器解读代码,最终将网页呈现出来
- 用户端访问服务器端的MySQL数据库
- 该步与上面访问php文件一样,通过DNS服务器解析出相应的Web服务器的IP地址
- 与上面访问php文件一样,请求访问web服务器上相应目录下的php文件
- 与上面访问php文件一样,PHP应用服务器接收Apache服务器的委托,收到相应的php文件
- PHP应用服务器打开php文件,在php文件中通过对数据库连接的代码来连接本机或者网络上其他机器上的MySQL数据库,并在php程序中通过执行标准的SQL查询语句来获取数据库中的数据,再通过PHP应用服务器将数据生成html静态代码
- 浏览器收到Web服务器的响应后,接收并下载服务器端的html静态代码,然后浏览器解读代码,最终将网页呈现出来
- 小结:3种访问方式的区别,第1种由于它访问的是web服务器上静态的html代码,所以它没有必要像第2种php文件需要委托给php应用的服务器进行编译为html代码再进行发送,而第三种只是在第二种的基础上访问了
多了一步访问数据库。
2.常见的 WEB 服务器有哪些?
- Web服务器可以解析HTTP协议。当Web服务器接收到一个HTTP请求,会返回一个HTTP响应,例如送回一个HTML页面。为了处理一个请求Web服务器可以响应一个静态页面或图片,进行页面跳转或者把动态响应的产生委托给一些其它的程序例如CGI脚本,JSP脚本,servlets,ASP脚本,服务器端JavaScript,或者一些其它的服务器端技术。无论脚本的目的如何,这些服务器端的程序通常产生一个HTML的响应来让浏览器可以浏览
- 在UNIX和Linux平台下使用最广泛的免费HTTP服务器是W3C、NCSA和APACHE服务器,而Windows平台NT/2000/2003使用IIS的WEB服务器。在选择使用WEB服务器应考虑的本身特性因素有:性能、安全性、日志和统计、虚拟主机、代理服务器、缓冲服务和集成应用程序等,下面介绍几种常用的WEB服务器
- Microsoft的Web服务器产品为Internet Information Server (IIS), IIS 是允许在公共Intranet或Internet上发布信息的Web服务器。IIS是一种Web服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。它提供ISAPI(Intranet Server API)作为扩展Web服务器功能的编程接口;同时,它还提供一个Internet数据库连接器,可以实现对数据库的查询和更新
- WebSphere Application Server 是 一 种功能完善、开放的Web应用程序服务器,是IBM电子商务计划的核心部分,它是基于 Java 的应用环境,用于建立、部署和管理 Internet 和 Intranet Web 应用程序。IBM 将提供 WebSphere 产品系列,通过提供综合资源、可重复使用的组件、功能强大并易于使用的工具、以及支持 HTTP 和 IIOP 通信的可伸缩运行时环境,来帮助这些用户从简单的 Web 应用程序转移到电子商务世界。
- BEA WebLogic Server 是一种多功能、基于标准的web应用服务器,为企业构建自己的应用提供了坚实的基础。各种应用开发、部署所有关键性的任务,无论是集成各种系统和数据库,还是提交服务、跨 Internet 协作,起始点都是 BEA WebLogic Server。由于 它具有全面的功能、对开放标准的遵从性、多层架构、支持基于组件的开发,基于 Internet 的企业都选择它来开发、部署最佳的应用。
- apache仍然是世界上用的最多的Web服务器,市场占有率达60%左右。它源于NCSAhttpd服务器,当NCSA WWW服务器项目停止后,那些使用NCSA WWW服务器的人们开始交换用于此服务器的补丁,这也是apache名称的由来(pache 补丁)。世界上很多著名的网站都是Apache的产物,它的成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux系统平台上)以及它的可移植性等方面。
- Tomcat是一个开放源代码、运行servlet和JSP Web应用软件的基于Java的Web应用软件容器。Tomcat Server是根据servlet和JSP规范进行执行的,因此我们就可以说Tomcat Server也实行了Apache-Jakarta规范且比绝大多数商业应用软件服务器要好。目前,许多大型Web应用一般将Apache和Tomcat结合使用,Apache负责接收用户的HTTP请求,如果请求是Servlet、Jsp,则把请求转发给Tomcat处理,并将处理结果封装响应给用户。
- Zeus:是一个运行于Unix下的非诚优秀的Web服务器,据说性能超过Apache,是效率最高的Web服务器之一。
- Nginx:不仅是一个小巧且高效的HTTP服务器,也可以做一个高效的负载均衡反向代理,通过它接受用户的请求并分发到多个Mongrel进程可以极大提高Rails应用的并发能力。
- Lighttpd:它是由得国人JanKneschke领导开发的,基于BSD许可的开源WEB服务器软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的webserver环境。具有非常低的内存开销,CPU占用率低,效能好,以及丰富的模块等特点。支持FastCGI,CGI,Auth,输出压缩(outputcompress),URL重写,Alias等重要功能。
- Sun的Java系统Web服务器也就是以前的Sun ONE Web Server。主要出现在那些运行Sun的Solaris操作系统的关键任务级Web服务器上。它最新的版本号是6.1,可以支持x86版本Solaris,Red Hat Linux,HP-UX 11i, IBM AIX,甚至可以支持Windows,但它的大多数用户都选择了SPARC版本的Solaris操作系统。
- GFEGoogle的web服务器,用户数量激增。目前紧逼iis。
- Resin提供了最快的jsp/servlets运行平台。在java和javascript的支持下,Resin可以为任务灵活选用合适的开发语言。Resin的一种先进的语言XSL(XML stylesheet language)可以使得形式和内容相分离。
- Jetty是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。
3.打开浏览器,在地址栏输入 http://jirengu.com 页面展现了饥人谷官网的信息,整个过程发生了什么?(饥人谷官网后台语言 php,web服务器 nginx,数据库 mysql)
- 浏览器查找域名相对应的IP地址,当然浏览器会先在自身DNS缓存记录中查找有无该地址的映射。如果没有找到,便会去系统缓存中寻找有无这个记录,没有的话,再到路由器中查找,还没有的话再到ISP服务商的DNS缓存中查找,最后没有则将从顶级域名服务器的根服务器开始递归查询,一层一层的查找DNS,知道找到对应的IP。
-浏览器将请求发给Nginx,Nginx响应之后根据用户需求,通过PHP应用处理程序进行处理,若设计到用户登录及数据的增删改查,PHP会与数据库MySQL进行交互,最后服务器会返回一个静态的html文档
- 服务器将静态的HTML文档发送到客户端(浏览器)
- 浏览器收到服务器响应后,开始下载HTML代码,通过解析和渲染,呈现出网页的页面
- 浏览器的下载、解析、渲染都是从上到下的
- 解析下载的HTML代码,生成DOM树
- 解析html代码中的CSS文件,结合dom树进行css渲染
- 解析dom树的每个节点的几何结构,把节点绘制到屏幕上
4.解析js文件,解析完成后执行,一般放在页面的最后 - 最后把遇到的关联资源内图片、音频、视频进行并行下载,一般而言同一域名并行下载的数量有限,通常把图片、音频、视频等较大的资源放在不同的域名下,但缺陷是用户体验不好
- 到此一个页面终于出现了
- 但若是登陆修改信息,浏览器会通过ajax处理页面的异步请求
- 最后如果出现一些非常规的响应处理,状态码报错
- 301 (SC_MOVED_PERMANENTLY)状态是指所请求的文档在别的地方;文档新的URL会在定位响应头信息中给出。浏览器会自动连接到新的URL。
- 400 (SC_BAD_REQUEST)指出客户端请求中的语法错误
- 401 (SC_UNAUTHORIZED)表示客户端在授权头信息中没有有效的身份信息时访问受到密码保护的页面。这个响应必须包含一个WWW-Authenticate的授权信息头,限制访问Web页
- 403 (SC_FORBIDDEN)的意思是除非拥有授权否则服务器拒绝提供所请求的资源。这个状态经常会由于服务器上的损坏文件或目录许可而引起。
- 404 (SC_NOT_FOUND)状态每个网络程序员可能都遇到过,他告诉客户端所给的地址无法找到任何资源。它是表示“没有所访问页面”的标准方式。这个状态码是常用的响应并且在HttpServletResponse类中有专门的方法实现它:sendError("message")。相对于setStatus使用sendError得好处是:服务器会自动生成一个错误页来显示错误信息。
- 405 (SC_METHOD_NOT_ALLOWED)指出请求方法(GET, POST, HEAD, PUT, DELETE, 等)对某些特定的资源不允许使用。
- 406 (SC_NOT_ACCEPTABLE)表示请求资源的MIME类型与客户端中Accept头信息中指定的类型不一致。
- 500 (SC_INTERNAL_SERVER_ERROR) 是常用的“服务器错误”状态。该状态经常由CGI程序引起也可能(但愿不会如此!)由无法正常运行的或返回头信息格式不正确的servlet引起
- 502 (SC_BAD_GATEWAY)被用于充当代理或网关的服务器;该状态指出接收服务器接收到远端服务器的错误响应
- 状态码503 (SC_SERVICE_UNAVAILABLE)表示服务器由于在维护或已经超载而无法响应