今天有人问这个有趣的面试问题。
详细解释客户端机器从服务器请求文件(例如file.php),然后接收所需文件及其必要的JS / CSS /图像/视频文件并在客户端上显示的过程浏览器屏幕。
以下是我所知道的以及我所说的内容:
所以发送请求,然后服务器看到正在请求file.php文件,并且因为它有.php扩展名,它首先使用PHP引擎解析文件中的任何PHP代码,然后一次它完成后,它将生成的file.php文件(作为响应)输出回客户端机器。然后浏览器接受该响应并解析HTML和必要的JS和CSS代码,然后将其显示给浏览器。
我的答案非常基本,并没有尽可能详细。我想到了我的回答并提出了新的问题:
字面意思是什么是“请求”?它基本上只是发送到服务器的文本头文件吗?
“回应”怎么样?响应本身是解析后的file.php文件,它被发送回客户机吗?
如果file.php文件包含对script.js文件和style.css文件的引用,该怎么办?在哪个阶段将这些文件送回客户端计算机?它们是作为单独的标题或什么进来的?
在我的回答中,当我说“...因为它有.php扩展名时,我不确定我是否正确,它首先使用PHP引擎来解析文件中的任何PHP代码。 “这真的是服务器解析文件中的代码的原因,还是服务器默认扫描所有类型的文件以检查它们可能包含的任何PHP代码?
答案 0 :(得分: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的工作方式,但其他技术(例如Ruby on Rails,某些.NET语言)的处理方式也不同。
很好的问题,对你表现出兴趣也很有用! 有关其他信息,建议您查看HTTP on Wikipedia。
答案 1 :(得分: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这样的事情。浏览器不需要知道窗帘后面发生了什么。从它的角度来看,它只是要求内容并(希望)接收它。
可以将简单的Web服务器配置为完全按照您的说法执行操作。如果它收到以“.php”结尾的文件的请求,它将首先通过PHP解释器运行它。但这完全取决于Web服务器所有者的决定。
答案 2 :(得分:2)
我认为这正是您所寻找的:What really happens when you navigate to a URL
总结:
1.您在浏览器中输入一个URL:facebook.com
2.浏览器查找域名的IP地址
3.浏览器向Web服务器发送HTTP请求
4. Facebook服务器响应永久重定向
5.浏览器遵循重定向
6.服务器“处理”请求
7.服务器发回HTML响应
8.浏览器开始呈现HTML
9.浏览器发送对HTML中嵌入的对象的请求
10.浏览器发送进一步的异步(AJAX)请求