博客原文: http://www.cnblogs.com/yin-jingyu/archive/2011/08/01/2123548.html
HTTP(HyperText Transfer Protocol)是一套計算機經過網絡進行通訊的規則。計算機專家設計出HTTP,使HTTP客戶(如Web瀏覽器)可以從HTTP服務器(Web服務器)請求信息和服務,HTTP目前協議的版本是1.1.HTTP是一種無狀態的協議,無狀態是指Web瀏覽器和Web服務器之間不須要創建持久的鏈接,這意味着當一個客戶端向服務器端發出請求,而後Web服務器返回響應(response),鏈接就被關閉了,在服務器端不保留鏈接的有關信息.HTTP遵循請求(Request)/應答(Response)模型。Web瀏覽器向Web服務器發送請求,Web服務器處理請求並返回適當的應答。全部HTTP鏈接都被構形成一套請求和應答。
HTTP使用內容類型,是指Web服務器向Web瀏覽器返回的文件都有與之相關的類型。全部這些類型在MIME Internet郵件協議上模型化,即Web服務器告訴Web瀏覽器該文件所具備的種類,是HTML文檔、GIF格式圖像、聲音文件仍是獨立的應用程序。大多數Web瀏覽器都擁有一系列的可配置的輔助應用程序,它們告訴瀏覽器應該如何處理Web服務器發送過來的各類內容類型。
HTTP通訊機制是在一次完整的HTTP通訊過程當中,Web瀏覽器與Web服務器之間將完成下列7個步驟:
(1)
創建TCP鏈接
在HTTP工做開始以前,Web瀏覽器首先要經過網絡與Web服務器創建鏈接,該鏈接是經過TCP來完成的,該協議與IP協議共同構建Internet,即著名的TCP/IP協議族,所以Internet又被稱做是TCP/IP網絡。HTTP是比TCP更高層次的應用層協議,根據規則,只有低層協議創建以後才能,才能進行更層協議的鏈接,所以,首先要創建TCP鏈接,通常TCP鏈接的端口號是80
(2) Web瀏覽器向Web服務器發送請求命令
一旦創建了TCP鏈接,Web瀏覽器就會向Web服務器發送請求命令
例如:GET/sample/hello.jsp HTTP/1.1
(3) Web瀏覽器發送請求頭信息
瀏覽器發送其請求命令以後,還要以頭信息的形式向Web服務器發送一些別的信息,以後瀏覽器發送了一空白行來通知服務器,它已經結束了該頭信息的發送。
(4) Web服務器應答
客戶機向服務器發出請求後,服務器會客戶機回送應答,
HTTP/1.1 200 OK
應答的第一部分是協議的版本號和應答狀態碼
(5) Web服務器發送應答頭信息
正如客戶端會隨同請求發送關於自身的信息同樣,服務器也會隨同應答向用戶發送關於它本身的數據及被請求的文檔。
(6) Web服務器向瀏覽器發送數據
Web服務器向瀏覽器發送頭信息後,它會發送一個空白行來表示頭信息的發送到此爲結束,接着,它就以Content-Type應答頭信息所描述的格式發送用戶所請求的實際數據
(7) Web服務器關閉TCP鏈接
通常狀況下,一旦Web服務器向瀏覽器發送了請求數據,它就要關閉TCP鏈接,而後若是瀏覽器或者服務器在其頭信息加入了這行代碼
Connection:keep-alive
TCP鏈接在發送後將仍然保持打開狀態,因而,瀏覽器能夠繼續經過相同的鏈接發送請求。保持鏈接節省了爲每一個請求創建新鏈接所需的時間,還節約了網絡帶寬。
一、HTTP1.1 或 1.0 沒有握手的概念(在https裏面處於安全考慮纔有握手)。客戶端完整的發送一個請求(請求頭+請求體),服務器收到這個消息並處理完成後返回一個響應包http response。 而後鏈接關閉(不考慮keep-alive機制)。 二、客戶端發送請求是一次把請求行和請求體所有發送出去,沒有說先發送請求行等待迴應再發送包體的。可 三、瀏覽器會根據你在地址欄裏輸入的url進行DNS解析 四、對IIS 不是很瞭解。看你怎麼定義這個服務器了,若是咱們的服務器使用最多見的apache+tomcat。那麼,apache 就是負責接收你的http請求,而後再把請求轉給tomcat 進行處理。 五、創建tcp連接不是根據http報文裏的host字段創建的。而是在你在地址欄中輸入完地址敲下回車(chrome有預解析機制,可能早就提早幫你解析好了)後,瀏覽器會有一個DNS解析過程,將域名轉換成IP,而後瀏覽器根據這個IP加上默認的80端口創建好TCP連接的。這些跟http都不要緊。 要明白,TCP位於傳輸層,HTTP位於應用層。下層只會向上層提供服務,但不會從上層得到服務。 六、http請求的消息頭,\r\n 和包體都是一塊兒發送的,沒有先發送誰再發送誰之分。