一 动态页面与静态页面区别
静态页面:每一个网页都有一个固定的URL,且网页的URL以.html、.htm、.shtml等常见的形式为后缀。
网页内容已经发布到网站服务器上,无论是否有用户访问,每个静态页面都保存在网站服务器上,也就是说静态网页是实实在在的保存在服务器上的文件,每个网页都是一个独立的文件
静态网页没有数据库支持,在网站制作和维护方面工作量较大
静态网页的交互性较差,在功能方面有较大的限制
说白了就是把页面上所有的东西设定好、做死了,然后放上去,不管谁在任何时候看到的页面内容都是一样的,一成不变(除非手动修改页面)
动态页面:动态网页以数据库技术为基础,可以大大降低网站维护的工作量
采用动态网页技术的网站可以实现更多的功能,如注册用户登录、在线查询、用户管理等。
动态页面客户端发到服务端的请求会经过一个WEB server来处理,如果请求是静态资源,则交给web服务器。如果是动态资源,则现将请求叫一个WEB Container(WEB容器),在WEB Container中连接数据库,从数据库进行一系列的操作然后动态拼凑页面的展示内容,最后把页面交给WEB服务器,之后通过服务器将内容返回给客户端
什么是Web Server
web 服务器 主要功能是提供网上信息浏览服务。Web服务器可以解析http协议当Web服务器接收到一个http请求(request),会返回一个HTTP响应(response),例如送回一个HTML页面。为了处理一个请求(request),Web服务器可以响应(response)一个静态页面或图片,进行页面跳转,或者把动态响应的产生委托给一些其它的程序例如CGI脚本,JSP脚本等。无论它们的目的如何,这些服务器端的程序通常产生一个HTML的响应(response)来让浏览器可以浏览。
常见的Web Server 有Nginx Apache lighttp等
打个比方吧,你要登录淘宝买东西这个一个步骤。
如上图就是用户在访问淘宝主页后再登录的过程
apache无法处理动态请求,所以我们要编写一个个的功能来处理这动态请求
处理动态请求的伪代码 可以称之为web application 或简称为web app
1.接受apache提交的用户请求,触发函数运行
2.连接数据库
3.操作数据库
4.根据获取的数据进行其他的逻辑处理
5.返回给apache
6.关闭数据库
这样会有三大问题
1.首先要研究透彻http协议。
2.该代码只是为apache定制的代码,更换其它web server则无法使用
3.若有其他动态请求(除了登录外)其他的请求,那么还要重复开发,影响效率
解决问题的方法
1.重新定义一种协议标准。比如之前的web server 与web app 之间的"暗号"(http协议)晦涩难懂,那么这回就在原来的"暗号"上(http协议)弄一个"简单的暗号"
2.apache是一个web server 这回换成nginx服务。nginx也是一个web server,那么只要是web server都要遵守http协议这个"简单的暗号"。所以,解决了问题一也就解决了问题二
3.将重复的代码定义一个框架,当重复用的时候只要调取这个框架就可以了。这个框架叫web app框架(也叫web框架)
这样,三大问题就解决了。这里面的"简单暗号"就是网关协议 (例如cgi)
大家看下图
一般的web app框架都是遵守网关协议的。也就是说,如果遵守了web app的框架,那么就遵守了网关协议。遵守了网关协议也就遵守了http协议。所以说只要按照web app框架去开发web app就可以了。
网关协议有哪些
CGI即通用网关接口(Common Gateway interface)。是web server 与web app见得接口标准
优点:CGI程序主要由Perl编写,但它可以由多种语言写成,一个有Bug的CGI程序不会使Web服务器崩溃。
因为CGI程序在它们的操作系统shell中执行,这些程序与执行同一个CGI程序的其它HTTP请求不会出现并发冲突,所有服务为CGI程序提供支持
跨平台性强
缺点:CGI程序的应该答时间很长,会大量占用系统资源
CGI不具有升级性
CGI语言不是安全和面向对象的
Fastcgi即快速cgi。大体上与cgi流程一样。只不过唯一区别是CGI的工作流程是:web server -->请求 -->cgi -->子进程-->处理请求-->web server-->关掉子进程。这样的流程是非常消耗系统资源的,所以fastcgi与cgi的区别是。产生一个子进程处理完请求后并不会直接关闭。等到下一次请求的时候直接处理。
重点——网关协议之WSGI
WSGI即(“Python” Web Server Gateway interface)的缩写 。是Python语言定义的Web服务器和Web应用程序框架之间简单通用的接口。它只是一个接口定义:它即不负责服务器的实现,也不负责网页应用的实现。它只是一个两边接口方式的约定(就像一种暗号)
中间件的含义
中间件的好处:
完成缓存、字符编码转换等一些其他功能
并且这种设计降低了server端与web app端耦合度之后的产物。提升了灵活性
如何使用wsgi部署keystone
现在社区主流的部署方法有:
apache(wsgi)+keystone
nginx(uwsgi)+keystone
步骤流程