2011-05-15 69 views
3

今天有人问了这个有趣的面试问题。网络浏览器如何请求并接收网页?

详细解释客户端机器从服务器请求文件(如file.php),然后接收所需的文件及其必要的JS/CSS /图像/视频文件并显示它们的过程在客户端的浏览器屏幕上。

这是我知道的,什么我也说:

因此,一个请求被发送,则服务器发现被请求的file.php文件,因为它有一个。 php扩展,它首先使用PHP引擎来解析文件内部的任何PHP代码,然后一旦完成,它就会向客户端机器输出生成的file.php文件(作为响应)。然后浏览器接受该响应并分析HTML和必要的JS和CSS代码,然后将其显示给浏览器。

我的答案是非常基本的,并不像它应该的那么详细。我想到了我的回应,并与新的问题上来:

  1. 什么,从字面上看,是一个“要求”?它基本上只是发送到服务器的文本头文件吗?

  2. “响应”怎么样?响应本身是否被解析的file.php文件被发送回客户端机器?

  3. 如果file.php文件包含对script.js文件和style.css文件的引用会怎么样?这些文件在哪个阶段被送回客户端机器?他们是作为单独的标题进入还是什么?

  4. 上面在我的回答中,当我说“...因为它有一个.php扩展名时,我不确定是否正确,它首先使用PHP引擎来解析文件中的任何PHP代码”。这真的是服务器解析文件内部代码的原因,还是服务器默认扫描所有类型的文件以检查它们可能包含的任何PHP代码?

回答

7

首先,我认为你的答案相当好。它明确描述了你被问到的基本过程。

1)字面上,“请求”是什么?它基本上只是发送到服务器的文本头文件吗?是的,HTTP请求是一条到服务器的文本消息,主要包括:请求的路径,该路径的任何参数,客户端信息(用户代理,会话,cookie等)。

2)“响应”怎么样?响应本身是否被解析的file.php文件被发送回客户端机器?

的排序。 HTTP响应由一个标题文本组成,该文本描述:响应状态(成功或错误,例如文件未找到,内部服务器错误等),一些内容元数据(内容类型,编码...)和内容。
内容可能是是一个HTML文档。它也可以是CSS或Javascript文件,PNG图像或Web服务器提供的任何其他文件。标题中的元数据以浏览器(或任何客户端)可以找出如何处理它的方式描述内容。

3)如果file.php文件包含对script.js文件和style.css文件的引用会怎么样?这些文件在哪个阶段被送回客户端机器?他们是作为单独的标题进入还是什么?

首先,您刚刚描述的过程将完成。意思是,发送了一个请求,然后返回响应。假设响应是HTML文档,浏览器解析文档并查找外部内容:CSS样式表,Javascript文件,图像文件,Flash嵌入等。
对于这些外部文件中的每一个,浏览器使用完全相同的过程发送新的请求。例如,获取CSS文件后,浏览器知道将其应用于刚解析的文档。 4)在上面的回答中,我不太确定当我说“...因为它有一个.php扩展名时,我是否正确”,它首先使用PHP引擎来解析PHP内部的任何PHP代码文件。”这真的是服务器解析文件内部代码的原因,还是服务器默认扫描所有类型的文件以检查它们可能包含的任何PHP代码?

那么,这取决于服务器配置,但大多数时候,是的;
服务器通常配置为处理所有.php文件相同,这意味着将它们传递给PHP解析器并等待其响应。

顺便说一下,这对于不同的服务器端软件技术是不同的。虽然这是PHP的工作方式,但其他技术(例如Ruby on Rails,某些.NET语言)则以不同的方式处理。


很好的问题,对你有好处,表现出兴趣!
有关更多信息,我建议您查看HTTP on Wikipedia

+0

完美的“回应”(双关意图)。非常感谢你的详细和直接的解释。 – DecafJava 2011-05-15 08:48:10

2

HTTP请求看起来像GET /index.html HTTP/1.1。它以纯文本的形式发送到Web服务器。

简化的HTTP响应(大多数头的东西删除)可能是这样的:

HTTP/1.1 200 OK 
Content-Length: 20 
Content-Type: text/html; charset=UTF-8 

<html>Hello</html> 

如果该页面包含图像或样式表或其他外部文件,Web浏览器将他们的新请求,一个请求每个文件。 Web服务器以与返回HTML几乎相同的方式返回它们。当浏览器请求并接收到所有需要的文件时,页面就完成了。

由Web服务器决定如何处理像PHP这样的东西。浏览器不需要知道幕布背后发生了什么。从它的角度来看,它只是要求内容和(希望)接受它。

一个简单的网络服务器可能被配置为完全按照你所说的去做。如果它接收到以“.php”结尾的文件请求,它将首先通过PHP解释器运行它。但这完全取决于Web服务器所有者的决定。

2

我认为这是你在找什么:What really happens when you navigate to a URL

总结:
1.您输入网址到浏览器:facebook.com
2.浏览器中查找IP地址域名
3.浏览器发送一个HTTP请求给web服务器
4. Facebook服务器与一个永久重定向
5.浏览器遵循重定向响应
6.服务器“处理”请求
7.服务器发回一个HTML响应
8.浏览器开始呈现的HTML
9.浏览器发送用于嵌入在HTML对象的请求
10.浏览器发送进一步异步(AJAX)请求

+0

谢谢,一定会看看! – DecafJava 2011-05-15 08:54:04