java網絡通訊:HTTP協議

  熟悉java的同窗,都知道javaEE當中很大一部分的內容,是WEB開發,那麼在進行WEB開發的學習過程中,除了須要學習SpringMVC/STRUTS2等框架之外,咱們還須要對在WEB開發當中經常使用到的協議有所瞭解,那就是HTTP協議,今天就簡單的記錄一下本身學習HTTP協議的一些內容吧。文中參考了許多前人寫的博客以及本身的一些理解,在文中末尾會進行參考標註。html

  首先咱們先大致瞭解一下什麼是HTTP協議,所謂的HTTP協議,全稱:超文本傳輸協議,是用於從WEB服務器傳輸超文本(各種前端代碼,如html等)到本地瀏覽器的傳送協議。它是一個傳輸層基於TCP的應用層協議,它工做於客戶端-服務端架構爲上,瀏覽器(HTTP客戶端)經過URL向HTTP服務端(WEB服務器)發送全部請求。Web服務器根據接收到的請求後,向客戶端發送響應信息。它主要有如下特色:前端

1.簡單快捷:客戶端向服務端請求服務的時候,只須要傳輸請求方法(put、get、post、delete等)和URL便可(有的時候請求當中還須要攜帶body,這是後話)。因爲HTTP協議簡單,使得HTTP服務器的程序規模小,於是通訊速度很快。java

2.靈活:HTTP容許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記(若有興趣知道它能夠傳輸什麼類型的內容,能夠查詢如下Content-Type的類型表格)。瀏覽器

3.無鏈接:所謂的無鏈接,就是說HTTP是一個請求-響應的形式協議,即客戶端發起一次請求,服務器相應該請求以後即斷開鏈接。採用這種方式能夠節省傳輸時間。服務器

4.無狀態:指協議對於事務處理沒有記憶能力。優勢是:在服務器不須要先前信息時它的應答就較快。但其缺點也很明顯:在缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。架構

在大致瞭解了HTTP協議的內容和特色,咱們再從細節介紹一下HTTP協議常涉及的一些重點,在特色1當中咱們提到,HTTP只須要傳輸請求方法和URL便可,那麼什麼是URL呢?app

 

HTTP之URL框架

  URL全稱:統一資源定位符,是互聯網上用來標識某一處資源的地址。所謂標識某一處資源地址的意思就是,經過這個URL,咱們能夠在互聯網上找到這個資源,再形象點好比,這個就至關於快遞要寄到家裏時,須要查看的寄件地址。那麼咱們經過一個例子來看看URL是由哪幾個部分組成的。jsp

http://www.mycomputer.com:8080/wellhold/test/index.jsp?name=wellhold

經過這個地址咱們來分析一下一個完整的url是由哪幾部分組成的:tcp

協議部分:http

域名部分:www.mycomputer.com,有時候能夠是惟一的IP地址表示(實際上域名最後仍是會被DNS映射到IP地址的)

端口號部分:8080

虛擬地址部分:/wellhold/test/,表示能夠在上述域名的服務器的這個地址找到該HTTP請求想要的資源

請求文件名:index.jsp,想要的資源名稱

參數部分:name=wellhold,請求當中須要攜帶的參數(參數部分不是必須的)

經過這個例子,就能夠看出一個完整的URL主要分爲了以上幾個部分。

那麼瞭解了URL以後,咱們發如今介紹URL的時候,老是提到一個HTTP請求,那麼HTTP請求當中究竟有什麼東西了?接下來咱們介紹一下HTTP請求。

 

HTTP Request(請求)

一個完整的HTTP Request主要包含了如下部分:請求行(request line)、請求頭部(header)、空行、請求數據。二話不說,先上一張圖:

再經過一個例子來講明:

POST / HTTP1.1
Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive

name=Professional%20Ajax&publisher=Wiley

第一部分:請求行,第一行明瞭是post請求,以及http1.1版本。
第二部分:請求頭部,第二行至第六行。HOST將指出請求的目的地.User-Agent,服務器端和客戶端腳本都能訪問它,它是瀏覽器類型檢測邏輯的重要基礎.該信息由你的瀏覽器來定義,而且在每一個請求中自動發送等等
第三部分:空行,第七行的空行。
第四部分:請求數據,第八行。

其實也是很簡單明瞭的東西,這裏就再也不進行贅述了,接下來咱們再瞭解瞭解HTTP當中的response

 

HTTP RESPONSE(響應)

http的相應也主要是由四個部分組成:狀態行、消息報頭、空行和正文。

第一行爲狀態行,(HTTP/1.1)代表HTTP版本爲1.1版本,狀態碼爲200,狀態消息爲(ok)

第二行和第三行爲消息報頭,Date:生成響應的日期和時間;Content-Type:指定了MIME類型的HTML(text/html),編碼類型是UTF-8

以後接着一行空行

最後接着就是正文。

 

附:關於http當中的狀態碼含義

1xx:指示信息--表示請求已接收,繼續處理

2xx:成功--表示請求已被成功接收、理解、接受

3xx:重定向--要完成請求必須進行更進一步的操做

4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現,400:請求有語法錯誤、404:資源不存在、401:請求未受權、403:服務器拒絕服務

5xx:服務器端錯誤--服務器未能實現合法的請求,500:服務器發生錯誤、503:服務器當前不能提供服務,一段時間後可恢復。

 

 在瞭解完了HTTP協議的各大要素以後,咱們來看看HTTP協議的具體工做的原理,或者說是流程是怎麼樣的呢?

 

HTTP工做原理(流程)

  HTTP採用的是請求/響應的模式,客戶端向服務器發送一個請求報文(HTTP Request),在這個報文包含了請求行(請求方法、URL、版本號)、請求頭部(host、user-agent、content-type、connection)、請求數據(能夠沒有,在post當中有,在get當中將請求數據寫入了url當中)。服務器接受到請求之後,以一個HTTP Response進行響應,響應包括了狀態行(版本號、狀態碼)、響應報頭(date、content-type、)以及響應正文(請求的具體資源)。如下是具體的工做步驟:

1.客戶端向服務器發起請求:HTTP客戶端(一般是瀏覽器)與WEB服務器的HTTP端口(默認80)創建一個TCP套接字的鏈接。

2.發送HTTP請求:客戶端經過tcp套接字向服務器發送一個HTTP Request

3.服務器響應請求:WEB服務器解析請求後,在服務器當中尋找到相應的要請求的資源,將資源裝入HTTP Response,複寫到TCP的套接字,由客戶端讀取。

4.釋放TCP鏈接:若在HTTP Request當中的connection爲close,則服務器主動關閉鏈接;若connection爲keepalive,則鏈接保持一段時間,在該時間內能夠繼續接受請求。

5.客戶端解析響應內容獲取資源。

相關文章
相關標籤/搜索