java網路通訊 HTTP協議

2021-09-11 03:40:53 字數 3619 閱讀 1463

** 

http協議是應用層的協義 

有個比較形象的描述:http是轎車,提供了封裝或者顯示資料的具體形式;socket是發動機,提供了網路通訊的能力。 

兩個計算機之間的交流無非是兩個埠之間的資料通訊,具體的資料會以什麼樣的形式展現是以不同的應用層協議來定義的`如http`ftp`...

首先我們先大體了解一下什麼是http協議,所謂的http協議,全稱:超文字傳輸協議,是用於從web伺服器傳輸超文字(各類前端**,如html等)到本地瀏覽器的傳送協議。它是乙個傳輸層基於tcp的應用層協議,它工作於客戶端-服務端架構上,瀏覽器(http客戶端)通過url向http服務端(web伺服器)傳送所有請求。web伺服器根據接收到的請求後,向客戶端傳送響應資訊。它主要有以下特點:

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

2.靈活:http允許傳輸任意型別的資料物件。正在傳輸的型別由content-type加以標記(如有興趣知道它可以傳輸什麼型別的內容,可以查詢以下content-type的型別**)。

3.無連線:所謂的無連線,就是說http是乙個請求-響應的形式協議,即客戶端發起一次請求,伺服器相響應請求之後即斷開連線。採用這種方式可以節省傳輸時間。

4.無狀態:指協議對於事務處理沒有記憶能力。優點是:在伺服器不需要先前資訊時它的應答就較快。但其缺點也很明顯:在缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。

在大體了解了http協議的內容和特點,我們再從細節介紹一下http協議常涉及的一些重點,在特點1當中我們提到,http只需要傳輸請求方法和url即可,那麼什麼是url呢?

http之url

url全稱:統一資源定位符,是網際網路上用來標識某一處資源的位址。所謂標識某一處資源位址的意思就是,通過這個url,我們可以在網際網路上找到這個資源,再形象點比如,這個就相當於快遞要寄到家裡時,需要檢視的寄件位址。那麼我們通過乙個例子來看看url是由哪幾個部分組成的。

協議部分:http

埠號部分:8080

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

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

通過這個例子,就可以看出乙個完整的url主要分為了以上幾個部分。

那麼了解了url之後,我們發現在介紹url的時候,總是提到乙個http請求,那麼http請求當中究竟有什麼東西了?接下來我們介紹一下http請求。

http request(請求)

再通過乙個例子來說明:

第一部分:請求行,第一行明了是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.客戶端解析響應內容獲取資源。

網路通訊協議複習 HTTP

hypertext transfer protocol,超文字傳輸協議 通常執行在tcp之上。它指定了客戶端可能傳送給伺服器什麼樣的訊息以及得到什麼樣的響應。網際網路上應用最為廣泛的一種網路傳輸協議,所有的www檔案都必須遵守這個標準。請求和響應訊息的頭以ascii碼形式給出。採用80或8080埠 ...

java基礎 網路協議及網路通訊

udp 使用者資料報協議 傳輸層 面向無連線的協議,報頭8位元組 http 超文字傳輸協議 應用層 基於請求和響應模式 無狀態的協議,特點有 socket tcp ip協議的封裝和應用 客戶端 定義socket物件s,傳進引數 目標主機ip位址,目標埠號 因為是測試,所以ip填自己ip位址 loca...

網路通訊 http基礎

2 長連線 3 session 和 cookie的區別 uri uniform resource identifier 包含url uniform resource locator 和urn uniform resource name url 協議名 網域名稱 可以是ip位址 埠號 可省略 虛擬目錄...