练习 52:moreweb

原文:Exercise 52: moreweb

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

现在,你已经使用 Python http.server库创建了一个 Web 服务器。你已经进行到最后一个项目了。你将使用你至今为止所学到的所有东西,从无到有创建你自己的 Web 服务器。在练习 51 中,你创建了大部分操作,它在http.server模块“上面”。你没有进行任何网络连接处理或 HTTP 协议解析。在最后的练习中,你将为你的lessweb服务器复制http.server(所做的一切),并实现所有必要的零件。

挑战练习

为了完成此练习,你将需要阅读 Python 3 asyncio模块的文档。这个库为你提供了工具,用于处理套接字请求,创建服务器,等待信号,以及大部分所需的其它东西。如果你想要一个额外的挑战,那么你可以使用 Python 3 select模块,它提供了更低的级别的 API 来处理套接字。你应该使用此文档,来创建一系列小型套接字服务器和客户端。

一旦你了解如何创建通过 TCP/IP 套接字通话的服务器和客户端,则需要转而处理 HTTP 请求。该项目的这一部分将十分艰巨,因为 HTTP 标准丧心病狂,并且比其需要更复杂。我将从你可以设计的,最简单的 HTTP 解析库开始,然后用越来越多的样本进行扩展。第一个起始位置是 RFC 7230,但准备好体验一些人类搞出来的,最糟糕的写作。

研究 RFC 7230 的最佳方式是,首先提取“ABNF 汇总”附录中列出的所有语法。一眼看去,这似乎是疯狂的,因为这只是一个巨大的语法规范。你实际上在这本书的第五部分中,学到了如何阅读它,但是规模较小。你知道正则表达式,扫描器和解析器的工作原理,以及如何阅读这样的语法。所有你需要做的是研究这种语法,并一次实现一点。在实现它的时候,我将完全忽略任何“块”语法。

一旦你研究了这个语法,你应该开始为 HTTP 编写解析器,使用你已经创建的东西。使用你的数据结构,解析工具以及任何东西,来为 HTTP 的小型子集创建解析器。覆盖尽可能多的这种语法。为了帮助你,有一组测试文件,其中具有有效的 HTTP 请求,请访问 https://learncodethehardway.org/more-python-book/http_tests.zip。你可以下载这组测试用例,并通过你的解析器运行它们,来确保它有用。我从杰出的 And-HTTP 服务器中提取了许多这些测试用例,然后用更基本的例子来扩展它们。你的目标是使它们尽可能多地通过。

最后,一旦你有了一种方式,来编写一个良好的asyncio或者select套接字服务器,和一种解析 HTTP 的方式,你可以把它们放在一起,制作你的第一个带有功能的 Web 服务器。

破坏它

你一定要试图破坏这个 Web 服务器,但你也应该在这里尝试不同的东西。你已经编写了一个 HTTP 解析器,尝试使用 RDP 风格的解析器,以最合理的方式处理有效的 HTTP。你的解析器有很好的机会,来阻止许多不好的 HTTP 请求,所以找到一些以前的攻击,并在你的 Web 服务器上尝试它们。有几个网站上有自动化黑客工具,所以获取一个并将其对准你的服务器。但是要小心,并确保你只运行著名的测试工具,并且只在你自己的服务器上。

深入学习

如果你想完全了解 Web 服务器和技术,请使用你的moreweb服务器来创建 Web 框架。我建议先创建一个网站,然后从 Web 框架中提取出所需的模式。这种框架的目标是,封装你使用的模式,以便你可以简化后续的 Web 应用程序。与lesswebmoreweb的练习一样,你的目标也应该是研究,实现和利用 Web 框架的常见攻击。

如果你想深入 TCP/IP,我推荐 Jon C. Snader 的《Effective TCP/IP Programming》一书。这本书是用 C 语言写的,但它实际上是“笨办法学 TCP/IP》,涵盖 44 个主题,为你准备了简单的代码来了解基本的 TCP/IP 的工作原理。C 语言是 TCP/IP 的出生地,其他语言处理套接字连接的方式似乎很奇怪,直到你知道 C 语言是如何实现它的。通过研究它,你将会深入了解套接字服务器的工作原理。唯一的警告是这本书有点过时,所以代码应该工作,但它可能不是最新的代码。

笨办法学 Python · 续 练习 52:`moreweb`相关推荐

  1. 笨办法学 Python · 续 中文版

    笨办法学 Python · 续 中文版 原书:Learn More Python 3 The Hard Way 译者:飞龙 自豪地采用谷歌翻译 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓 ...

  2. 笨办法学 Python · 续 练习 33:解析器

    练习 33:解析器 原文:Exercise 33: Parsers 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 想象一下,你将获得一个巨大的数字列表,你必须将其输入到电子表格 ...

  3. 笨办法学 Python · 续 练习 0:起步

    练习 0:起步 原文:Exercise 0: The Setup 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你需要设置和配置一些工具来学习此书.有可能你已经有了很多这些东西 ...

  4. 笨办法学 Python · 续 第二部分:简单的黑魔法

    第二部分:简单的黑魔法 原文:Part II: Quick Hacks 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你有最好的想法,你会打动世界!你会成为一个亿万富豪!你的大 ...

  5. 笨办法学 Python · 续 练习 24:URL 快速路由

    练习 24:URL 快速路由 原文:Exercise 24: Fast URL Search 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我们将结束数据结构和算法的部分,并将 ...

  6. 笨办法学 Python · 续 练习 32:扫描器

    练习 32:扫描器 原文:Exercise 32: Scanners 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我的第一本书在练习 48 中非常偶然涉及到了扫描器,但现在我 ...

  7. python描述器 有限状态机_笨办法学 Python · 续 练习 30:有限状态机

    练习 30:有限状态机 每当你阅读一本关于解析的书,都有一个可怕的章节,关于有限状态机(FSM).他们对"边"和"节点"进行了详细的分析,每个可能的" ...

  8. 笨办法学 Python · 续 第三部分:数据结构

    第三部分:数据结构 原文:Part III: Data Structures 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你正在以你的方式构建个人流程,它让你以有限的阻碍快速 ...

  9. 笨办法学 Python · 续 练习 51:`lessweb`

    练习 51:lessweb 原文:Exercise 51: lessweb 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我们很接近这本书的末尾了,所以在最后两个练习中我将给你 ...

最新文章

  1. 超美观的 Vue+Element 开源后台管理 UI
  2. 清华大佬告诉史上最全的Java进阶书籍推荐面南背北
  3. Python爬虫入门教程 6-100 蜂鸟网图片爬取之一
  4. ASP.NET登录以及注册
  5. 【学习笔记】MOOC 数学文化赏析 笔记【补档】
  6. ORA-00997: 非法使用 LONG 数据类型
  7. html和jsp的差异
  8. java将所有的字符串转换为大写或小写
  9. piggy back是什么意思?
  10. ASSD: Attentive Single Shot Multibox Detector
  11. day17.什么是堆栈
  12. wheelib: 一个为编程学习而生的C语言轮子库
  13. 2019蓝桥杯本科B组C-C++决赛题 (题解随后出)
  14. java设置pdf不可编辑_禁止编辑,但允许在Java iText / PDF中进行页面提取
  15. U盘-文件或目录损坏且无法读取
  16. Mac OS系统使用笔记
  17. java 画图板 锯齿_java绘画中的锯齿问题
  18. P4学习笔记(一)初识P4
  19. dnf吸怪源码c语言,发DNF源码了
  20. 古细菌多样性分析16S rRNA

热门文章

  1. (11)verilog语言编写8路分配器
  2. ubuntu jdk tomcat mysql_Ubuntu下安装JDK+TOMCAT+MYSQL
  3. 使用nutch爬取数据时出现的问题_在使用聚氨酯发泡机时出现问题的解决方法!...
  4. STC51-串口通信
  5. leetcode java输入输出方法,有关IntelliJ IDEA中LeetCode插件配置问题
  6. [C++] - 闭包(closure)
  7. [计算机网络] - DNS基础介绍
  8. java简单功能测试,java 自动化测试小功能集锦
  9. Linux 软件看门狗 watchdog 喂狗
  10. Android嵌入式安卓触摸屏|4418开发板平台