端口 80 上的 HTTP 通信

Posted

技术标签:

【中文标题】端口 80 上的 HTTP 通信【英文标题】:HTTP communication on port 80 【发布时间】:2012-01-21 10:40:43 【问题描述】:

我想了解 Web 服务器如何处理大量同时发生的 HTTP 请求和响应。请记住,我是网络编程新手。

Web 服务器可以同时在端口 80 上发送多个 HTTP 响应吗?还是必须“序列化”响应?

Web 服务器是否以序列化方式接收请求?如果是这样,那么插入优先级队列可能需要很快。

【问题讨论】:

【参考方案1】:

简短的回答是,大多数 Web 服务器将通过在单独的线程/进程上处理每个请求(通过从线程池中提取线程或创建新线程)来并行处理传入请求。通常,可以同时处理的请求数是有上限的(例如线程池中的最大线程数)。超出该上限意味着待处理的请求将在队列中等待,直到另一个请求完成。如果服务器需要对请求做一些异步处理,它可能会将线程返回到线程池,直到它准备好完成请求(如 ASP.NET 中的 IHttpAsyncHandler )。

服务器实际上并没有在端口 80 上发回请求。客户端将有自己的端口用于该特定连接。

【讨论】:

epoll 是 ASP.NET 中 IHttpAsyncHandler 的 Linux 等价物吗? @MrMusic 虽然我不是 Linux 网络方面的专家,但我相信 epoll 更类似于 Windows 中的 I/O 完成端口。 Web 服务器,如 Apache 或 IIS,将使用 epoll 或 I/O 完成端口从网络套接字异步读取数据。通常,Web 服务器中运行着一个应用程序模型(例如 Apache 中的 php 模块或 IIS 中的 ASP.NET)。一些应用程序模型允许您在处理服务器请求时将线程“释放”回线程池。 Node.js 是一个尝试异步执行几乎所有操作的服务器示例。【参考方案2】:

我也是新手,但对网络通信有点了解。

它不会同时响应多个请求,一次一个,在正常运行时非常非常快。

当信息通过网络发送出去时,无论它是什么端口,它都会以数据包的形式发送出去。 在该数据包中是标头,在您询问的情况下,它定义了它尝试使用的端口号和其他需要的信息。 标题之后是数据。数据包中数据的大小因设置而异,即计算机、路由器/交换机以及涉及的任何其他内容。 最后是页脚,其中包含有关是否是针对该特定请求的最后一个数据包的说明,如果不是,则在下一个数据包中查找什么。

希望这有助于回答您的问题,并可能给您提供更多问题。

【讨论】:

我喜欢 Caleb 的回答。更倾向于网络服务器功能。对不起,如果我的不是你要找的。​​span>

以上是关于端口 80 上的 HTTP 通信的主要内容,如果未能解决你的问题,请参考以下文章

关闭端口80的nginx上的http和https重定向

443端口和80端口的区别?

443端口和80端口的区别?

443端口和80端口的区别?

端口 80 上的 superwebsocket

Ubuntu:端口 80 上的 Http-server 启动,但无法从浏览器访问?