HTTP1.0,1.1,2.0,HTTPS
HTTP1.0/1.1/2.0/HTTPS
? ? HTTP(超文本傳輸協議)是互聯網上應用最為廣泛的一種網絡協議。所有的WWW文件都必須遵守這個標準。設計HTTP最初的目的是為了提供一種發布和接收HTML頁面的方法。是用于從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議。默認使用80端口,HTTP客戶端發起一個請求,建立一個到服務器指定端口(默認是80端口)的TCP連接。HTTP協議和TCP協議是不沖突的,HTTP定義在七層協議中的應用層,TCP解決的是傳輸層的邏輯。HTTP使用TCP而不是UDP的原因在于(打開)一個網頁必須傳送很多數據,而TCP協議提供傳輸控制,按順序組織數據,和錯誤糾正。HTTP協議的瓶頸及其優化技巧都是基于TCP協議本身的特性。如TCP在建立連接的初期有慢啟動(slow?start)的特性,所以連接的重用總是比新建連接性能要好。?
???????????????????????????????????????????????????????????
HTTP1.0
? ? HTTP協議老的標準時HTTP/1.0,當時是為了提高系統的效率,每次請求都只是建立短暫的鏈接之后就結束了,但是目前來看,這樣很不合適,比如一個網站上有100張圖片,當加載每張圖片的時候,HTTP/1.0的話都會嘗試建立一次鏈接,加載完圖片斷開鏈接,然后再次建立鏈接,加載另一張圖片。由于TCP的三次握手和TCP建立鏈接初期的慢啟動特性,這樣多次的斷開鏈接無疑造成太多的資源浪費,同時HTTP/1.0?還存在?Head?of?Line?Blocking(??https://en.wikipedia.org/wiki/Head-of-line_blocking?)的問題。所以目前來看,1.0確實有很多性能上的損失和不足。
?
HTTP1.1
????為了解決上面1.0的不足,于是出現了HTTP/1.1版本,1.1主要特點就是支持長鏈接,一次鏈接可以進行多次請求通訊,然后在斷開,比如加載10張圖片,建立一次鏈接后下載十張圖片,而不是鏈接下載,鏈接下載進行10次。同時1.1在Head頭里面增加了很多字段,比如可以通過Hosts字段來實現一個服務器上建立多個站點的方式。RANGE:bytes還能實現短點續傳,相對于1.0,1.1的主要優勢體現在如下:
1?緩存處理
2?帶寬優化及網絡連接的使用
3?錯誤通知的管理
4?消息在網絡中的發送
5?互聯網地址的維護
6?安全性及完整性
HTTP1.1狀態碼機器含義(詳細的會附錄在最后面)
狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:
1xx:指示信息--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操作
4xx:客戶端錯誤--請求有語法錯誤或請求無法實現
5xx:服務器端錯誤--服務器未能實現合法的請求
?
HTTP2.0
????使用HTTP2.0測試便可看出HTTP2.0比之前的協議在性能上有很大的提升。下面總結了HTTP2.0協議的幾個特性。
多路復用?(Multiplexing)
? ? 多路復用允許同時通過單一的?HTTP/2?連接發起多重的請求-響應消息。在?HTTP/1.1?協議中瀏覽器客戶端在同一時間,針對同一域名下的請求有一定數量限制。超過限制數目的請求會被阻塞。這也是為何一些站點會有多個靜態資源?CDN?域名的原因之一,拿?Twitter?為例,http://twimg.com,目的就是變相的解決瀏覽器針對同一域名的請求限制阻塞問題。而?HTTP/2?的多路復用(Multiplexing)?則允許同時通過單一的?HTTP/2?連接發起多重的請求-響應消息。因此?HTTP/2?可以很容易的去實現多流并行而不用依賴建立多個?TCP?連接,HTTP/2?把?HTTP?協議通信的基本單位縮小為一個一個的幀,這些幀對應著邏輯流中的消息。并行地在同一個?TCP?連接上雙向交換消息。
?
HTTPS
????HTTP協議傳輸的數據都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私信息非常不安全。為了保證這些隱私數據能加密傳輸,于是網景公司設計了SSL(Secure?Sockets?Layer)協議用于對HTTP協議傳輸的數據進行加密,從而就誕生了HTTPS?,F在的HTTPS都是用的TLS協議,但是由于SSL出現的時間比較早,并且依舊被現在瀏覽器所支持,因此SSL依然是HTTPS的代名詞。
????HTTPS在傳輸數據之前需要客戶端(瀏覽器)與服務端(網站)之間進行一次握手,在握手過程中將確立雙方加密傳輸數據的密碼信息。TLS/SSL協議不僅僅是一套加密傳輸的協議,TLS/SSL中使用了非對稱加密,對稱加密以及HASH算法。握手過程的簡單描述如下:
?
1.瀏覽器將自己支持的一套加密規則發送給網站。
2.網站從中選出一組加密算法與HASH算法,并將自己的身份信息以證書的形式發回給瀏覽器。證書里面包含了網站地址,加密公鑰,以及證書的頒發機構等信息。
3.獲得網站證書之后瀏覽器要做以下工作:
a)?驗證證書的合法性(頒發證書的機構是否合法,證書中包含的網站地址是否與正在訪問的地址一致等),如果證書受信任,則瀏覽器欄里面會顯示一個小鎖頭,否則會給出證書不受信的提示。
b)?如果證書受信任,或者是用戶接受了不受信的證書,瀏覽器會生成一串隨機數的密碼,并用證書中提供的公鑰加密。
c)?使用約定好的HASH計算握手消息,并使用生成的隨機數對消息進行加密,最后將之前生成的所有信息發送給網站。
4.網站接收瀏覽器發來的數據之后要做以下的操作:
a)?使用自己的私鑰將信息解密取出密碼,使用密碼解密瀏覽器發來的握手消息,并驗證HASH是否與瀏覽器發來的一致。
b)?使用密碼加密一段握手消息,發送給瀏覽器。
5.瀏覽器解密并計算握手消息的HASH,如果與服務端發來的HASH一致,此時握手過程結束,之后所有的通信數據將由之前瀏覽器生成的隨機密碼并利用對稱加密算法進行加密。
????這里瀏覽器與網站互相發送加密的握手消息并驗證,目的是為了保證雙方都獲得了一致的密碼,并且可以正常的加密解密數據。其中非對稱加密算法用于在握手過程中加密生成的密碼,對稱加密算法用于對真正傳輸的數據進行加密,而HASH算法用于驗證數據的完整性。由于瀏覽器生成的密碼是整個數據加密的關鍵,因此在傳輸的時候使用了非對稱加密算法對其加密。非對稱加密算法會生成公鑰和私鑰,公鑰只能用于加密數據,因此可以隨意傳輸,而網站的私鑰用于對數據進行解密,所以網站都會非常小心的保管自己的私鑰,防止泄漏。
? ? TLS握手過程中如果有任何錯誤,都會使加密連接斷開,從而阻止了隱私信息的傳輸。正是由于HTTPS非常的安全,攻擊者無法從中找到下手的地方,于是更多的是采用了假證書的手法來欺騙客戶端,從而獲取明文的信息。默認HTTP的端口號為80,HTTPS的端口號為443。
?
? ? 上面HTTPS的握手流程要熟記,HTTPS先整理這么多,之后的話肯定要繼續整理,HTTPS有很多攻擊手段,比如
1.降級攻擊-SSL/TLS版本攻擊
2.降級攻擊-弱加密算法攻擊
3.整數劫持,就是類似這個姿勢:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?客戶端
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
[對于客戶端,用本地證書模擬出來服務器-(中間可以得到真實的解密后的內容)-對于服務器直接模擬自己是瀏覽器]
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?服務器
? ? HTTPS攻擊相關之后會單獨整理。
?
附錄:HTTP1.1狀態碼:
100?Continue?初始的請求已經接受,客戶應當繼續發送請求的其余部分。(HTTP?1.1新)
101?Switching?Protocols?服務器將遵從客戶的請求轉換到另外一種協議(HTTP?1.1新)
200?OK?一切正常,對GET和POST請求的應答文檔跟在后面。
201?Created?服務器已經創建了文檔,Location頭給出了它的URL。
202?Accepted?已經接受請求,但處理尚未完成。
203?Non-Authoritative?Information?文檔已經正常地返回,但一些應答頭可能不正確,因為使用的是文檔的拷貝(HTTP?1.1新)。
204?No?Content?沒有新文檔,瀏覽器應該繼續顯示原來的文檔。如果用戶定期地刷新頁面,而Servlet可以確定用戶文檔足夠新,這個狀態代碼是很有用的。
205?Reset?Content?沒有新的內容,但瀏覽器應該重置它所顯示的內容。用來強制瀏覽器清除表單輸入內容(HTTP?1.1新)。
206?Partial?Content?客戶發送了一個帶有Range頭的GET請求,服務器完成了它(HTTP?1.1新)。
300?Multiple?Choices?客戶請求的文檔可以在多個位置找到,這些位置已經在返回的文檔內列出。如果服務器要提出優先選擇,則應該在Location應答頭指明。
301?Moved?Permanently?客戶請求的文檔在其他地方,新的URL在Location頭中給出,瀏覽器應該自動地訪問新的URL。
302?Found?類似于301,但新的URL應該被視為臨時性的替代,而不是永久性的。注意,在HTTP1.0中對應的狀態信息是“Moved?Temporatily”。
出現該狀態代碼時,瀏覽器能夠自動訪問新的URL,因此它是一個很有用的狀態代碼。
注意這個狀態代碼有時候可以和301替換使用。例如,如果瀏覽器錯誤地請求http://host/~user(缺少了后面的斜杠),有的服務器返回301,有的則返回302。
嚴格地說,我們只能假定只有當原來的請求是GET時瀏覽器才會自動重定向。請參見307。
303?See?Other?類似于301/302,不同之處在于,如果原來的請求是POST,Location頭指定的重定向目標文檔應該通過GET提取(HTTP?1.1新)。
304?Not?Modified?客戶端有緩沖的文檔并發出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務器告訴客戶,原來緩沖的文檔還可以繼續使用。
305?Use?Proxy?客戶請求的文檔應該通過Location頭所指明的代理服務器提取(HTTP?1.1新)。
307?Temporary?Redirect?和302(Found)相同。許多瀏覽器會錯誤地響應302應答進行重定向,即使原來的請求是POST,即使它實際上只能在POST請求的應答是303時?才能重定向。由于這個原因,HTTP?1.1新增了307,以便更加清除地區分幾個狀態代碼:當出現303應答時,瀏覽器可以跟隨重定向的GET和POST請求;如果是307應答,則瀏覽器只能跟隨對GET請求的重定向。(HTTP?1.1新)
400?Bad?Request?請求出現語法錯誤。
401?Unauthorized?客戶試圖未經授權訪問受密碼保護的頁面。應答中會包含一個WWW-Authenticate頭,瀏覽器據此顯示用戶名字/密碼對話框,然后在填寫合適的Authorization頭后再次發出請求。
403?Forbidden?資源不可用。服務器理解客戶的請求,但拒絕處理它。通常由于服務器上文件或目錄的權限設置導致。
404?Not?Found?無法找到指定位置的資源。這也是一個常用的應答。
405?Method?Not?Allowed?請求方法(GET、POST、HEAD、DELETE、PUT、TRACE等)對指定的資源不適用。(HTTP?1.1新)
406?Not?Acceptable?指定的資源已經找到,但它的MIME類型和客戶在Accpet頭中所指定的不兼容(HTTP?1.1新)。
407?Proxy?Authentication?Required?類似于401,表示客戶必須先經過代理服務器的授權。(HTTP?1.1新)
408?Request?Timeout?在服務器許可的等待時間內,客戶一直沒有發出任何請求??蛻艨梢栽谝院笾貜屯徽埱蟆?#xff08;HTTP?1.1新)
409?Conflict?通常和PUT請求有關。由于請求和資源的當前狀態相沖突,因此請求不能成功。(HTTP?1.1新)
410?Gone?所請求的文檔已經不再可用,而且服務器不知道應該重定向到哪一個地址。它和404的不同在于,返回407表示文檔永久地離開了指定的位置,而404表示由于未知的原因文檔不可用。(HTTP?1.1新)
411?Length?Required?服務器不能處理請求,除非客戶發送一個Content-Length頭。(HTTP?1.1新)
412?Precondition?Failed?請求頭中指定的一些前提條件失敗(HTTP?1.1新)。
413?Request?Entity?Too?Large?目標文檔的大小超過服務器當前愿意處理的大小。如果服務器認為自己能夠稍后再處理該請求,則應該提供一個Retry-After頭(HTTP?1.1新)。
414?Request?URI?Too?Long?URI太長(HTTP?1.1新)。
416?Requested?Range?Not?Satisfiable?服務器不能滿足客戶在請求中指定的Range頭。(HTTP?1.1新)
500?Internal?Server?Error?服務器遇到了意料不到的情況,不能完成客戶的請求。
501?Not?Implemented?服務器不支持實現請求所需要的功能。例如,客戶發出了一個服務器不支持的PUT請求。
502?Bad?Gateway?服務器作為網關或者代理時,為了完成請求訪問下一個服務器,但該服務器返回了非法的應答。
503?Service?Unavailable?服務器由于維護或者負載過重未能應答。例如,Servlet可能在數據庫連接池已滿的情況下返回503。服務器返回503時可以提供一個Retry-After頭。
504?Gateway?Timeout?由作為代理或網關的服務器使用,表示不能及時地從遠程服務器獲得應答。(HTTP?1.1新)
505?HTTP?Version?Not?Supported?服務器不支持請求中所指明的HTTP版本。(HTTP?1.1新)
總結
以上是生活随笔為你收集整理的HTTP1.0,1.1,2.0,HTTPS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux-鸟菜-7-Linux文件系统
- 下一篇: 逆向与分析-WebBrowserPass