正在构建http服务器



因此,我需要构建一个HTTP服务器,该服务器将联系客户并向他发送图片或计算等数据,并用这些东西创建一个页面。我想你明白了,我真的不知道自己在做什么…:(

我知道python和客户端-服务器项目的基本(+(,但我不理解HTTP协议,也不理解我在互联网上读到的任何内容。。。

有人能向我解释一下如何使用这个协议吗?HTTP数据包的形式是什么?

这里有一个我不理解的问题的例子:我被要求获取一个数据包(我做到了(,了解那里的请求是什么,然后发回客户端想要的文件名,然后再发送文件本身。我打印了数据包,不明白请求在哪里,也不明白客户想要什么。。。

非常非常感谢!

有人能向我解释如何使用此协议吗?HTTP数据包的形式是什么?

规范可能会有所帮助。

关于webz,您可以找到很多关于RFC的规范。下面是HTTP的详细信息。


(由于您似乎是编程新手,我想我可能想告诉您以下内容:(

通常不直接与HTTP(S(数据包进行交互。相反,您使用一个框架,例如flask、django、aiohttp等等。框架的选择取决于用例。例如:

  • 您需要数据库、身份验证和任何可以想象的功能吗?和姜戈一起去吧
  • 你只想创建一个没有臃肿框架的WebApplication吗?选择Flask
  • 你需要最低限度的服务还是想成为客户?使用aiohttp

此处列出了更多框架。

使用这样的框架的好处是,它们通常包括有用的东西,这些东西经过了战斗测试(即通常没有bug(,而你不必弄清楚某些协议的特殊性。

你只需导入框架,就可以写出令人惊叹的东西!:(


(无论如何,为了完整性,这里有一个非常简单的概述(

因此,HTTP是一种基于TCP的文本协议,这基本上意味着您通过一个简单的TCP套接字发送文本。当你收到你的请求时,你必须"解析"(即理解其内容(。幸运的是,我们的请求是标准化的,并遵循相同的方案。

最小的请求如下所示:

GET / HTTP/1.0
Host: www.server.com

第一行以一个动词(也称为请求方法(开头,在我们的示例中,该动词是GET/表示路径。想想硬盘上的文件路径。第一行的最后一部分,即HTTP/1.0,告诉接收者我们使用的是哪个版本的HTTP。目前有HTTP 1.0和HTTP 1.1;然而,如果您自己实现请求,我还不会使用HTTP1.1,而是使用HTTP1.0。

最后,Host: www.server.com行告诉我们要与哪个服务器对话,因为HTTP服务器的多个实例可能在同一ip下运行。这是用来撤销子域的。

如果您将此请求发送到HTTP服务器,您可能会收到这样的响应:

HTTP/1.0 200 OK
Server: Apache/1.3.29 (Unix) PHP/4.3.4
Content-Length: 1337
Connection: close
Content-Type: text/html
<DATA>

此响应包含第一行HTTP/1.0 200 OK中的状态。数字和"OK"表示一个状态代码,告诉我们一切都很好。有许多状态代码,它们有自己的含义和用法。

第一行之后的行是所谓的响应标头。它们提供了有关响应的其他有用信息。例如,当我们打开一个像"stackoverflow.com"这样的网站时,服务器会向我们发送一个HTML文件,供浏览器进行解释。在此之前,我们需要知道HTML文件的大小。

幸运的是,服务器事先用Content-Length: 1337行告诉我们,文件有1337字节大。文件本身将出现在<DATA>占位符所在的位置。

还有很多这样的标题。


正如您所看到的,在使用HTTP时有很多事情需要考虑,这表明如果没有充分的理由,从头开始实现HTTP客户端/服务器是不可行的。

相反,最好使用上面列出的其中一个框架(用于python(。


最后一点:在试图尽可能简单地解释这些概念的过程中,我可能遗漏或过于简单化了一些事情。如果你发现任何错误,请告诉我。

最新更新