Http協議

目錄:

1、概念html

2、詳解web

a)         客戶端數據庫

b)         傳輸內容瀏覽器

c)         服務器緩存

3、擴展內容引導tomcat

1、概念

Http協議中包含了兩個概念,一是Http,二是協議。服務器

Http:HyperText Transfer Protocol,便是超文本傳輸協議。網絡

協議:共同計劃與協商。app

課本上的概念老是讓人難以理解,下面用戶白話解釋下什麼是Http和協議。咱們從協議開始。性能

協議:多個方面在一塊兒約定的一系列規則,而後你們一塊兒去執行這個規則。

舉個例子:咱們平時去飯店吃飯一般會有如下幾個步驟:1.坐到合適的座位上。2.服務員拿出菜單點餐。3.服務員按照點餐菜單下單。4.服務員上菜。5.吃飯。6.結帳走人。這是咱們一般的步驟。若是把這些步驟和飯店約定好,每次到了這家飯店就按這個流程來執行,這一系列步驟就成了「我去飯店吃飯的協議」。我要遵循這個步驟,一樣飯店也要遵循這個步驟。再如:咱們天天中午都會在12:00鍾準時去這家飯店吃一份「蛋炒飯」。若是咱們與商家協定好,到了12點咱們過去,商家就會主動提供一份「蛋炒飯」,那麼這個就是「咱們的午飯協議」。

Http協議(超文本傳輸協議):將各類不一樣空間的文字信息組織在一塊兒的網狀文本數據交換而創建的規則、標準或約定。用技術語言解釋下就是:客戶端與服務端的一種數據通訊約定與規則。客戶端如:瀏覽器、本身開發的應用程序或APP。服務端如:IIS\Tomcat等。說的再直白點,能夠理解爲咱們使用瀏覽器訪問服務器端網頁時須要遵循的一系列規則(注:能夠這麼理解,但片面)。

2、詳解

1)  客戶端

客戶端主要職能有兩個,一個向服務器發送請求,另外一個是接收服務器返回的報文並解釋成友善的信息供咱們閱讀。

客戶端大概有如下幾類:瀏覽器、咱們本身寫的應用程序(桌面應用和APP應用)、其餘。咱們在平常生活中使用最多的就是瀏覽器了。

下面咱們以IE爲示例:

咱們在地址欄輸入網址並巧下回車,瀏覽器會爲咱們作以下的處理:

一、  解析出協議(http)、域名(www.cncoder.me)及訪問資源(index.html)

二、  使用http協議並建立請求報文向服務器端發送請求,圖2-2中的請求標頭。

三、  接收到服務器返回的內容並渲染展現。

在平常生活中,大部份客戶端的工做都由客戶端軟件進行了包裝和處理。但出於學習的目的咱們使用最原始的命令telnet來模擬http請求,以加深對客戶端職能的理解。

點擊【開始】--【運行】--輸入cmd打開命令行窗口。在命令行窗口中輸入telnet www.cncoder.me 80 ,以下圖所示:

而後敲擊一下回車。

使用快捷鍵"Ctrl+]"(ctrl+右中括號)來打開本地回顯功能,這樣咱們能夠看到輸入到窗口的內容,不然輸入的內容不顯示。

再次敲擊一下回車。

此時出現空白窗口,咱們就能夠模擬http請求向服務器發送請求報文了。在窗口中輸入:

GET /index.html HTTP/1.1

Host:www.cncoder.me

以下圖所示:

注意此處敲擊兩下回車。成功後服務器返回的報文會顯示在命令行窗口,以下圖所示:

 

小結:客戶端主要處理髮送請求及處理服務器返回的報文。

1)  傳輸內容

(1)     URL:URL是尋找信息時所須要的資源位置。經過URL客戶端才能找到網絡中的大量數據資源 。如:http://www.cncoder.me/index.html

URL分爲三個部分:

第一部分http是URL的方案,方案告訴客戶端使用什麼樣的協議去訪問服務器了,也能夠是fpt或https等。

第二部分www.cncoder.me ,指服務器的位置。

第三部分 /index.html是資源路徑,說明了請求的是服務器上哪一個特定的本地資源。

URL語法:<方案>://<用戶名>:<密碼>@主機:端口/路徑;參數?查詢#片斷

幾乎沒有幾個URL包含了全部這些組件。

方案:訪問服務器時使用的協議類型

用戶名:有些協議須要使用用戶名,如FTP匿名用戶登陸:ftp://anonymous@cncoder.me

密碼:有些協議須要使用密碼,如FTP用戶名密碼登陸:ftp://username:password@cncoder.me

主機:資源服務器的域名或IP地址

端口:服務器監聽的端口號,http協議默認是80端口。

路徑:服務器上本地資源的路徑。用「/」來分格。如:/theme/image/logo.png

參數:某些協議會輸入指定的參數,參數以name:value形式出現,中間用「;」來分格。

查詢:用「?」與其餘的組件分格開,並用「&」來分隔查詢。如:?id=1&name=cncoder

片斷:一般咱們說是html中的錨點。使用在客戶端,不會傳送給服務器。

(2)     報文:HTTP報文能夠分爲兩類:請求報文和響應報文,清求報文會向服務器請求一個動做,響應報文會將請求的結果返回給客戶端。請求報文和響應報文的結構基本相同。

下面爲咱們獲取服務器上一張圖片的報文。

請求報文:

GET /Theme/Image/logo.png HTTP/1.1

Host:www.cncoder.me

響應報文:

HTTP/1.1 200 OK

Content-Type:image/gif

Conetnt-Length4567

             

   
   

圖片

   
   

                       

 

請求報文的格式:

<方法><資源路徑><協議版本>

<報文頭信息>

<報文體信息>

響應報文格式

<協議版本><狀態碼><緣由短語>

<報文頭信息>

<報文體信息>

請求報文和響應報文只有起始行的語法不一樣。

常見請求報文頭信息

Host:」 www.cncoder.me

User-Agent:"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0"

Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"

Accept-Language:"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"

Accept-Encoding:"gzip, deflate"

Connection:"keep-alive"

常見響應頭信息

Content-Encoding:"gzip"

Content-Length:"1779"

Content-Type:"text/html"

Date:"Sun, 21 Aug 2016 11:45:07 GMT"

Last-Modified:"Sun, 21 Aug 2016 11:33:32 GMT"

Server:"Microsoft-IIS/7.5"

X-Powered-By:"ASP.NET"

(3)     方法:請求的起始行以方法做爲起始,方法用來告訴服務器要如何作。如:GET /index.html HTTP/1.1 中的GET就是方法

  1. GET 請求指定的頁面信息,並返回實體主體。
  2. HEAD 相似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭
  3. POST 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會致使新的資源的創建和/或已有資源的修改。
  4. PUT 從客戶端向服務器傳送的數據取代指定的文檔的內容。
  5. DELETE 請求服務器刪除指定的頁面。
  6. CONNECT HTTP/1.1協議中預留給可以將鏈接改成管道方式的代理服務器。
  7. OPTIONS  容許客戶端查看服務器的性能。
  8. TRACE 回顯服務器收到的請求,主要用於測試或診斷。

在開發過程當中咱們最經常使用的就是GET和POST方法。

(4)     狀態碼:當客戶端發起一次http請請求後,服務器會返回一個包含HTTP狀態碼的信息頭(server header)用以響應客戶端的請求。HTTP狀態碼的英文爲HTTP Status Code。

  1. 100~199 信息,服務器收到請求,須要請求者繼續執行操做
  2. 200~299 成功,操做被成功接收並處理
  3. 300~399 重定向,須要進一步的操做以完成請求
  4. 400~499 客戶端錯誤,請求包含語法錯誤或沒法完成請求
  5. 500~599 服務器錯誤,服務器在處理請求的過程當中發生了錯誤

經常使用狀態碼以下:

200-請求成功

404-請求的資源不存在

500-內部服務器錯誤

3)  服務器

(0)     服務器軟件一直在監聽端口是否有新的請求到達,如iis或tomcat在創建web站點後,默認會一直監聽80端口等待http請求到過服務器。

(1)     創建鏈接:若是客戶端已經打開一條到服務器的持久鏈接,則能夠直接使用,不然,客戶端須要在服務器打開一條新的鏈接。

(2)     接收請求報文:鏈接上有數據到過期,Web服務器會從網絡鏈接中讀取數據,並將請求報文中的內容解析出來。

如請求報文

GET /index.html HTTP/1.1CRLF

Host:www.cncoder.me

Accept:text/htmlCRLF

接收後會被表示爲

Name:Method  Value:GET

Name:Uri  Value:index.html

Name:Version  1.1

Name:Host  Value:www.cncoder.me

Name:Accept  Value:test/html

(3)     處理請求:當請求被接收和表示後,服務器即可以根據請求報文進行處理了。如:POST方法中提出報文主體的數據並插入到數據庫中。

(4)     訪問資源:請求處理完成後,好比Web會根據數據生成一系列的HTML頁面或圖片等信息。此步驟將訪問這些存儲在服務器上的物理文件。

(5)     構建響應:Web服務器在識別資源後,構造響應報文。響應報文中包含狀態碼、首行、主體等內容。

(6)     發送響應:服務器將響應的數據發送給客戶端機器。

(7)     記錄日誌:請求結束會Web服務器會在日誌文件中添加一條請求記錄。

3、擴展內容引導

  1. Web的組件結構中還包含代理、緩存、網關、隧道。
  2. HTTP協議是創建在TCP/IP協議基礎之上。
  3. HTTP性能很大一方面在於創建鏈接。HTTP/1.0時使用Keep-Alive。HTTP/1.1使用管道鏈接。

 

     關注下面二維碼,同窗習共進步。

 

相關文章
相關標籤/搜索