0%

实现简单Web服务器

前言

目前急需开发经验并且Python已经到了可以进阶的阶段。该项目和HTTP协议相关,故选此项目进行学习。

前置知识

CSS: Cascading Style Sheets,层叠样式表,是一种用来为结构化文档(例如HTML文档或XML应用)添加样式(字体、间距和颜色等)的计算机语言。

HTML: HyperText Markup Language,超文本标记语言,是一种用于创建网页的标准标记语言

浏览器背后的这些文件都是通过HTTP从服务器传输到浏览器(即客户端)。

HTTP: HyperText Transfer Protocol,遵循从客户端发出请求到服务器并等待响应的模型,因此也被认为是“请求–响应协议”。

DNS是一个分布式数据库,DNS服务器集群是分层级的,没有任何一个单一的DNS服务器中包含所有数据。

无状态的(Statelessness)

协议的每一个请求/响应周期与前一个都是互相独立的。

无状态协议对于服务器资源和易用性的影响:服务器不需要再各次请求之间保留状态信息,请求出问题系统不需要清理。

但也因此HTTP协议很难构建有状态的应用,开发人员需要模拟web应用中的有状态体验,比如如何维持用户登录状态,怎么区分用户。

Web是灵活的、去中心化的,但也难以控制,安全性难以保证,构建应用并不简单。

URL: Uniform Resource Locator,统一资源定位符。由URL模式+资源路径或主机+URL路径构成。

常见的URL模式包括HTTP、FTP、Mailto、Git

URL可以包含一个主机用来监听HTTP请求的端口号。Web客户端用来监听HTTP请求的默认端口号是80,如果一个URL中没有指定其他的端口号,默认为80。

查询字符串/参数

1
http://www.example.com?search=ruby&results=10

? 为保留字,标识着查询字符串的开始

search=ruby results = 10 都是参数的键值对

& 保留字,需要给查询字符串添加参数时使用

查询字符串的限制:有最大长度、键值对会显示(不能用来传输敏感信息)、无法使用空格和特殊字符(必须用URL编码替代)

URL编码

URL默认只接受ASCII码,不安全的或者不是ASCII码的字符要进行转义或者编码。

HTTP GUI工具:

https://www.telerik.com/fiddler

现代浏览器查看HTTP请求和响应的方法叫审查器。

技术栈

  • HTTP协议基本原理
  • Python3实现网络开发
  • Web服务请求响应
  • CGI协议
  • 响应错误处理实现
  • 面向对象方法重构代码
  • Web服务器框架

Web服务器的基本概念:

​ 1、等待有人连接服务器并发送一个HTTP请求

​ 2、解析请求

​ 3、了解该请求希望请求的内容

​ 4、服务器根据请求抓取需要的数据(从本地读取或者动态生成)

​ 5、将数据格式化为请求需要的格式

​ 6、返回HTTP响应

使用Python标准库中的BaseHTTPServer模块处理步骤1、2、6

终端打印的响应信息:(显示了响应报文的全部内容)

image-20240409230905091

image-20240410180834812