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 17:04
下一篇 2017-02-15 17:05

相關推薦

  • centos7上實現LAMP,并搭建wordpress

    實驗:LAMP的架構,并搭建wordpress              1、準備環境,                      #mkdir src    …

    2017-08-07
  • rpm及yum

    庫文件 查看二進制程序所依賴的庫文件: ldd /PATH/TO/BINARY_FILE [root@localhost ~]# ldd /bin/bash 管理及查看本機裝載的庫文件: ldconfig /sbin/ldconfig -p:  顯示本機已經緩存的所有可用庫文件 名及文件路徑映射關系 配置文件:/etc/ld.so.conf, /e…

    Linux干貨 2016-08-29
  • N21-北京-兔鍋-馬哥教育網絡班21期+第二周課程練習

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 A.wc命令: 功能:統計指定文件中的字節數、字數、行數,并將統計結果顯示輸出 語法:wc [選項]文件… 參數: -c:統計字節數。 -l:統計行數。 -m:統計字符數。這個標志不能與 -c 標志一起使用。 -w:統計字數。一個字被定義為…

    Linux干貨 2016-07-07
  • HAProxy實現請求的80端口轉發至后端的8000端口并實現動靜分離

    一 實驗目的 用HAProxy作為負載均衡器,實現把前端請求調度到后端,前端監聽80端口,轉發至后端的8000端口,并會對訪問資源進行判斷實現不同的訪問內容轉發至相對應的服務器。 二 實驗拓撲 三 實驗環境 IP 功能 192.168.20.108 HAProxy 192.168.237.129 Nginx 192.168.237.130 Nginx+PHP…

    Linux干貨 2016-12-19
  • Linux第一周心得

          第一次接觸Linux,內心還是有點緊張,怕自己學不會、怕太難。不過,還是想挑戰一下自己,所以來到了馬哥學習Linux。      過來的第一天有點坎坷,不過還好有小琰姐的陪伴,一直和我們東西奔走,總算是解決了一大堆的麻煩,所以,感激……表白小琰姐!哈哈哈  撒花花  …

    Linux干貨 2017-07-15
  • grep命令

    ]# chmod -R 700 /home/tuser1 ]# ll /home/tuser1/ total 0 drwx——. 2 root root 72 Nov 20 17:33 skel 新增用戶與組: 顯示/proc/meminfo: 顯示shell 非 /sbin/nologin 的用戶 找出/etc/passwd文件中一…

    Linux干貨 2016-11-20

評論列表(1條)

  • luoweiro
    luoweiro 2017-02-22 22:56

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

欧美性久久久久