1. 程式人生 > >一個http請求處理過程

一個http請求處理過程

    1. 客戶發起情況到伺服器網絡卡;

    2. 伺服器網絡卡接受到請求後轉交給核心處理;

    3. 核心根據請求對應的套接字,將請求交給工作在使用者空間的Web伺服器程序

    4. Web伺服器程序根據使用者請求,向核心進行系統呼叫,申請獲取相應資源(如index.html)

    5. 核心發現web伺服器程序請求的是一個存放在硬碟上的資源,因此通過驅動程式連線磁碟

    6. 核心排程磁碟,獲取需要的資源

    7. 核心將資源存放在自己的緩衝區中,並通知Web伺服器程序

    8. Web伺服器程序通過系統呼叫取得資源,並將其複製到程序自己的緩衝區中

    9. Web伺服器程序形成響應,通過系統呼叫再次發給核心以響應使用者請求

    10. 核心將響應傳送至網絡卡

    11. 網絡卡傳送響應給使用者

通過這樣的一個複雜過程,一次請求就完成了。

簡單來說就是:使用者請求-->送達到使用者空間-->系統呼叫-->核心空間-->核心到磁碟上讀取網頁資源->返回到使用者空間->響應給使用者。上述簡單的說明了一下,客戶端向Web服務請求過程,在這個過程中,有兩個I/O過程,一個就是客戶端請求的網路I/O,另一個就是Web伺服器請求頁面的磁碟I/O。

首先http是一個應用層的協議,在這個層的協議,只是一種通訊規範,也就是因為雙方要進行通訊,大家要事先約定一個規範。

1.連線 當我們輸入這樣一個請求時,首先要建立一個socket連線,因為socket是通過ip和埠建立的(tcp連結),所以之前還有一個DNS解析過程,把www.mycompany.com變成ip,如果url裡不包含埠號,則會使用該協議的預設埠號。

DNS的過程是這樣的:首先我們知道我們本地的機器上在配置網路時都會填寫DNS,這樣本機就會把這個url發給這個配置的DNS伺服器,如果能夠找到相應的url則返回其ip,否則該DNS將繼續將該解析請求傳送給上級DNS,整個DNS可以看做是一個樹狀結構,該請求將一直髮送到根直到得到結果。現在已經擁有了目標ip和埠號,這樣我們就可以開啟socket連線了。

2.請求 連線成功建立後,開始向web伺服器傳送請求,這個請求一般是GET或POST命令(POST用於FORM引數的傳遞)。GET命令的格式為:  GET 路徑/檔名 HTTP/1.0
檔名指出所訪問的檔案,HTTP/1.0指出Web瀏覽器使用的HTTP版本。現在可以傳送GET命令:

GET /mydir/index.html HTTP/1.0,

3.應答 web伺服器收到這個請求,進行處理。從它的文件空間中搜索子目錄mydir的檔案index.html。如果找到該檔案,Web伺服器把該檔案內容傳送給相應的Web瀏覽器。

為了告知瀏覽器,,Web伺服器首先傳送一些HTTP頭資訊,然後傳送具體內容(即HTTP體資訊),HTTP頭資訊和HTTP體資訊之間用一個空行分開。
常用的HTTP頭資訊有:
  ① HTTP 1.0 200 OK  這是Web伺服器應答的第一行,列出伺服器正在執行的HTTP版本號和應答程式碼。程式碼"200 OK"表示請求完成。
  ② MIME_Version:1.0 它指示MIME型別的版本。
  ③ content_type:型別 這個頭資訊非常重要,它指示HTTP體資訊的MIME型別。如:content_type:text/html指示傳送的資料是HTML文件。
  ④ content_length:長度值 它指示HTTP體資訊的長度(位元組)。

4.關閉連線:當應答結束後,Web瀏覽器與Web伺服器必須斷開,以保證其它Web瀏覽器能夠與Web伺服器建立連線。

瀏覽器一般是圖形介面的,因此我們並不瞭解在這華麗表面後面所發生的一切。當你點選一個連線時,瀏覽器首先找到站點的IP地址,這是通過DNS來實現的。在找到IP地址後可以建立TCP連線了,連線建立後我們就可以傳送請求了,但這個請求是什麼樣子呢?我們現在假設點選了一個從WWW.WEBMONKEY.COM/HTML/96/47/INDEX2A.HTML點選了WWW.GRIPY.ORG/MATTMARG/,這時瀏覽器會發出下面的請求:

 Get /mattmarg/ HTTP/1.0
            User-Agent: Mozilla/2.0 (Macintosh; I; PPC)
            Accept: text/html; */*
            Cookie: name = value
            Referer: http://www.webmonkey.com/html/96/47/index2a.html
            Host: www.grippy.org
            

第一行稱為請求,它告訴伺服器從MATTMARG取得檔案,這裡的目錄一般是要加/的。下面幾行通知伺服器你所使用的瀏覽器是什麼型別,你所接收的資料是什麼型別。如果你以前訪問過這個站點,站點可能向你傳送了cookie,如果你已經有了一個這樣的cookie,瀏覽器會將這個cookie返回給伺服器。referer行通知伺服器使用者從哪一頁到達此頁的。

下面伺服器就要返回檔案了,每次伺服器返回檔案時,都要返回一個http/1.0響應,同時帶有狀態碼,在此之後是一些描述內部的頭資訊。下面就是一個響應:

HTTP/1.0 200 Found
            Date: Mon, 10 Feb 1997 23:48:22 GMT
            Server: Apache/1.1.1 HotWired/1.0
            Content-type: text/html
            Last-Modified: Tues, 11 Feb 1997 22:45:55 GMT
            

不同資料可能返回不同的content-type,因此不同的內容需要不同的content-type,因此有時候這個過程是很慢的。

相關推薦

一個http請求處理過程

    1. 客戶發起情況到伺服器網絡卡;     2. 伺服器網絡卡接受到請求後轉交給核心處理;     3. 核心根據請求對應的套接字,將請求交給工作在使用者空間的Web伺服器程序     4. Web伺服器程序根據使用者請求,向核心進行系統呼叫,申請獲取相

容器完整處理一個http請求過程

初學java web的朋友們應該都知道tomcat容器,但是tomcat是如何完成一次http請求的過程,這裡做一個記錄。 當用戶在客戶端點選一個連結,該連結的URL指向一個servlet,經過網路轉發到應用所在的web伺服器的,此時web伺服器不是直接把申請發給servlet本身,而是傳送給部署該s

Tomcat處理一個HTTP請求過程

一、Tomcat的組成 (1)Server伺服器元素代表整個catalina servlet容器。是單例模式。 (2)ServiceService是這樣一個集合:它由一個或者多個Connector組成,以及一個Engine,負責處理所有Connector所獲得的客戶請求。

Tomcat Server處理一個http請求過程

查詢資料的時候先這個,有點用,摘錄下來 假設來自客戶的請求為:  http://localhost:8080/wsota/wsota_index.jsp 1) 請求被髮送到本機埠8080,被在那裡偵聽的Coyote HTTP/1.1 Connector獲得  2) Conn

Tomcat目錄結構及Tomcat Server處理一個http請求過程

1.Tomcat的結構概述 Tomcat伺服器是由一系列可配置的元件構成,其核心元件是Catalina Servlet容器,它是所有其他Tomcat元件的頂層容器。Tomcat的元件可以在< CATALINA_HOME>/conf/serv

Tomcat伺服器處理一個http請求過程

Tomcat容器就是一個Servlet,理解Servlet的執行過程。 (1)請求被髮送到本機埠8080,被在那裡監聽的Coyoto Http/1.1 Connector獲得。 (2)Connector把該請求交給它所在的Service的Engine

Tomcat如何處理一個HTTP請求過程

Tomcat是一個基於元件的伺服器,它的構成元件都是可配置的,Tomcat的各個元件是在<TOMCAT_HOME>\conf\server.xml檔案中配置的。 server.xml檔案的基本組成結構如下: <Server>             

網站開發進階(四)Tomcat Server處理一個http請求過程

Tomcat Server處理一個http請求的過程   假設來自客戶的請求為: http://localhost:8080/wsota/wsota_index.jsp 1) 請求被髮送到本機埠8080,被在那裡偵聽的Coyote HTTP/1.1 Connector獲得

HTTP 之 一次完整的http請求處理過程

處理 請求過程 http請求處理過程如下.1、建立連接:接收或拒絕連接請求,通過三次握手建立.2、接收請求:接收客戶端請求報文中對某資源的一次請求的過程.Web訪問響應模型(Web I/O)單進程I/O模型:啟動一個進程處理用戶請求,而且一次只處理一個,多個請求被串行響應必須處理完前面的請求後才能處理

asp.net的HTTP請求處理過程

是否 數據 idt pda con tab ase head 兩個 1、asp.net的HTTP請求處理過程說明: (1)、客戶端瀏覽器向服務器發出一個http請求,此請求會被inetinfo.exe進程截獲,然後轉交給aspnet_isapi.dll進程,接著它又通過Ht

怎麼檢視真實專案的http 請求請求報文和響應報文,即request和response?只有這樣,才能完全徹底明白一個http 請求整個過程,傳送和接收的是什麼東西。

IE瀏覽器,f12,網路,捕獲。 如,在前後端分離(即動靜分離,前端只有html程式碼,後端是介面返回json字串。這種方式,是最接近移動端專案即app專案的模式)方式,一個使用者儲存修改即savemodify為例: 因為是form提交是post方式,所以請求正文是

瀏覽器一個HTTP請求過程

瀏覽器一個請求的過程 當我們在瀏覽器位址列輸入 www.xx.com ,然後回車, 這個請求背後經歷了什麼?以下是個人理解,如有偏差,請糾正! 首先重新溫習下網路模型: 七層結構(至頂向下):應用層、表示層、會話層、傳輸層、網路層、資料鏈路層、物

Tomcat原始碼分析 (八)----- HTTP請求處理過程(一)

終於進行到Connector的分析階段了,這也是Tomcat裡面最複雜的一塊功能了。Connector中文名為聯結器,既然是聯結器,它肯定會連線某些東西,連線些什麼呢? Connector用於接受請求並將請求封裝成Request和Response,然後交給Container進行處理,Containe

Tomcat原始碼分析 (九)----- HTTP請求處理過程(二)

我們接著上一篇文章的容器處理來講,當postParseRequest方法返回true時,則由容器繼續處理,在service方法中有connector.getService().getContainer().getPipeline().getFirst().invoke(request, response)這一

SpringMVC:處理一個http請求的完整過程

SpringMVC是一個基於DispatcherServlet的MVC框架,每一個請求最先訪問的都是DispatcherServlet,DispatcherServlet負責轉發每一個Request請求給相應的Handler,Handler處理以後再返回相

(轉)關於Tomcat的點點滴滴(體系架構、處理http請求過程、安裝和配置、目錄結構、設置壓縮和對中文文件名的支持、以及Catalina這個名字的由來……等)

https 設置 重啟 specific 調用 持久化數據 所在 original apps 轉自:http://itfish.net/article/41668.html 總結Tomcat的體系架構、處理http請求的過程、安裝和配置、目錄結構、設置壓縮和對中文文件名

Http請求處理整個過程

admin 轉發 速度 客戶端 OS 有效 施工 功能實現 。net 一,服務器接受http請求的實際處理過程 二,當客戶端將請求通過網絡傳送到服務器時,HTTP.SYS會在內核模式下實時監聽當前的http請求。Http.sys功能如下描述:

轉:HTTP請求過程&HTTP/1.0和HTTP/1.1的區別&HTTP怎麼處理長連線

1.HTTP簡介   web瀏覽器和伺服器之類的互動過程必須遵守的協議.他是tcp/ip中的一個應用協議。用來協議資料交換過程和資料本身的格式.主要的有HTTP/1.0和HTTP1.1.   HTTP/1.0和HTTP/1.1都把TCP作為底層的傳輸協議。   HTTP客戶首先

一個http請求的詳細過程

首先http是一個應用層的協議,在這個層的協議,只是一種通訊規範,也就是因為雙方要進行通訊,大家要事先約定一個規範。 1.連線 當我們輸入這樣一個請求時,首先要建立一個socket連線,因為socket是通過ip和埠建立的,所以之前還有一個DNS解析過程,把www.m

HTTP請求處理流程 MVC核心(MVC就是擴充套件了一個HttpModule)

     訪問Localhost:8080/Home/index.aspx   在呼叫MVC擴充套件的UrlRoutingModule的時候  會先檢查物理路徑檔案是否存在  存在的話就不執行MVC中的路由匹配規則  &