HTTP協議

HTTP協議

  HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用于從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。HTTP是一個基于TCP/IP通信協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。HTTP協議工作于客戶端-服務端架構之上。瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB服務器發送所有請求。Web服務器根據接收到的請求后,向客戶端發送響應信息。

h1.jpg

HTTP協議的版本

  • http/0.9:已過時。只接受 GET 一種請求方法,沒有在通訊中指定版本號,且不支持請求頭。由于該版本不支持 POST 方法,所以客戶端無法向服務器傳遞太多信息。

  • http/1.0:這是第一個在通訊中指定版本號的HTTP 協議版本,至今仍被廣泛采用,特別是在代理服務器中。

  • http/1.1:當前版本。持久連接被默認采用,并能很好地配合代理服務器工作。還支持以管道方式同時發送多個請求,以便降低線路負載,提高傳輸速度。

  • http/2.0:IETF會讓所有互聯網通路默認選擇的方式來引入加密,互聯網專家們將新一代加密協議稱為“HTTP 2.0”。

HTTP之URL

  HTTP使用統一資源標識符(Uniform Resource Identifiers, URI)來傳輸數據和建立連接。URL是一種特殊類型的URI,包含了用于查找某個資源的足夠的信息。URL,全稱是UniformResourceLocator, 中文叫統一資源定位符,用于描述服務器某特定資源的位置。

以下面這個URL為例,介紹下普通URL的各部分組成:

  http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name  

  • 1、.協議部分:該URL的協議部分為“http:”,這代表網頁使用的是HTTP協議。在Internet中可以使用多種協議,如HTTP,FTP等等本例中使用的是HTTP協議。在"HTTP"后面的“//”為分隔符。

  • 2、域名部分:該URL的域名部分為“www.aspxfans.com”。一個URL中,也可以使用IP地址作為域名使用。

  • 3、端口部分:跟在域名后面的是端口,域名和端口之間使用“:”作為分隔符。端口不是一個URL必須的部分,如果省略端口部分,將采用默認端口。

  • 4、虛擬目錄部分:從域名后的第一個“/”開始到最后一個“/”為止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是“/news/”。

  • 5、文件名部分:從域名后的最后一個“/”開始到“?”為止,是文件名部分,如果沒有“?”,則是從域名后的最后一個“/”開始到“#”為止,是文件部分,如果沒有“?”和“#”,那么從域名后的最后一個“/”開始到結束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一個URL必須的部分,如果省略該部分,則使用默認的文件名。

  • 6、錨部分:從“#”開始到最后,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個URL必須的部分。

  • 7、參數部分:從“?”開始到“#”為止之間的部分為參數部分,又稱搜索部分、查詢部分。本例中的參數部分為“boardID=5&ID=24618&page=1”。參數可以允許有多個參數,參數與參數之間用“&”作為分隔符。

HTTP請求消息Request

  客戶端發送一個HTTP請求到服務器的請求消息包括請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成。

h2.png

1、請求行
  由3部分組成,分別為:請求方法(method)、URL以及協議版本(version),之間由空格分隔。
  method:請求方法,標明客戶端希望服務器對資源執行的動作。
  • GET:從服務器獲取一個資源

  • HEAD:只從服務器獲取文檔的響應首部

  • POST:向服務器發送要處理的數據

  • PUT:將請求的主體部分存儲在服務器上

  • DELETE:請求刪除服務器上指定的文檔

  • TRACE:追蹤請求到達服務器中間經過的代理服務器

  • OPTIONS:請求服務器返回對指定資源支持使用的請求方法

  協議版本(version)的格式為:HTTP/主版本號.次版本號,常用的有HTTP/1.0和HTTP/1.1
2、請求頭部
  請求頭部為請求報文添加了一些附加信息,由“名/值”對組成,每行一對,名和值之間使用冒號分隔。
3、請求數據
  請求數據也叫主體,可以添加任意的其他數據

HTTP響應消息Response

  一般情況下,服務器接收并處理客戶端發過來的請求后會返回一個HTTP的響應消息。HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文。

h3.jpg

1、狀態行
  由3部分組成,分別為:協議版本,狀態碼(status),狀態碼描述,之間由空格分隔。
  status:狀態代碼為3位數字,200~299的狀態碼表示成功,300~399的狀態碼指資源重定向,400~499的狀態碼指客戶端請求出錯,500~599的狀態碼指服務端出錯(HTTP/1.1向協議中引入了信息性狀態碼,范圍為100~199)
  常用的狀態碼:
  • 200:成功,請求的所有數據通過響應報文的entity-body部分發送:ok

  • 301:請求的URL指向的資源已經被刪除,但在響應報文中通過首部Location指明了資源下載所處的新位置:Moved Permanently

  • 302:與301相似,但在響應報文中通過Location指明資源限制所處臨時新位置:Found

  • 304:客戶端發出了條件式請求,但服務器上的額資源未曾發送改變,則通過響應此響應狀態碼通知客戶端:Not Modified

  • 401:需要輸入賬號和密碼認證方能訪問資源:Unauthorized

  • 403:請求被禁止,Forbidden

  • 404:服務器無法找到客戶端請求的資源:Not Found

  • 500:服務器內部錯誤:Internal Server Error

  • 502:代理服務器從后端服務器收到了一條偽響應:Bad Gateway

首部的分類

  1、通用首部:
  • Date:報文的創建時間

  • Connection:連接狀態,如keep-alive,close

  • Via:顯示報文經過的中間節點

  • Cache-Control:控制緩存

  2、請求首部
  • Accept:通過分期自己可接受的媒體類型

  • Accept-Charset:接受的字符集

  • Accept-Encoding:接受的編碼格式,如gzip

  • Accept-Language:接受的語言

  • Host:請求的服務器名稱的端口號

  • Referer:包含當前正在請求的資源的上一級資源

  • User-Agent:客戶端代理

    條件式請求首部:
  • If-Modified-Since:自從指定的時間之后,請求的資源是否發生過修改

  • f-None-Match:本地緩存中存儲的文檔的ETag標簽是否與服務器文檔的ETag不匹配

    安全請求首部:
  • Authorization:向服務器發送認證信息,如賬號密碼

  • Cookie:客戶端向服務器發送cookie

    代理請求首部:
  • Proxy-Authorization::向代理服務器認證

  3、響應首部:
   信息性:
  • Age:響應持續時長

  • Server:服務器程序軟件名稱和版本

    協商首部:某資源有多種表示方法時使用
  • Accept-Ranges:服務器可接受的請求范圍類型

  • Vary:服務器查看的其它首部列表

    安全響應首部:
  • Set-Cookie:向客戶端設置cookie

  • WWW-Authwenticate:來自服務器對客戶端的質詢認證表單

  4、實體首部:
  • Allow:列出此實體可使用的請求方法

  • Location:告訴客戶端真正的實體位于何處

  • Content-Encoding:內容的實體格式

  • Content-Language:內容的語言

  • Content-Length:主體的長度

  • Content-Location:實體正則所處位置

  • Content-Type:主機的對象類型

  緩存相關:
  • ETag:實體的擴展標簽

  • Expires:實體的過期時間

  • Last-Modified:最后一次修改的時間

一次完整的http請求處理過程

  HTTP通信機制是在一次完整的HTTP通信過程中,Web瀏覽器與Web服務器之間將完成下列7個步驟:

1、 建立TCP連接

  在HTTP工作開始之前,Web瀏覽器首先要通過網絡與Web服務器建立連接,該連接是通過TCP來完成的,該協議與IP協議共同構建Internet,即著名的TCP/IP協議族,因此Internet又被稱作是TCP/IP網絡。HTTP是比TCP更高層次的應用層協議,根據規則,只有低層協議建立之后才能進行更高層協議的連接,因此,首先要建立TCP連接,一般TCP連接的端口號是80。

2、Web瀏覽器向Web服務器發送請求命令

  一旦建立了TCP連接,Web瀏覽器就會向Web服務器發送請求命令。例如:GET/sample/hello.jsp HTTP/1.1。

3、Web瀏覽器發送請求頭信息

  瀏覽器發送其請求命令之后,還要以頭信息的形式向Web服務器發送一些別的信息,之后瀏覽器發送了一空白行來通知服務器,它已經結束了該頭信息的發送。

4、Web服務器應答

  客戶機向服務器發出請求后,服務器會客戶機回送應答, HTTP/1.1 200 OK ,應答的第一部分是協議的版本號和應答狀態碼。

5、 Web服務器發送應答頭信息

  正如客戶端會隨同請求發送關于自身的信息一樣,服務器也會隨同應答向用戶發送關于它自己的數據及被請求的文檔。

6、Web服務器向瀏覽器發送數據

  Web服務器向瀏覽器發送頭信息后,它會發送一個空白行來表示頭信息的發送到此為結束,接著,它就以Content-Type應答頭信息所描述的格式發送用戶所請求的實際數據。

7、Web服務器關閉TCP連接

  一般情況下,一旦Web服務器向瀏覽器發送了請求數據,它就要關閉TCP連接,然后如果瀏覽器或者服務器在其頭信息加入了這行代碼:Connection:keep-alive,TCP連接將在發送后將仍然保持打開狀態,于是,瀏覽器可以繼續通過相同的連接發送請求。保持連接節省了為每個請求建立新連接所需的時間,還節約了網絡帶寬。

 

原創文章,作者:641348038@qq.com,如若轉載,請注明出處:http://www.www58058.com/68039

(0)
641348038@qq.com641348038@qq.com
上一篇 2017-02-15
下一篇 2017-02-15

相關推薦

  • 企業面試題

    要求: 將一下數據進行排序(字母部分已小到大排序) 101.37.8.249 wz417-419/wz119-125/wz7-16/wz571/wz544/wz1-6101.37.21.19 wz545/wz453-456/wz441-444116.62.4.21 wz106-118/wz514-516/wz581/wz190-199/wz572101.37…

    Linux干貨 2017-06-27
  • linux文件權限管理和用戶,組管理常用命令應用實例

    用戶和組概念簡述 用戶一般指使用計算機的人,GNU/linux通過用戶和用戶組實現對計算機的文件訪問和設備使用控制。 用戶分類1.管理員root(類似皇帝,權力最大)2.普通用戶:分為系統用戶和普通登錄用戶。系統用戶不登錄,常用于發起一些進程提供服務,防止進程被劫持帶來的風險,所以盡量減少以root身份發起進程對外提供服務。3.用戶標識UID。管理員的UID…

    2017-10-05
  • Linux運維學習歷程-第四天-Linux的使用幫助和快捷鍵

    本章內容     命令存放位置     命令幫助      help     man幫助     其它幫助        命令歷史     快捷鍵 一、命令存放位置   &nbsp…

    Linux干貨 2016-08-03
  • 8.3號,第6天

    三種權限rwx對文件和目錄的不同意義: 權限對于目錄的意義: 1,r權限:擁有此權限表示可以讀取目錄結構列表,也就是說可以查看目錄下的文件名和子目錄名,注意:僅僅指的是名字。 2、w權限:擁有此權限表示具有更改該目錄結構列表的權限,總之,目錄的w權限與該目錄下的文件名或子目錄名的變動有關,注意:指的是名字。具體如下:      …

    Linux干貨 2016-08-05
  • varnish淺述

    安裝varnish,安裝包需要到官網下載http://www.varnish-cache.org/releases/index.html varnish的程序環境: /etc/varnish/varnish.params:配置varnish服務進程的工作特性,例如監聽的地址、端口及緩存機制等; /etc/varnish/default.vcl:配置各Chil…

    2016-11-15
  • Linux終端類型

        終端(Terminal)也稱終端設備,是計算機網絡中處于網絡最外圍的設備,主要用于用戶信息的輸入以及處理結果的輸出等。在早期計算機系統中,由于計算機主機昂貴,因此一個主機(IBM大型計算機)一般會配置多個終端,這些終端本身不具備計算能力,僅僅承擔信息輸入輸出的工作,運算和處理均由主機來完成。在個人計算機時代,個人計算機可以運行稱為…

    Linux干貨 2016-10-13

評論列表(1條)

  • luoweiro
    luoweiro 2017-02-22 22:56

    非常贊的http總結,這部分常被面試問到,尤其是http2.0相關的知識,結合ssl實現全站https。

欧美性久久久久