Python 构建http服务器
因此,我需要构建一个HTTP服务器,它将联系客户机,向客户机发送图片或计算等数据,并创建一个包含这些内容的页面。我想你明白我不知道我在做什么…:( 我知道python和客户机-服务器项目的基本(+),但我不了解HTTP协议,也不了解我在互联网上读到的任何内容 有人能给我解释一下如何使用这个协议吗?HTTP数据包的形式是什么 这里有一个我不理解的问题的例子:我被要求获取一个数据包(我做到了),了解那里的请求是什么,然后发回客户想要的文件名,然后发回文件本身。我打印了数据包,不知道请求在哪里或客户想要什么 非常感谢 有人能给我解释一下如何使用这个协议吗?HTTP数据包的形式是什么 关于webz,您可以在RFC上找到很多规范。 更多信息请参见下面的HTTPPython 构建http服务器,python,http,server,client,packet,Python,Http,Server,Client,Packet,因此,我需要构建一个HTTP服务器,它将联系客户机,向客户机发送图片或计算等数据,并创建一个包含这些内容的页面。我想你明白我不知道我在做什么…:( 我知道python和客户机-服务器项目的基本(+),但我不了解HTTP协议,也不了解我在互联网上读到的任何内容 有人能给我解释一下如何使用这个协议吗?HTTP数据包的形式是什么 这里有一个我不理解的问题的例子:我被要求获取一个数据包(我做到了),了解那里的请求是什么,然后发回客户想要的文件名,然后发回文件本身。我打印了数据包,不知道请求在哪里或客户想
(由于您似乎是编程新手,我想我可能想告诉您以下内容:) 通常情况下,您不会直接与HTTP(S)数据包进行交互。相反,您使用的是一个框架,例如,以及更多。框架的选择取决于用例。例如:
- 你需要一个数据库、身份验证和任何可以想象的功能吗?使用Django
- 您只想创建一个没有臃肿框架的Web应用程序吗?使用Flask
- 你需要最低限度,还是想充当客户?请选择aiohttp
(无论如何,这里有一个非常简单的完整性概述) 所以,HTTP是TCP上的文本协议,这基本上意味着通过简单的TCP发送文本。当您收到请求时,您必须“解析”(即理解其内容)。幸运的是,我们的请求是标准化的,并且遵循相同的方案 最小的请求如下所示:
GET / HTTP/1.0
Host: www.server.com
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>
第一行以a开头,在我们的示例中,动词是GET
。/
表示路径。想想硬盘上的文件路径。第一行的最后一部分,即HTTP/1.0
,告诉接收者我们使用的是哪个版本的HTTP。目前有HTTP 1.0和HTTP 1.1;但是,如果您自己实现请求,我还不会为HTTP 1.1操心,而是坚持使用HTTP 1.0
最后,Host:www.server.com
行告诉我们要与哪个服务器对话,因为HTTP服务器的多个实例可能在同一ip下运行。这用于重新启用子域
如果将此请求发送到HTTP服务器,则可能会收到如下响应:
GET / HTTP/1.0
Host: www.server.com
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正常
服务器:Apache/1.3.29(Unix)PHP/4.3.4
内容长度:1337
连接:关闭
内容类型:text/html
此响应在第一行HTTP/1.0 200 OK
中包含状态。数字和“OK”表示状态代码,告诉我们一切正常。它们有各自的含义和用法
第一行后面的行是所谓的响应头。它们提供了有关响应的其他有用信息。例如,当我们打开一个像“stackoverflow.com”这样的网站时,服务器会向我们发送一个HTML文件,供浏览器解释。在此之前,我们需要知道HTML文件的大小
幸运的是,服务器预先用Content Length:1337
行告诉我们,文件大1337字节。文件本身将出现在
占位符所在的位置
这其中还有很多
正如您所看到的,在使用HTTP时需要考虑很多事情,这表明如果没有很好的理由,从头实现HTTP客户机/服务器是不可行的 相反,最好使用上面列出的一个框架(用于python)
最后,请注意: 在尽可能简单地解释这些概念的过程中,我可能遗漏了或过于简化了一些东西。如果你发现任何错误,请告诉我 有人能给我解释一下如何使用这个协议吗?HTTP数据包的形式是什么 关于webz,您可以在RFC上找到很多规范。 更多信息请参见下面的HTTP
(由于您似乎是编程新手,我想我可能想告诉您以下内容:) 通常不直接与HTTP(S)数据包交互。相反,您使用的是一个框架,例如,等等。框架的选择取决于用例。例如:
- 你需要一个数据库、身份验证和任何可以想象的功能吗?和Django一起去
- 您只想创建一个没有臃肿框架的Web应用程序?和烧瓶一起去李>
- 你需要最低限度,还是想充当客户?和aiohttp一起去
(无论如何,这里有一个非常简单的完整性概述) 所以,HTTP是TCP上的文本协议,这基本上意味着通过简单的TCP发送文本。当您收到请求时,您必须“解析”(即理解其内容)。幸运的是,我们的请求是标准化的,并且遵循相同的方案 最小的请求如下所示:
GET / HTTP/1.0
Host: www.server.com
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>
第一行从w开始