Web服务器

Web服务器从客户端接收Hypertext Transfer Protocol (HTTP) 请求,发送相应数据,比如HTML,XML,JSON。

为什么Web服务器必须?

Web服务器和客户端通过标准语言沟通。通过这种标准语言,一个陈旧的Mozilla Netscape浏览器能和一个现代的Apache 或 Nginx web服务器沟通。

自从1989年Tim Berners-Lee在CERN发明WEB以来,客户端和服务器端通信的语言和方式基本没有什么变化。现代浏览器和web服务器只是简单拓展了web的语言。

Web server实现

Web服务器能被多种方式实现。下面个各种Web服务器有各自特色,扩展和配置方式:

  • Apache HTTP Server 是Internet上最常用的web服务器,已经使用了20多年
  • Nginx 是第二大web服务器,部署超过10万个网站,常被用作Python WSGI servers的反向代理
  • Caddy 是一个新的web服务器,专注于托管HTTP/2协议和HTTPS。

客户端请求

客户端发送请求到web服务器,客户端通常是浏览器,比如IE,Firefox,Chrome,但是也可以是:

  • 没有头部的浏览器,通常做测试用,比如phantomjs
  • 命令行指令,比如wget 和 cURL
  • 基于文本的浏览器,如Lynx
  • 网络爬虫

Web服务器处理来自客户端的请求。Web服务器处理结果包括一个响应代码response code 和响应内容。有些响应代码,比如204 (没有内容) 和403 (禁止访问),不会产生响应内容。

简单情况下,客户端会请求静态内容比如图片或JavaScript文件。Web服务器会授权访问,并返回一个200状态代码。如果客户端已经请求过这个文件,并且该文件没有更改过,web服务器会传回响应代码304(没有更改),告诉客户端已经有最新版的改文件。

Web server and web browser request-response cycle

Web服务器根据浏览器的请求发送数据。第一次请求,浏览器访问”www.fullstackpython.com” 地址,web服务器发送index.html文件。这个HTML文件包含了指向其他文件的路径,比如style.css和script.js。

发送静态文件(比如CSS 和JavaScript 文件) 会占用很大一部分带宽,因此必要时会使用内容分发网络CDN。

Web服务器资源

  • HTTP/1.1 Specification
  • A reference with the full list of HTTP status codes is provided by W3C.
  • If you’re looking to learn about web servers by building one, here’s part one, part two and part three of a great tutorial that shows how to code a web server in Python.
  • rwasa is a newly released web server written in Assembly with no external dependencies that tuned to be faster than Nginx. The benchmarks are worth taking a look at to see if this server could fit your needs if you need the fastest performance trading off for as of yet untested web server.

Web服务器学习清单

  1. 选择一个Web服务器,NginxApache都是不错的选择。
  2. 创建一个SSL认证。做测试用可以使用自签名的认证,做生产应用买Digicert。将Web服务器配置成需要SSL。
  3. 配置Web服务器,托管CSS,JavaScript和图像等静态数据。
  4. 一旦你设置了WSGI server,你需要配置web服务器输出动态内容。