Java Http的基礎(chǔ)概念了解
學完了計算機網(wǎng)絡(luò)課程以后,確實學到了一些網(wǎng)絡(luò)的概念,初步擁有了對網(wǎng)絡(luò)的一些認識。這些概念雖然可以用來解釋平時網(wǎng)絡(luò)上遇到的一些問題,但是真正把網(wǎng)絡(luò)的知識運用在平時編程當中,機會還是比較少的。所以,對網(wǎng)絡(luò)的一些概念大多還是來自于書本,在平時學習的過程中,沒有自己親自體會到這些概念的用處,無法學以致用。
有一次我看到了一個Java手寫Http 服務(wù)器的代碼,感覺眼前一亮,很是有趣。這個程序是通過TCP編程來構(gòu)建一個簡單的Http服務(wù)器。正好也對應(yīng)了計算機網(wǎng)絡(luò)分層的概念,Http協(xié)議是建立在TCP協(xié)議之上的,所以可以使用TCP編程來構(gòu)建Http服務(wù)器。因此我準備來寫一個系列博客記錄一下自己的學習過程。這一些列會包括一些概念的介紹,然后是逐步編碼實現(xiàn)一個Http服務(wù)器的小demo。
基本概念了解
網(wǎng)絡(luò)的分層
注:關(guān)于概念的東西,這里不會介紹太多,畢竟還是書本上的知識更加全面一些,這里主要就是介紹一些概念。
計算機網(wǎng)絡(luò)被劃分為具有層次的結(jié)構(gòu),按照目前使用的TCP/IP 4層協(xié)議。TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協(xié)議/網(wǎng)際協(xié)議)是指能夠在多個不同網(wǎng)絡(luò)間實現(xiàn)信息傳輸?shù)膮f(xié)議簇。 我們學習的時候,是劃分成了五層協(xié)議來學習的,從底層到高層分別是:物理層->數(shù)據(jù)鏈路層->網(wǎng)絡(luò)層->傳輸層->應(yīng)用層。
這里只要知道:HTTP協(xié)議是建立在TCP協(xié)議之上的(或者應(yīng)用層是建立在傳輸層之上的)。
感興趣的可以去了解一下 TCP/IP 和 OSI 的關(guān)系,并且為何是TCP/IP成為了主流?
HTTP協(xié)議
HTTP(HyperText Transfer Protocol),中文是超文本傳輸協(xié)議。它是用于從萬維網(wǎng)(WWW:World Wide Web )服務(wù)器傳輸超文本到本地計算機的傳送協(xié)議。HTTP基于TCP/IP通信協(xié)議來傳遞數(shù)據(jù)。 HTTP基于客戶端/服務(wù)端(C/S)架構(gòu)模型,是一個無狀態(tài)的請求/響應(yīng)協(xié)議。 我們每天都會使用它,無論是瀏覽網(wǎng)頁、看視頻(基于Http協(xié)議的視頻流)或者是下載文件(這里指使用Http協(xié)議下載),都是Http協(xié)議在起作用,可見它的無處不在。
但是,作為一個計算機專業(yè)的學生,光知道這些還是不夠的,我們需要了解具體的協(xié)議。上面說了,HTTP是一個請求、響應(yīng)協(xié)議,這里就是說,用戶發(fā)送一個請求,會得到一個響應(yīng)。請求和響應(yīng)都會對應(yīng)一個協(xié)議報文,分別稱之為請求報文和響應(yīng)報文,通常我們說HTTP報文就是指這二者。
HTTP報文分為報文頭和報文體。 報文頭部是一些必要的控制信息和對報文體數(shù)據(jù)的說明信息。通過這些信息,瀏覽器(通常是瀏覽器)就可以處理各種信息了,無論是文字、視頻還是圖片都是通過報文在網(wǎng)絡(luò)上面進行傳輸。
請求報文和響應(yīng)報文
這里主要是需要知道報文的結(jié)構(gòu)特點,因為后面需要解析簡單的HTTP報文(更詳細的報文知識,可以閱讀書籍或者參考其他人的博客?;蛘吣阋部梢灾苯娱喿x后面的博客,遇到問題再去看,這樣效果會更好?。?報文頭部每一行需要一個回車換行符:CRLF CR: \r LF: \n 報文頭和報文體之間使用一個單獨的CRLF分開。 注意:GET請求沒有報文體。
//請求報文 GET /test/hi-there.txt HTTP/1.1\r\n Accept: text/plain\r\n Host: www.joes-hardwar.com\r\n
//請求報文 HTTP/1.0 200 OK\r\n Content-Type: text/plain\r\n Content-Length: 19\r\n \r\n Hi! I'm a message!
HTTP和TCP的關(guān)系
HTTP協(xié)議是建立在TCP協(xié)議之上的,上面我們所看到的請求和響應(yīng)報文,對于TCP來說就是一串網(wǎng)絡(luò)字節(jié)流。 我們后面的代碼會加深你對于這句話的理解了。這里使用Java語言來進行編程,在Java中使用TCP編程,主要就是使用Java提供的Socket 套接字,也就是 Socket 和 ServerSocket 兩個類。
總結(jié)
這里主要就是簡略介紹一下需要的概念知識和需要具備的編程能力。
1.了解網(wǎng)絡(luò)分層的概念,知道HTTP和TCP的關(guān)系。
2.了解HTTP報文的結(jié)構(gòu)特點。
3.具備Socket和ServerSocket編程的能力。
到此這篇關(guān)于Java Http的基礎(chǔ)概念了解的文章就介紹到這了,更多相關(guān)Http基礎(chǔ)概念內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Servlet+JavaBean+JSP打造Java Web注冊與登錄功能
比作MVC的話,控制器部分采用Servlet來實現(xiàn),模型部分采用JavaBean來實現(xiàn),而大部分的視圖采用Jsp頁面來實現(xiàn),接下來我們就來詳細看看如何用Servlet+JavaBean+JSP打造Java Web注冊與登錄功能2016-05-05Java后臺基于POST獲取JSON格式數(shù)據(jù)
這篇文章主要介紹了Java后臺基于POST獲取JSON格式數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03Nacos客戶端配置中心緩存動態(tài)更新實現(xiàn)源碼
這篇文章主要為大家介紹了Nacos客戶端配置中心緩存動態(tài)更新實現(xiàn)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-03-03Java數(shù)據(jù)庫連接池之DBCP淺析_動力節(jié)點Java學院整理
這篇文章主要為大家詳細介紹了Java數(shù)據(jù)庫連接池之DBCP的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08Java?Servlet響應(yīng)httpServletResponse過程詳解
HttpServletResponse是處理http響應(yīng)的對象,調(diào)用該對象的方法,設(shè)置到對象屬性的內(nèi)容,tomcat最終會組織為http響應(yīng)報文2022-02-02