2011-06-04 68 views
3

我想了解在使用網站時後臺發生了什麼事情,或者基本上當用戶與瀏覽器交互時會發生什麼事情。我知道這是一個龐大的列表,並且高度依賴於架構和用戶操作等,我只是想了解一些重要的事情,並消除我的誤解,並用它來閱讀更多關於我不瞭解的內容。網站是如何工作的/現場發生的事情

作爲一個練習,我試圖記錄下與用戶在瀏覽器中的操作有關的背景。這是我在此位的嘗試開放式的,但有趣的問題:

用戶輸入一個URL =>瀏覽器檢查 在瀏覽器緩存中可用=> DNS查詢 了[根DNS查找=> DNS遞歸 =>獲得IP] =>建立一個TCP連接=>發送HTTP REQ =>得到 從Web服務器靜態頁面=>如果 認證要求 發生[無論是從 瀏覽器讀取cookie或要求用戶輸入 憑據] = >以某種方式獲得 動態元素以及[如何? , 有一些懶惰動初始化這裏 ?] =>然後用戶執行某些 動作[點擊一個鏈接或東西] => 檢查瀏覽器緩存=>如果不利用 [獲取輸入參數,並在URL中嵌入 某種方式[可以是 加密一些事情,如果需要] => 命中負載平衡器=>定向到 應用服務器[取決於 的LB如何選擇一個主機] =>應用 服務器高速緩存被選中[分佈式緩存或 某種緩存,不確定這個 「正常」發生在這裏還是某個 其他級別] =>應用服務器 嘗試理解請求[如果 其服務監聽某個端口上, http端口80將得到URL和 解析做一些操作,如果需要=> 有可能再次成爲連接 MGMT => 查詢數據庫/緩存/並行查詢等 =>數據庫將結果返回給應用服務器=>應用服務器創建一個 結果有效負載和標頭[http] => 將其發送到瀏覽器進行呈現=> 瀏覽器緩存更新=>用戶 對響應作出反應。

我還沒有考慮重試/失敗,它們是如何處理的,但我想獲得一些輸入有作爲一般意義上

注:
我在看的東西一般來說,我相信很少有公司可以用不同的方式來做等等。我也希望聽到替代品,但是!

  • 這是嘗試,並獲得更多 的視角和對幾件事情 ,這將幫助我在讀一般的努力。
  • 顯然,我做了一個誠實的努力
  • 我也希望這將有助於其他 一般看問題 學到新的東西。
  • 我不要求 徵求意見等,所以這是不是一個 完全開放式的問題[不 一切都是正確的,雖然有很多 選項]

謝謝!

+0

我認爲這太開放了,無論如何,SO是錯誤的地方,因爲它不是一個*編程*問題。 – 2011-06-04 22:30:43

+0

我試圖讓它具體化,並給出了人們可以添加的初始流程。 Imho有人可以清楚地添加並從中獲得價值。如果有任何建議以不同的方式表達這一點,我會很感激。 – codeObserver 2011-06-04 22:32:44

+0

@Kirk Woll:或者,有沒有推薦的地方可以問一些開放式的問題,我發現很多人都有真實的生活經驗,所以他們可以從經驗中回答最好的問題。謝謝 – codeObserver 2011-06-04 22:51:17

回答

2

瀏覽器的靜態或動態沒有區別。瀏覽器發出HTTP請求並獲取HTTP響應。如果響應是HTML頁面,則瀏覽器呈現HTML,應用樣式並執行頁面附帶的JavaScript代碼。這個頁面可以通過動態或靜態 - 瀏覽器不關心!側面是關心 - 是服務器端。如果頁面是靜態的,那麼HTTP服務器將僅從磁盤獲取頁面並將其作爲HTTP響應發送給客戶端。如果頁面是動態的,那麼HTTP服務器將調用某個應用程序,並要求此應用程序提供所請求的資源。此應用程序可以是用於Apache(http服務器)的PHP模塊,也可以是用於IIS的ASP.net,甚至可以是將生成所需內容的C++代碼。 頁面或資源(HTTP響應也可以是XML,或圖像等)的構建方式取決於所使用的應用程序(服務器端技術)。例如,如果您使用PHP - HTTP服務器會檢測到請求的資源具有擴展名.php,則服務器會將此PHP文件傳遞給PHP模塊進行處理,並將結果作爲響應發送到HTTP客戶端(瀏覽器) 。

當用戶執行某些操作,這是再一次只是通常的HTTP請求。 HTTP方法GET和POST(在維基百科中查找關於HTTP的文章)用於將某些輸入從服務器傳遞到客戶端。頁面可以包含一些沉重的JS,這將使頁面看起來更像是桌面應用程序(豐富的控件,在沒有請求的情況下動態響應用戶操作,或者在後臺與服務器通信),但這對於Web應用程序成爲Web應用程序來說並不是必需的(通過動態網站)。它可以是具有HTML表單的老式靜態HTML,也可以是一些服務器端代碼。

Web應用程序是可從許多HTTP資源包括(不同的網址服務器響應)抽象的實體。 Web應用程序也是客戶端代碼,通過HTTP客戶端(瀏覽器)和HTTP服務器的幫助,通過HTTP與服務器端代碼進行通信。 Web應用程序不是一些獨立的部分,只有在用戶執行某些操作時纔會起作用。

網絡的服務可符合這個描述 - 作爲平時不關心頁面的東西,只有當需要一些動作來。它的特殊類型的Web應用程序,通過HTTP(通常)公開一些API。你可以請求一些資源,並傳遞一些參數,你會得到一些結果的迴應。這是相同的Web應用程序,但沒有頁面。但是,Web服務通常是帶有頁面的大型Web應用程序的一部分,或者甚至是相同Web應用程序的其他部分(取決於您如何看待它)。它可以是相同的服務器端技術,也可以是相同的HTTP服務器。如果您想製作一些網絡應用程序(動態網站),則不需要創建網絡服務。 Web應用程序的

服務器端部分也可以與一些數據庫進行通信,但它也沒有必要。 可以有真實的數據庫,或只是在磁盤上的一些文本文件。瀏覽器,客戶端代碼和HTTP服務器也不關心服務器端代碼獲取數據的數據庫或源代碼。

緩存,負載均衡,等等 - 這只是額外的元素,通常是透明的這一切一般的東西。

餅乾傳遞與每一個HTTP請求到HTTP服務器,如果請求的資源是不是靜態網頁,那HTTP服務器將進一步通過他們的服務器端代碼/應用(部分)。它通常如何驗證和授權 - cookie包含有關會話的信息,並且在服務器端有一些與會話包含的數據 - 它可以是用戶的ID,因此服務器端代碼將在每個請求中識別用戶。