2011-05-15 72 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