http協議簡介

1、簡介
1.1、HTTP協議是什麼?
即超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最爲廣泛的一種網絡協議,所有的WWW文件都必須遵守這個標準。從網絡參考模型來看,它是屬於應用層。它規定了計算機通信網絡中兩臺計算機之間進行通信所必須共同遵守的規定或規則,它允許將超文本標記語言(HTML)文檔從Web服務器傳送到客戶端的瀏覽器。
簡單的來說,它就是基於應用層一個規範一個標準!通訊雙發都需要遵守這一準則,這就是http協議!
  
1.2、http簡史
設計HTTP最初的目的是爲了提供一種發佈和接收HTML頁面的方法。1960年美國人Ted Nelson構思了一種通過計算機處理文本信息的方法,並稱之爲超文本(hypertext),這成爲了HTTP超文本傳輸協議標準架構的發展根基。Ted Nelson組織協調萬維網協會(World Wide Web Consortium)和互聯網工程工作小組(Internet Engineering Task Force )共同合作研究,最終發佈了一系列的RFC,其中著名的RFC 2616定義了HTTP 1.1,這也是我們現在最常用的版本,在此之前還存在HTTP 1.0版本以及HTTP 0.9版本

2、URI與URL
問: 爲什麼要區別URI與URL呢?
答:因爲我看書看博客資料都遇到過着兩個名詞,第一次遇到是在學習API的時候,那時候我是一臉懵逼,不是怎麼區分,感覺看過去都是一串網址呀!事實並非如此。
URI:統一資源標示符,只是標識資源在哪裏,這意味着存在多個URI可以指向該資源(例如:絕對與相對)【URI包含URL】
URI一般由三部分組成:
    1. 訪問資源的命名機制。
    2. 存放資源的主機名。
    3. 資源自身的名稱,由路徑表示。
    語法:[scheme:] scheme-specific-part
   URI以scheme和冒號開頭。Scheme用大寫/小寫字母開頭,後面爲空或者跟着更多的大寫/小寫字母、數字、加號、減號和點號。冒號把 scheme與scheme-specific-part分開了,並且scheme-specific-part的語法和語義(意思)由URI的名字空間決定。如下面的例子:
   http://www.cnn.com,其中http是scheme,//www.cnn.com是 scheme-specific-part,並且它的scheme與scheme-specific-part被冒號分開了。

絕對與相對:
絕對的URI指以scheme(後面跟着冒號)開頭的URI。(例如:mailto:[email protected]、news:comp.lang.java.help和xyz: //whatever);絕對的URI看作是以某種方式引用某種資源,而這種方式對標識符出現的環境沒有依賴。
相對的URI不是以scheme(後面跟着冒號)開始的URI。(例如:articles/articles.html、img/aa.jpg)你可以把相對的URI看作是以某種方式引用某種資源,而這種方式依賴於標識符出現的環境。(即你在html中引用圖片:./img/aa.jpg,那麼它依賴的就是http)
URL:統一資源定位符,是URI的子集;它除了標識資源的位置,還提供一種定位該資源的主要訪問機制(如其網絡“位置”)。【即提供具體方式找到該資源(位置+方式)】

URL的格式由下列三部分組成:
1. 第一部分,是協議或稱爲服務方式 (指定低層使用的協議,例如:http, https, ftp);
2. 第二部分,是存有該資源的主機IP地址(有時也包括端口號);
3. 第三部分,是主機資源的具體地址。如目錄和文件名等。
第一部分和第二部分之間用”://”符號隔開,第二部分和第三部分用”/”符號隔開。第一部分和第二部分是不可缺少的,第三部分有時可以省略。

3、TCP握手連接以及斷開(擴展)
TCP通信過程包括三個步驟:建立TCP連接通道,傳輸數據,斷開TCP連接通道。引用oneSong所畫的一張金典TCP通訊圖片
這裏寫圖片描述
上圖中主要分爲三部分:建立連接、傳輸數據、斷開連接。

建立連接:
三次握手即可建立TCP連接
1、第一次握手:客戶端發送syn包(seq=x)到服務器,並進入SYN_SEND狀態,等待服務器確認;
2、第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=x+1),同時自己也發送一個SYN包(seq=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
3、第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=y+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
握手過程中傳送的包裏不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連接之前,TCP 連接都將被一直保持下去。
爲什麼需要三次握手呢?相互確認!(網上有很多解釋,這裏就不多講了)

數據傳輸:
建立好連接後,開始傳輸數據。TCP數據傳輸牽涉到的概念很多:超時重傳、快速重傳、流量控制、擁塞控制等等。(這一切都是爲了提供可靠的字節流服務)

斷開連接:
四次握手即可斷開TCP連接
1、第一次握手:主動關閉方發送一個FIN,用來關閉主動方到被動關閉方的數據傳送,也就是主動關閉方告訴被動關閉方:我已經不會再給你發數據了(當然,在fin包之前發送出去的數據,如果沒有收到對應的ack確認報文,主動關閉方依然會重發這些數據),但此時主動關閉方還可以接受數據。
2、第二次握手:被動關閉方收到FIN包後,發送一個ACK給對方,確認序號爲收到序號+1(與SYN相同,一個FIN佔用一個序號)。
3、第三次握手:被動關閉方發送一個FIN,用來關閉被動關閉方到主動關閉方的數據傳送,也就是告訴主動關閉方,我的數據也發送完了,不會再給你發數據了。
4、第四次握手:主動關閉方收到FIN後,發送一個ACK給被動關閉方,確認序號爲收到序號+1,至此,完成四次揮手。

4、特點
HTTP協議永遠都是客戶端發起請求,服務器回送響應。這樣就限制了使用HTTP協議,無法實現在客戶端沒有發起請求的時候,服務器將消息推送給客戶端。、

主要特點:
1、支持客戶/服務器模式。一旦建立了運輸連接(這常常稱爲建立了會話),瀏覽器端就向萬維網服務器端發送HTTP請求,服務器收到請求後給出HTTP響應。
  2、簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯繫的類型不同。由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。
  3、靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
  4、HTTP 0.9和1.0使用非持續連接:限制每次連接只處理一個請求,服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。HTTP 1.1使用持續連接:不必爲每個web對象創建一個新的連接,一個連接可以傳送多個對象,採用這種方式可以節省傳輸時間。
  5、無狀態:HTTP協議是無狀態協議。即每一個HTTP請求都是獨立的。萬維網服務器不保存過去的請求和過去的會話記錄。這就是說,同一個用戶再次訪問同一個服務器時,只要服務器沒有進行內容的更新,服務器的響應就給出和以前被訪問時相同的響應。服務器不記錄曾經訪問過的用戶,也不記錄某個用戶訪問過多少次。
  
5、HTTP請求
  5.1、Request 消息的結構
請求消息的結構由三部分組成,請求行、請求頭、請求主體(即:請求行、消息報頭、請求正文。)
【請 求 行】請求方法 空格 請求資源地址(URI、無域名) 空格 HTTP版本 空格 CRLF(換行符)
【請 求 頭】標識:內容 CRLF(換行符)
【空 一 行】(表示請求頭結束)
【請求主體】(即請求正文,用戶的主要數據。POST方式時使用,GET無請求主體)
在HTTP/1.1 協議中,所有的請求頭,除Host外,都是可選的。  
例:
GET /phpstudy2015-6/ HTTP/1.1
Host: www.cnblogs.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
If-Modified-Since: Sat, 06 May 2017 12:05:41 GMT

詳情請看:http://www.mamicode.com/info-detail-1792965.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章