Web 服务器

当我们在浏览器输入URL后,浏览器会先请求DNS服务器,获得请求站点的 IP 地址。然后发送一个HTTP Request(请求)给拥有该 IP 的主机,接着就会接收到服务器给我们的 HTTP Response(响应),浏览器经过渲染后,以一种较好的效果呈现给我们。这个过程中,正是Web服务器在幕后默默做贡献。

简单来说,Web服务器是在运行在物理服务器上的一个程序,它永久地等待客户端(主要是浏览器,比如Chrome,Firefox等)发送请求。当收到请求之后,它会生成相应的响应并将其返回至客户端。Web服务器通过HTTP协议与客户端通信,因此也被称为HTTP服务器。


Web服务器的工作原理并不复杂,一般可分成如下4个步骤:建立连接、请求过程、应答过程以及关闭连接

  1. 建立连接:客户机通过TCP/IP协议建立到服务器的TCP连接。
  2. 请求过程:客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档。
  3. 应答过程:服务器向客户机发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端。由客户端解释HTML文档,在客户端屏幕上渲染图形结果。
  4. 关闭连接:客户机与服务器断开。

虽然说web服务器的主要工作是根据request返回response,但是实际中的 Web 服务器远远比上面示例的复杂的多,因为要考虑的因素实在是太多了,比如:

  • 缓存机制:讲一些经常被访问的页面缓存起来,提高响应速度;
  • 安全:防止黑客的各种攻击,比如 SYN Flood 攻击;
  • 并发处理:如何响应不同客户端同时发起的请求;
  • 日志:记录访问日至,方便做一些分析。

目前在UNIX和LINUX平台下使用最广泛的免费 Web 服务器有ApacheNginx


Web 应用程序

Web 服务器接受 Http Request,返回 Response,很多时候 Response 并不是静态文件,因此需要有一个应用程序根据 Request 生成相应的 Response。这里的应用程序主要用来处理相关业务逻辑,读取或者更新数据库,根据不同 Request 返回相应的 Response。注意这里并不是 Web 服务器本身来做这件事,它只负责 Http 协议层面和一些诸如并发处理,安全,日志等相关的事情

应用程序可以用各种语言编写(Java, PHP, Python, Ruby等),这个应用程序会从Web服务器接收客户端的请求,处理完成后,再返回响应给Web服务器,最后由Web服务器返回给客户端。整个架构如下:


以 Python 为例,使用Python开发Web,最原始和直接的办法是使用CGI标准,在1998年这种方式很流行。首先确保 Web 服务器支持CGI及已经配置了CGI的处理程序,然后设置好CGI目录,在目录里面添加相应的 python 文件,每一个 python 文件处理相应输入,生成一个 html 文件即可,如下例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-print "Content-type:text/html"
print         # 空行,告诉服务器结束头部
print '<html>'
print '<head>'
print '<meta charset="utf-8">'
print '</head>'
print '<body>'
print '<h2>Hello Word! 我是一个CGI程序</h2>'
print '</body>'
print '</html>'

这样在浏览器访问该文件就可以得到一个简单的 Hello World 网页内容。直接通过 CGI 写 Web 应用程序看起来很简单,每一个文件处理输入,生成html。但是实际开发中,可能会遇到许多不方便的地方。比如:

  • 每个独立的CGI脚本可能会重复写数据库连接,关闭的代码;
  • 后端开发者会看到一堆 Content-Type 等和自己无关的 html 页面元素;

Web 框架

早期开发站点确做了许多重复性劳动,后来为了减少重复,避免写出庞杂,混乱的代码,人们将 Web 开发的关键性过程提取出来,开发出了各种 Web 框架。有了框架,就可以专注于编写清晰、易维护的代码,无需关心数据库连接之类的重复性工作。

其中一种比较经典的Web框架采用了MVC架构,如下图所示:

用户输入 URL,客户端发送请求,控制器(Controller)首先会拿到请求,然后用模型(Models)从数据库取出所有需要的数据,进行必要的处理,将处理后的结果发送给视图(View),视图利用获取到的数据,进行渲染生成 Html Response返回给客户端。

以 python web 框架 flask 为例,框架本身并不限定我们用哪种架构来组织我们的应用,不过 flask 可以很好地支持以 MVC 方式组织应用。

控制器:flask 可以用装饰器来添加路由项,如下:

@app.route('/')
def main_page():pass

模型:主要用来取出需要的数据,如下面函数中操作:

@app.route('/')
def main_page():"""Searches the database for entries, then displays them."""db = get_db()cur = db.execute('select * from entries order by id desc')entries = cur.fetchall()return render_template('index.html', entries=entries)

视图:flask 利用 jinja2 来渲染页面,下面的模版文件指定了页面的样式:

{% for entry in entries %}
<li><h2>{{ entry.title }}</h2><div>{{ entry.text|safe }}</div>
</li>
{% else %}
<li><em>No entries yet. Add some!</em></li>
{% endfor %}

Web 服务器网关接口

我们知道Python有着许多的 Web 框架,而同时又有着许多的 Web 服务器(Apache, Nginx, Gunicorn等),框架和Web服务器之间需要进行通信,如果在设计时它们之间不可以相互匹配的,那么选择了一个框架就会限制对 Web 服务器的选择,这显然是不合理的。

那么,怎样确保可以在不修改Web服务器代码或网络框架代码的前提下,使用自己选择的服务器,并且匹配多个不同的网络框架呢?答案是接口,设计一套双方都遵守的接口就可以了。对python来说,就是WSGI(Web Server Gateway Interface,Web服务器网关接口)。其他编程语言也拥有类似的接口:例如Java的Servlet API和Ruby的Rack。

Python WSGI的出现,让开发者可以将 Web 框架与 Web 服务器的选择分隔开来,不再相互限制。现在,你可以真正地将不同的 Web 服务器与Web框架进行混合搭配,选择满足自己需求的组合。例如,可以使用 Gunicorn 或Nginx/uWSGI来运行Django、Flask或web.py应用。

原文链接:从零开始搭建论坛(一):Web服务器与Web框架

web服务器与web框架相关推荐

  1. web服务器、Web中间件和Web容器的区别

    目录 Web服务器 中间件 容器 总结 Web开发的选择 我们经常会被Web服务器.Web容器和Web中间件这三个概念搞混.因为我们常见的很多网站要么是由IIS搭建,要么是由Apache.Tomcat ...

  2. web服务器,web中间件,web容器的区别

    web服务器,中间件,web容器 web服务器 中间件 web容器 结论 前言:才学习的时候,就听过大名鼎鼎的web服务器,apache,iis,tomcat,后面进一步学习的时候,发现有个web中间 ...

  3. 【githubshare】可对 Web 容器、Web 服务器、Web 中间件以及 CMS 等 Web 程序进行漏洞扫描的软件

    GitHub 上一款开源的漏洞扫描工具:Vulmap,可对 Web 容器.Web 服务器.Web 中间件以及 CMS 等 Web 程序进行漏洞扫描,并且具备漏洞利用功能. 相关测试人员可以使用 vul ...

  4. web服务器和web应用服务器的区别

    首先,web服务器和web应用服务器不是同一个概念.起初,我也把两者混为一谈.现在说说自己对这两个的理解,如有不对之处,欢迎指出. web应用服务器 在java web开发时,最早接触的web服务器是 ...

  5. Web服务器,Web容器和应用服务器的区别

    转载自http://www.2cto.com/os/201504/395183.html 1.什么是服务器? 2.Web服务器,Web容器和应用服务器的区别? 3.Apache和Tomcat的区别? ...

  6. web浏览器与网站服务器,web服务器和web浏览器

    web服务器和web浏览器 内容精选 换一换 当您需要实现网站HTTPS化,并监控HTTPS业务流量,识别并阻断SQL注入.CC攻击等攻击,保护Web服务安全稳定时,本文档指导您如何实现网站HTTPS ...

  7. web 服务器和 web 技术发展历史简介

    最早的软件都是运行在大型机上的,软件使用者通过"哑终端"登陆到大型机上去运行软件.后来随着PC机的兴起,软件开始主要运行在桌面上,而数据库这样的软件运行在服务器端,这种Client ...

  8. web服务器文件管理,web文件管理服务器

    web文件管理服务器 内容精选 换一换 该任务指导用户在SSL证书管理平台下载证书.证书状态为已签发或托管中.仅支持在证书有效期内,不限次数的下载证书,下载后即可在服务器(华为云的或非华为云的均可)上 ...

  9. Java Web学习总结(27)——JavaEE中Web服务器、Web容器、Application服务器区别及联系

    在JavaEE 开发Web中,我们经常会听到Web服务器(Web Server).Web容器(Web Container).应用服务器(Application Server),等容易混淆不好理解名词. ...

  10. 显示web服务器登陆,web服务器登陆界面

    web服务器登陆界面 内容精选 换一换 云解析服务支持为域名快速添加网站解析,通过该功能可以简化解析记录的配置,包含如下两种场景:网站解析至IP地址:为域名的主域名和子域名分别添加一条A类型记录集网站 ...

最新文章

  1. MIT开发的一款最新Chrome插件,功能远超OCR软件,可快速识别和复制图中文字
  2. Altium designer关于铺铜的操作
  3. 156. Leetcode 53. 最大子数组和 (贪心算法-进阶题目)
  4. rsyslogd 重启_ubuntu12.04 syslog记录正常与非正常关机重启
  5. C语言学习之用筛选法求100之内的素数
  6. 【HDU - 6186】CS Course(按位与,按位或,按位异或的区间统计,二进制拆位)
  7. 网关 Kong 折腾笔记 - 相关技术清单
  8. android一般会重载7个方法,《Android技术应用》答案(2013年)
  9. JavaScript基础面试题
  10. Apache OpenNLP
  11. 使用Asp.net MVC 2.0 +.NET 4.0 出现 “从客户端 ... 中检测到有潜在危险的 Request.Form 值”错误的解决办法...
  12. 20.从0开始的微服务架构
  13. 蜂鸣器驱动电路图大全(五款蜂鸣器驱动电路原理图)
  14. 第一章:计算机网络概述
  15. 微信公众号发红包 php,php微信公众号接口实现发红包的方法
  16. 【“玩物立志”-scratch少儿编程】亲手实现小猫走迷宫小游戏:其实挺简单
  17. 微信公众号模板如何使用?公众号模板教程!
  18. 本地repos Mac
  19. 对称复曲线(直线、缓曲、圆曲、缓曲、直线)中边桩坐标计算
  20. Discus 论坛 使用方法

热门文章

  1. JavaScript简易文字对战游戏
  2. Java开发的文字RPG游戏,代码开源
  3. 文件类型识别工具:TrID(trid)下载安装及使用
  4. bochs运行xp_bochs xp镜像完整版
  5. 青花瓷(charles)的基本使用和注意事项
  6. 计算机表格计算公式加法,加法公式excel,excel表格如何用公式计算加减乘除混合运算?...
  7. 【复习】数学分析知识点梳理【思维导图】
  8. 5V升压充电12.6V锂电池方案
  9. use mysql命令_mysql命令-use
  10. tcgames使用有延迟_心得分享:tcgames电脑玩刺激战场怎么用最流畅?