Full Stack Python logo Full Stack Python

全部主题 | Blog | 时讯 | @fullstackpython | Facebook | 源码

Web 服务器

Web 服务器响应来自客户端的 超文本传输协议 (HTTP)请求,然后给客户端发送回应,包括一个状态码,通常还有诸如 HTML、XML、或 JSON 格式的响应内容。

为何 Web 服务器是必要的?

Web 服务器和 web 客户端如同阴和阳。服务器和客户端使用万维网(World Wide Web, WWW)的标准语言沟通。 正式因为有了标准语言,老旧的 Mozilla Netscape 浏览器才依旧能够和一个现代的 web 服务器沟通,例如 Aache 或者 Nginx,即使它不能像现代浏览器那样较好地渲染页面样式。

采用从客户端到服务器,再从服务器回到客户端的请求和响应模型的 Web 基础语言仍然和 1989 年由 Tim Berners-Lee在 CERN 发明的 Web 基础语言保持一致。现代浏览器和 web 服务器只是简单地扩展了该语言,从而使它符合现代标准。

Web 服务器实现

Web 服务器的思想概念可以通过不同的方式来实现。以下列出的几种 web 服务器实现都有着不同的特性、扩展和配置。

  • Apache HTTP 服务器 在 20 多年里一直是因特网中最常部署的 web 服务器。

  • Nginx 是前 100 000 个网站中第二常用的 web 服务器,并且它通常作为 Python WSGI 服务器 的反向代理。

  • Caddy 是 web 服务器中的新星,专注服务启用了 HTTPS 的 HTTP/2 协议。

客户端请求

给 web 服务器发送请求的客户端通常是浏览器,例如 IE、Firefox、Chrome,但是它也可以是:

  • 无头浏览器,通常用于测试,例如 phantomjs
  • 命令行实用工具,比如 wgetcURL
  • 文本浏览器,如 Lynx
  • web 爬虫。

Web 服务器处理来自上述列出的客户端发出的请求。Web 服务器处理结果是 响应码,通常还有响应内容。但有些状态码,例如 204(无内容)和 403(禁止访问),就没有响应内容。

在一个简单的例子中,客户端会请求静态资源,如一幅图片或者 JavaScript 文件。请求的文件存放在 web 服务器文件系统中的一个位置,并且已被授权访问;然后,web 服务器会给客户端发送这个文件,同时发送一个值为 200 的状态码。如果客户端已经请求过这个文件了,并且文件并没有发生变动,那么 web 服务器将会传递回一个值为 304(未修改)的响应来标记客户端已经获取了最新版本的文件了。

Web server and web browser request-response cycle

Web 服务器会根据浏览器的请求给它发送文件。在第一次请求中,浏览器会访问 "www.fullstackpython.com" 地址,然后服务器作为响应会发送 HTML 格式的 index.html 文件。这个 HTML 文件包含了其他文件的引用,比如 style.css 和 script.js,然后浏览器会向服务器请求那些文件。

发送静态资源(如 CSS 和 JavaScript 文件)时会占用大量的网络带宽,这就是在可能的情况下使用内容分发网络(CDN)来为 静态资源提供服务 非常重要的原因。

Web 服务器相关的资源

  • HTTP/1.1 规格说明

  • 由 W3C 提供的完整的 HTTP 状态码 列表资料。

  • 4 个你应当一直使用的 HTTP 安全标头

  • 如果你正想通过构建一个 web 服务器来学习它的话,这里列出的 第一部分, 第二部分第三部分 就是教你如何使用 Python 编写 web 服务器的优秀教程。

  • rwasa 是一款新发布的 web 服务器,它采用汇编语言编写,没有额外的依赖,并被证明比 Nginx 还要快。值得看看这个基准,来看看这款服务器是否符合你的需求;当然,得要在最快的性能和未经测试的 web 服务器之间做权衡。

Web 服务器学习清单

  • 选择一个 web 服务器。通常推荐 Nginx,当然 Apache 也是一个不错的选择。

  • 创建一个 SSL 证书。对于测试来说,使用一个自签名的证书即可;而对于产品应用,就到 Digicert 上购买一个证书。配置 web 服务器以启用 SSL。你需要 SSL,从而仅提供 HTTPS 的流量服务,这样便可以阻止用户输入未加密的安全问题发生。

  • 配置 web 服务器,从而提供静态文件,如 CSS、JavaScript 和图片的访问服务。

  • 一旦你设置了 WSGI 服务器,你就需要配置 web 服务器来传送动态内容。

在配置完 web 服务器后,你想学点什么?

服务器上的什么程序会运行 Python 应用代码?

在服务器上如何安装 Python 库文件?

我有服务器了,我该如何配置它?

#### 在这里注册以便每月能收到一份邮件资料,内容包含本站的主要更新、教程和 Python 书籍的打折码等。

The Full Stack Python Guide to Deployments 想找到一个完整的,一步一步的部署方案吗?请看《The Full Stack Python Guide to Deployments》.

邮件获取更新

##### 注册以便每月能收到一份邮件资料,内容包含本站的主要更新和 Python 教程。

目录

1. 简介学习编程为什么用 Python?Python 2 还是 3?企业 PythonPython CommunityBest Python Podcasts最佳 Python 资源最佳 Python 视频2. 开发环境VimEmacs3. 核心语言生成器推导式4. Web 开发Web 框架DjangoFlaskBottlePyramidMorepath其它 Web 框架Web 设计级联样式表 (CSS)JavaScriptWebSockets模板引擎Web 应用安全静态网站生成器Jinja25. 数据关系型数据库NoSQL 数据存储对象关系映射器PostgreSQLMySQLSQLite6. Web APIsAPI 集成API 的创建Twilio7. 部署服务器平台即服务(PaaS)操作系统Web 服务器WSGI 服务器源码控制应用程序依赖静态内容任务队列配置管理持续集成日志监控Web 分析Docker缓存微服务DevOpsNginxApache HTTP 服务器CaddyGreen Unicorn (Gunicorn)UbuntuPelicanLektorMkDocs8. 测试单元测试集成测试代码度量调试9. MetaBotsChange LogFuture DirectionsAbout the AuthorSQLAlchemyPeewee …或者显示全部目录内容.

Web 服务器

重要的更新内容会通过 Twitter 账号@fullstackpython发布。


需要更加详细的教程吗?请看 《The Full Stack Python Guide to Deployments》。

Chapters

1. 简介2. 开发环境3. 核心语言4. Web 开发5. 数据6. Web APIs7. 部署 » Web 服务器 8. 测试9. Meta …or view the full table of contents.


This site is based on Matt Makai's project Full Stack Python, thanks for his excellent work!

此网站由 @haiiiiiyun开源爱好者们 共同维护。 若发现错误或想贡献,请访问: Github fullstackpython.cn 项目