【问题标题】:What does a Server do once it receives a request from a client? [closed]服务器收到客户端的请求后会做什么? [关闭]
【发布时间】:2010-11-05 20:14:20
【问题描述】:

我正在尝试详细了解服务器从客户端收到请求后会发生什么...

在请求指定的端口上打开一个套接字...

然后访问资产或资源?

如果资源引用 cgi/脚本怎么办?

请求信息必须经过哪些“层”?

响应是如何产生的?

我查找了有关“互联网如何工作”和“请求响应周期”的信息,但我正在寻找有关服务器内部发生的情况的详细信息。

【问题讨论】:

  • 您似乎混淆了关于套接字通信如何与 Web 服务器如何工作的问题,我不知道该回答哪个。
  • 抱歉,我正试图从 Web 开发人员的角度详细了解服务器中发生的事情......帮助我更好地表达我的问题。
  • 哪个服务器?什么样的要求?你的问题太笼统了。投票结束。
  • John 有一段时间我们也不明白我们想问什么。请耐心等待。
  • @Spencer:这并不意味着问题应该保持开放。此外,他在重复自己的问题:stackoverflow.com/questions/4102582/…

标签: http response


【解决方案1】:

您似乎在区分问题的不同部分时遇到了一些麻烦,所以我会尽力帮助您解决这个问题。

首先,使用OSI model 描述了一种理解两台计算机之间通信的常用方法。该模型试图区分协议栈中每个协议之间的职责。例如,当您在家庭网络上浏览网站时,协议栈很可能类似于

Ethernet-IPv4-TCP-HTTP

这种协议的模块化用于创建关注点分离,这样开发人员就不必每次尝试让两台计算机以某种方式进行通信时都“重新发明轮子”。如果您正在尝试编写聊天程序,您不想担心数据包丢失或互联网路由方法,因此您可以继续利用已经存在的较低级别的协议并为您处理更多的细节问题。

如今,当人们提到套接字通信时,他们通常使用 TCP 或 UDP。这些都被称为传输协议。如果您想了解有关套接字通信的更多详细信息,我将从 UDP 开始,因为它是一种更简单的协议,然后再转向 TCP。

虽然您的网络服务器知道较低级别协议中的某些信息,但它并没有真正用它做太多事情。这主要是由操作系统库处理的,这些库最终将一些原始 HTTP 数据交给 Web 服务器,然后 Web 服务器开始处理这些数据。

再增加一层,HTTP 与幕后运行的网关语言无关。这是相当明显的,因为无论 Web 服务器提供 CGI perl 脚本、PHP、ASP.Net 还是静态 HTML 文件,协议都是相同的。 HTTP 只是发出请求,网络服务器会相应地处理请求。

希望这可以为您阐明一些概念,并让您更好地了解您想要理解的内容。

【讨论】:

    【解决方案2】:

    这取决于服务器。 apache 2 服务器可以根据规则执行任意数量的请求重写、自动响应(301、303、307、403、404、500),启动 CGI 脚本,与 FastCGI 脚本交换数据,将一些数据传递给脚本模块比如mod_php,等等。 CouchDB Web 服务器完全可以做其他事情。

    基本上,除了解析请求并发回适当的响应之外,Web 服务器没有真正的共同点。

    您可以尝试查看各种 Web 服务器的文档:Apache、IIS、lighttpd、nginx...

    【讨论】:

    • 是的,我知道这会变得多么复杂。有没有一种方法可以概括地描述跨服务器变体的服务器内部发生的情况?
    猜你喜欢
    • 2021-08-04
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 2021-01-05
    • 2013-01-18
    相关资源
    最近更新 更多