编程菜鸟到大佬之路:实战项目之 python web 服务器(一)

python3 实现简单的 web 服务器

第一部分内容


项目知识点

  • 本项目完成过程中,我们将学习:

    • HTTP 协议基本原理
    • 简单的 Web 服务器框架
    • Python 语言的网络开发
    • Web 服务请求,响应及错误处理的实现
    • CGI 协议的 Python 实现
    • 使用 Python 面向对象思想重构代码
  • 开发环境

    • Xfce终端
    • python 3.5
    • httpie 0.9.2

http 原理

  • 一般我们的 web 程序都运行在 TCP/IP 协议上,程序之间使用 socket(套接字) 进行通信,它能够让计算机之间的通信就像写文件和读文件一样简单。

  • 一个 tcp socket 由一个 IP 地址和端口号组成。

    • IP地址是一个32位的二进制数,通常被分割为4个8位二进制数,写成10进制的形式就是我们常见的174.136.14.108。
    • 我们通过IP地址来标识所连接的主机。
    • 端口号是一个范围在0-65535之间的数字,一台主机上可能同时有多个 sockets,因此需要端口号进行标识。
    • 端口号0-1023是保留给操作系统使用的,我们可以使用剩下的端口号。
  • 超文本传输协议(HTTP)描述了一种程序之间交换数据的方法,它非常简单易用。

    • 在一个 socket 连接上,客户端首先发送请求说明它需要什么,然后服务器发送响应,并在响应中包含客户端的数据。
    • 响应数据也许是从本地磁盘上复制来的,也许是程序动态生成的。
    • 传输过程如图:
      在这里插入图片描述
  • HTTP 请求就是一段文本,任何程序都能生成一个 http 请求,就像生成文本一样简单。这段文本需要包含以下这些部分:
    在这里插入图片描述

    • HTTP method:HTTP 请求方法。最常用的就是 GET (抓取数据)与 POST (更新数据或者上传文件);

    • URL:通常是客户端请求的文件的路径,比如 /research/experiments.html,但是是否响应文件都是由服务器决定的;

    • HTTP version:HTTP 版本。通常是 HTTP/1.0 或 HTTP/1.1;

    • header field:HTTP 头的键值对,做一些基本设置,就像下面这样:

      # 客户端接受的数据类型
      Accept: text/html
      # 客户端接受的语言
      Accept-Language: en, fr         
      If-Modified-Since: 16-May-2005
      
    • body:一些与请求有关的负载数据。比如在一个网站登陆的时候提交登陆表单,那负载数据就是你的账号与密码信息。

  • HTTP响应的结构类似于请求:
    在这里插入图片描述

    • status code:状态码。请求成功响应200,请求的文件找不到则响应404。
    • status phrase:对状态码的描述。

猜你喜欢

转载自blog.csdn.net/faker1895/article/details/86987464