javhd觀看教程
超文本傳輸協(xié)議(HTTP,Hypertext Transfer Protocol)是互聯(lián)網上應用最為廣泛的一種網絡協(xié)議。所有的Web文件都必須遵守這個標準。設計HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁面的方法。1960年美國人Ted Nelson構思了一種通過計算機處理文本信息的方法,并稱之為超文本(hypertext),這成為了HTTP超文本傳輸協(xié)議標準架構的發(fā)展根基。Ted Nelson組織協(xié)調萬維網協(xié)會(World Wide Web Consortium)和互聯(lián)網工程工作小組(Internet Engineering Task Force)共同合作研究,最終發(fā)布了一系列的RFC文檔,其中著名的RFC 2616定義了HTTP 1.1。
HTTP基于TCP/IP通信協(xié)議來傳遞數據,HTTP屬于OSI網絡七層協(xié)議模型中的最上層:應用層,由請求和響應組成,是一個標準的客戶端服務器模型。HTTP是一個無狀態(tài)的協(xié)議。HTTP協(xié)議的版本有0.9、1.0、1.1和2.0,目前廣泛使用的是1.1版本。
HTTP默認端口號為80。它也可以承載在TLS和SSL之上,通過加密、認證的方式實現數據傳輸的安全,稱為HTTPS,HTTPS默認端口號為443。
HTTP協(xié)議具有以下特點:
● 簡單快速,客戶端向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET和POST。每種方法規(guī)定了客戶與服務器聯(lián)系時的類型。由于HTTP協(xié)議簡單,使得HTTP服務器的程序規(guī)模小,因而通信速度很快。
● 靈活,HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
● 無連接,無連接的含義是限制每次連接只處理一個請求。服務器處理完成客戶的請求,并收到客戶的應答后,即斷開連接。采用這種方式可以節(jié)省傳輸時間。
● 無狀態(tài),HTTP協(xié)議是無狀態(tài)協(xié)議。無狀態(tài)是指協(xié)議對于事務處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重新傳送數據,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要之前的信息時它的應答就比較快。
HTTP協(xié)議規(guī)定了Web的基本運作過程,以及瀏覽器與Web服務器之間的通信細節(jié)??蛻舳酥鲃影l(fā)出HTTP請求,服務器端接收HTTP請求,再返回相應的HTTP響應結果。客戶端與服務器端之間的一次信息交換包括以下過程:
● 客戶端與服務器端建立TCP連接。
● 客戶端發(fā)出HTTP請求。
● 服務器端發(fā)出響應的HTTP響應。
● 客戶端與服務器端之間的TCP連接關閉。
當用戶在瀏覽器中輸入URL地址:http://www.itxdl.cn后,瀏覽器與服務器之間的具體通信過程如下:
● 瀏覽器與網絡上域名為www.itxdl.cn的Web服務器建立TCP連接。
● 瀏覽器發(fā)出要求訪問index.html(網站主頁,歡迎頁)的HTTP請求。
● Web服務器在接收到HTTP請求后,解析HTTP請求,然后發(fā)回包含index.html文件數據的HTTP響應。
● 瀏覽器在接收到HTTP響應后,解析HTTP響應,并在窗口中展示index.html文件。
● 瀏覽器與Web服務器之間的TCP連接關閉。
當用戶在上面的網站頁面中用鼠標點擊“JavaEE工程師”的超鏈接時,將會觸發(fā)瀏覽器與Web服務器開始一次新的HTTP通信,在這次通信過程中,瀏覽器會發(fā)出請求訪問“JavaEE工程師”頁面的HTTP請求。
從瀏覽器與Web服務器的通信過程中,可以看出瀏覽器應該具備以下功能:
● 請求與Web服務器建立TCP連接。
● 創(chuàng)建并發(fā)送HTTP請求。
● 接收并解析HTTP響應。
● 在瀏覽器窗口中展示HTML文檔。
Web服務器應該具有以下功能:
● 接收來自客戶端瀏覽器的TCP連接請求。
● 接收并解析HTTP請求。
● 創(chuàng)建并發(fā)送HTTP響應。
HTTP客戶端程序和HTTP服務器分別由不同的軟件開發(fā)商提供,目前最常使用的HTTP客戶端程序包括IE(Microsoft Edge)、Firefox、Opera和NetScape、Chrome等,最常用的HTTP服務器包括IIS和Apache等。HTTP客戶程序和服務器程序都可以用任意的編程語言編寫,那么用VC編寫的HTTP客戶程序能否與用Java編寫的HTTP服務器順利通信呢?答案是肯定的。此外,運行在Windows平臺上的HTTP客戶程序能否與運行在Linux平臺上的HTTP服務器通信呢?答案也是肯定的。
HTTP客戶程序和服務器程序分別用不同的語言編寫,并且運行在不用的平臺上,雙方如何能看得懂對方的數據呢?這要歸功于HTTP協(xié)議。HTTP協(xié)議嚴格規(guī)定了HTTP請求和HTTP響應的數據格式,只要HTTP服務器與客戶程序之間的交換數據都遵守HTTP協(xié)議,雙方都能看得懂對方發(fā)送的數據,從而能順利交流。
HTTP協(xié)議由兩部分組成,分別是請求部分和響應部分。
1.3.2 HTTP協(xié)議中的請求
客戶端連接上服務器端后,向服務器端請求某個Web資源,稱之為客戶端向服務器端發(fā)送了一個HTTP請求。
一個完整的HTTP請求包含以下內容:
● 請求行
● 請求頭
● 請求空行
● 請求體
一個HTTP請求的示例:
POST /servlet/login.html HTTP/1.1
Host: localhost:8088
Content-Length: 21
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml; q=0.9,image/webp, */*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
name=snape&pwd=123456
現在我們分析上面請求示例中各部分的內容:
● 請求行
HTTP請求中的請求行描述了請求方法,請求的服務器地址以及所使用的HTTP協(xié)議版本。
上面的HTTP請求實例中,位于請求行中的POST稱之為請求方式,HTTP協(xié)議中定義的請求方式如表1.1所示:
表1.1 HTTP協(xié)議中定義的請求方式
用戶如果沒有設置,默認情況下瀏覽器向服務器發(fā)送的都是GET請求,例如在瀏覽器中直接輸入地址訪問,點擊超鏈接訪問等都是GET請求,用戶如果想把請求方式改為POST,可通過更改表單的提交方式實現。
不管POST還是GET,都用于向服務器端請求某個Web資源,這兩種方式的區(qū)別會在本書的1.3.4小節(jié)中進行詳細的介紹。
在請求行中,請求方式之后的是URL地址和HTTP協(xié)議的版本。它們之間使用空格分隔。
● 請求頭
HTTP請求中的請求頭由一個個的鍵值對組成,是用來通知服務器有關客戶端的信息的。HTTP請求中常用以下的請求頭來告訴服務器一些信息:
(1)Accept:瀏覽器可接受的MIME類型。
(2)Accept-Charset:瀏覽器可接受的字符集。
(3)Accept-Encoding:瀏覽器能夠進行解碼的壓縮格式。
(4)Accept-Language:瀏覽器所處的語言環(huán)境環(huán)境。
(5)Host:瀏覽器通過這個頭告訴服務器想訪問哪臺主機。
(6)Content-Length:表示請求消息的正文長度。
(7)Content-Type:表示請求的MIME類型。
(8)User-Agent:表示瀏覽器的標識信息。
(9)Cache-Control:標識瀏覽器緩存機制。
● 請求空行
在HTTP請求的請求頭和請求體之間,使用了一個請求空行用來分隔,告訴服務器端已經沒有請求頭信息了。即使請求體中沒有內容,也必須有一個請求空行
● 請求體
請求體用來向服務器發(fā)送數據信息,使用“key=value&key=value”的形式,在GET請求中,請求體是空的,GET請求的數據信息在請求行中的URL地址中進行拼接。
1.3.3 HTTP協(xié)議中的響應
一個HTTP響應代表了服務器端向客戶端返回的數據,一個HTTP完整的響應包含了以下內容:
● 響應行
● 響應頭
● 響應體
一個HTTP響應的示例:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Last-Modified: Thu, 08 Sep 2016 12:59:41 GMT
Content-Type: text/html
Content-Length: 588
Date: Thu, 08 Sep 2016 12:59:54 GMT
這是一個HTML頁面
現在我們分析上面響應示例中各部分的內容:
● 響應行
以及HTTP響應中的響應行用于描述服務器端對請求的處理結果,其中包括了HTTP協(xié)議的版本號已經響應狀態(tài)碼信息,狀態(tài)碼用于表示服務器對請求的處理結果。
響應狀態(tài)碼由三位十進制數字組成,第一個十進制數定義了狀態(tài)碼的類型,后兩個數字沒有分類的作用。響應狀態(tài)碼共分為5中類型,如下表1.2所示。
表1.2 響應狀態(tài)碼分類
目前比較常見的響應狀態(tài)碼如表1.3所示。
表1.3 常見響應狀態(tài)碼
● 響應頭
響應頭用于描述服務器的基本信息,以及對返回的數據進行描述,服務器通過這些數據的描述信息,通知客戶端如何處理服務器端返回的數據。HTTP響應中常用以下的響應頭來告訴瀏覽器一些信息:
(1)Server:服務器名稱,一般由Web服務器設置的,如:Apache、Tomcat。
(2)Location:通過設置Location通知瀏覽器跳轉到指定的地址再次發(fā)送請求。
(3)Content-Encoding:該響應頭告訴瀏覽器返回的數據的壓縮格式。
(4)Content-Length:該響應頭告訴瀏覽器返回的數據的長度。
(5)Content-Type:通過該響應頭告訴瀏覽器返回的數據的類型。
(6)Date:表示當前的GMT時間。
(7)Last-Modified:表示文檔的最后修改時間。
● 響應體
在HTTP響應中的響應體中,包含了服務器端返回給瀏覽器的數據。根據Content-Type類型的不同,響應體中的數據形式也不同。
1.3.4 HTTP協(xié)議中的GET和POST請求的區(qū)別
● GET請求:
(1)GET請求的數據,以鍵值對的形式在請求行中的URL后,以?進行拼接,多個鍵值對之間使用&拼接。
(2)GET請求只能傳輸字符串類型的數據。
(3)GET請求因瀏覽器限制URL長度的原因只能傳輸少量數據。
(4)因為GET請求會將傳輸的數據顯示在地址欄中,所以相對POST請求不安全。
● POST請求:
(1)POST請求的數據,以鍵值對的形式存儲在請求體中,多個鍵值對之間使用&拼接。
(2)POST請求可以傳輸任意類型的數據。
(3)POST請求對傳輸的數據的大小沒有限制。
(4)相對于GET請求,POST請求不會將傳輸的數據顯示在地址欄中,較為安全。
免責聲明:本網站內容主要來自原創(chuàng)、合作媒體供稿和第三方自媒體作者投稿,凡在本網站出現的信息,均僅供參考。本網站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。任何單位或個人認為本網站中的網頁或鏈接內容可能涉嫌侵犯其知識產權或存在不實內容時,應及時向本網站提出書面權利通知或不實情況說明,并提供身份證明、權屬證明及詳細侵權或不實情況證明。本網站在收到上述法律文件后,將會依法盡快聯(lián)系相關文章源頭核實,溝通刪除相關內容或斷開相關鏈接。
新聞排行榜
-
2021-01-21 11:23
-
2018-09-28 11:33
-
2018-09-28 11:33
-
2018-09-28 11:33
-
2018-09-28 11:33
新聞熱門推薦
-
2021-01-21 11:23
-
2018-09-28 11:33
-
2018-09-28 11:33
-
2018-09-28 11:33
-
2018-09-28 11:33