這篇文章帶給大家的內容是關於一次性搞懂HTTP、HTTPS、SPDY、HTTP2,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
作為網路通訊協定的一員老將,HTTP 協定走到今天已經經歷了三次版本的變動,現在最新的版本是HTTP2.0,相信大家早已耳熟能詳。今天就來跟大家好好介紹一下 HTTP 的前世今生。
HTTP/0.9
HTTP 的最早版本誕生在1991 年,這個最早版本和現在比起來極其簡單,沒有HTTP 頭,沒有狀態碼,甚至版本號也沒有,後來它的版本號碼才被定為0.9 來和其他版本的HTTP 區分。 HTTP/0.9 只支援一種方法- Get,請求只有一行。
GET /hello.html
回應也是非常簡單的,只包含 html 文件本身。
<HTML> Hello world </HTML>
當 TCP 建立連線之後,伺服器會向客戶端傳回 HTML 格式的字串。發送完畢後,就關閉 TCP 連線。由於沒有狀態碼和錯誤代碼,如果伺服器處理的時候發生錯誤,只會傳回一個特殊的包含問題描述資訊的 HTML 檔案。這就是最早的 HTTP/0.9 版本。
HTTP/1.0
1996 年,HTTP/1.0 版本發布,大大豐富了HTTP 的傳輸內容,除了文字,還可以傳送圖片、影片等,這為互聯網的發展奠定了基礎。相較於HTTP/0.9,HTTP/1.0 主要有以下特性:
請求與回應支援HTTP 頭,增加了狀態碼,回應物件的一開始是回應狀態行
協定版本訊息需要隨著請求一起傳送,支援HEAD,POST 方法
支援傳輸HTML 檔案以外其他類型的內容
一個典型的HTTP/1.0 的請求像這樣:
GET /hello.html HTTP/1.0 User-Agent:NCSA_Mosaic/2.0(Windows3.1) 200 OK Date: Tue, 15 Nov 1996 08:12:31 GMT Server: CERN/3.0 libwww/2.17 Content-Type: text/html <HTML> 一个包含图片的页面 <img src="/static/imghwm/default1.png" data-src="/smile.gif" class="lazy" alt="一次性搞懂 HTTP、HTTPS、SPDY、HTTP2" > </HTML>
HTTP/1.1
#在HTTP/1.0 發布幾個月後,HTTP/1.1 就發布了。 HTTP/1.1 更多的是作為對HTTP/1.0 的完善,在HTTP1.1 中,主要具有如下改進:
#可以復用連接
增加pipeline:HTTP 管線化是將多個HTTP 請求整批提交的技術,而在傳送過程中不需先等待服務端的回應。管線化機制須透過永久連接(persistent connection)完成。瀏覽器將HTTP請求大批提交可大幅縮短頁面的載入時間,特別是在傳輸延遲(lag/latency)較高的情況下。有一點要注意的是,只有冪等的請求可以使用 pipeline,如 GET,HEAD 方法。
chunked 編碼傳輸:此編碼將實體分塊傳送並逐塊標明長度,直到長度為0 塊表示傳輸結束, 這在實體長度未知時特別有用(例如由資料庫動態產生的資料)
引入更多快取控制機制:如etag,cache-control
引入內容協商機制,包括語言,編碼,類型等,並允許客戶端和伺服器之間約定以最合適的內容進行交換
請求訊息和回應訊息都支援Host 頭域:在HTTP1.0 中認為每台伺服器都綁定一個唯一的IP 位址,因此,請求訊息中的URL並沒有傳遞主機名(hostname)。但隨著虛擬主機技術的發展,在一台實體伺服器上可以存在多個虛擬主機(Multi-homed Web Servers),並且它們共用一個 IP 位址。因此,Host 頭的引進就很有必要了。
新增了OPTIONS,PUT, DELETE, TRACE, CONNECT 方法
#雖然HTTP/1.1 已經優化了很多點,作為一個目前使用最廣泛的協定版本,已經能夠滿足很多網絡需求,但隨著網頁變得越來越複雜,甚至演變成為獨立的應用,HTTP/1.1 逐漸暴露出了一些問題:
在傳輸資料時,每次都要重新建立連接,對行動端特別不友善
傳輸內容是明文,不夠安全
header 內容過大,每次請求header 變化不大,造成浪費
keep-alive 給服務端帶來效能壓力
為了解決這些問題,HTTPS 和SPDY 應運而生。
SPDY
其實 SPDY 並不是新的一種協議,而是在 HTTP 之前做了一層會話層。
在 2010 年到 2015 年,Google透過實踐一個實驗性的 SPDY 協議,證明了一個在客戶端和伺服器端交換資料的另類方式。其收集了瀏覽器和伺服器端的開發者的焦點問題,明確了回應數量的增加和解決複雜的資料傳輸。在啟動 SPDY 這個專案時預設的目標是:
頁面載入時間 (PLT) 減少 50%。
無須網站作者修改任何內容。
將部署複雜度降至最低,無需變更網路基礎架構。
與開源社群合作開發這個新協定。
收集真實效能數據,驗證這個實驗性協定是否有效。
為了達到降低目標,減少頁面載入時間的目標,SPDY 引入了一個新的二進位分幀資料層,以實現多向請求和回應、優先順序、最小化及消除不必要的網路延遲,目的是更有效地利用底層TCP 連接。
HTTP/2.0
時間來到 2015 年,HTTP/2.0 問世。先來介紹一下HTTP/2.0 的特點:
使用二進位分幀層:在應用層與傳輸層之間增加一個二進位分幀層,以此達到在不改動HTTP 的語義,HTTP 方法、狀態碼、URI 及首部欄位的情況下,突破HTTP1.1 的效能限制,改善傳輸效能,實現低延遲及高吞吐量。在二進位分幀層上,HTTP2.0 會將所有傳輸的資訊分割為更小的訊息和幀,並對它們採用二進位格式的編碼,其中HTTP1.x 的首部資訊會被封裝到Headers 幀,而我們的request body 則封裝到Data 訊框裡面。
二進位分幀
多路復用:對於HTTP/1.x,即使開啟了長連接,請求的發送也是串行發送的,在頻寬足夠的情況下,對頻寬的利用率不夠,HTTP/2.0 採用了多工的方式,可以並行發送多個請求,提高對頻寬的利用率。
多路復用
資料流優先權:由於請求可以並發發送了,那麼如果出現了瀏覽器在等待關鍵的CSS 或者JS 檔案完成對頁面的渲染時,伺服器卻在專注的發送圖片資源的情況怎麼辦呢? HTTP/2.0 對資料流可以設定優先值,這個優先值決定了客戶端和服務端處理不同的流採用不同的優先權策略。
服務端推送:在HTTP/2.0 中,伺服器可以向客戶發送請求以外的內容,例如正在請求一個頁面時,伺服器會把頁面相關的logo,CSS 等檔案直接推送到客戶端,而不會等到請求來的時候再發送,因為伺服器認為客戶端會用到這些東西。這相當於在一個 HTML 文件內集合了所有的資源。
頭部壓縮:使用首部表來追蹤和儲存先前發送的鍵值對,對於相同的內容,不會再每次請求和回應時發送。
以上就是對一次性搞懂 HTTP、HTTPS、SPDY、HTTP2的全部介紹,如果您想了解更多有關Html5教程,請關注PHP中文網。
以上是一次性搞懂 HTTP、HTTPS、SPDY、HTTP2的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Springboot内置tomcat禁止不安全HTTP方法1、在tomcat的web.xml中可以配置如下内容让tomcat禁止不安全的HTTP方法/*PUTDELETEHEADOPTIONSTRACEBASIC2、Springboot使用内置tomcat没有web.xml配置文件,可以通过以下配置进行,简单来说就是要注入到Spring容器中@ConfigurationpublicclassTomcatConfig{@BeanpublicEmbeddedServletContainerFacto

1.HttpURLConnection使用JDK原生提供的net,无需其他jar包,代码如下:importcom.alibaba.fastjson.JSON;importjava.io.BufferedReader;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;importjava.net.HttpURLConnection;

一、前言#ssl写在443端口后面。这样http和https的链接都可以用listen443sslhttp2default_server;server_namechat.chengxinsong.cn;#hsts的合理使用,max-age表明hsts在浏览器中的缓存时间,includesubdomainscam参数指定应该在所有子域上启用hsts,preload参数表示预加载,通过strict-transport-security:max-age=0将缓存设置为0可以撤销hstsadd_head

随着互联网的不断发展和改善,Web服务器在速度和性能上的需求也越来越高。为了满足这样的需求,Nginx已经成功地掌握了HTTP2协议并将其融入其服务器的性能中。HTTP2协议要比早期的HTTP协议更加高效,但同时也存在着特定的安全问题。本文将为您详细介绍如何进行Nginx的HTTP2协议优化和安全设置。一、Nginx的HTTP2协议优化1.启用HTTP2在N

一、urllib概述:urllib是Python中请求url连接的官方标准库,就是你安装了python,这个库就已经可以直接使用了,基本上涵盖了基础的网络请求功能。在Python2中主要为urllib和urllib2,在Python3中整合成了urllib。Python3.x中将urllib2合并到了urllib,之后此包分成了以下四个模块:urllib.request:它是最基本的http请求模块,用来模拟发送请求urllib.error:异常处理模块,如果出现错误可以捕获这些异常urllib

httpkeepalive在http早期,每个http请求都要求打开一个tpcsocket连接,并且使用一次之后就断开这个tcp连接。使用keep-alive可以改善这种状态,即在一次tcp连接中可以持续发送多份数据而不会断开连接。通过使用keep-alive机制,可以减少tcp连接建立次数,也意味着可以减少time_wait状态连接,以此提高性能和提高httpd服务器的吞吐率(更少的tcp连接意味着更少的系统内核调用,socket的accept()和close()调用)。但是,keep-ali

被动检查对于被动健康检查,nginx和nginxplus会在事件发生时对其进行监控,并尝试恢复失败的连接。如果仍然无法恢复正常,nginx开源版和nginxplus会将服务器标记为不可用,并暂时停止向其发送请求,直到它再次标记为活动状态。上游服务器标记为不可用的条件是为每个上游服务器定义的,其中包含块中server指令的参数upstream:fail_timeout-设置服务器标记为不可用时必须进行多次失败尝试的时间,以及服务器标记为不可用的时间(默认为10秒)。max_fails-设置在fai

一、概述在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适。很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对方提供的接口或第三方接口(短信、天气等)。在Java项目中调用第三方接口的方式有:1、通过JDK网络类Java.net.HttpURLConnection;2、通过common封装好的HttpClient;3、通过Apache封装好的CloseableHttpClient;4、通过SpringBoot-RestTemplate;二、Java调用第三方


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

禪工作室 13.0.1
強大的PHP整合開發環境

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具