HTTPS比HTTP慢的原因
原文地址:https://blog.csdn.net/new03/article/details/84826143
HTTPs鏈接比不加密的HTTP鏈接慢很多。
HTTPs鏈接和HTTP鏈接都建立在TCP協議之上。HTTP鏈接比較單純,使用三個握手數據包建立連接之后,就可以發送內容數據了。
客戶端首先發送SYN數據包,然后服務器發送SYN+ACK數據包,最后客戶端發送ACK數據包,接下來就可以發送內容了。這三個數據包的發送過程,叫做TCP握手。
再來看HTTPs鏈接,它也采用TCP協議發送數據,所以它也需要上面的這三步握手過程。而且,在這三步結束以后,它還有一個SSL握手。
HTTP耗時 = TCP握手
HTTPs耗時 = TCP握手 + SSL握手
所以,HTTPs肯定比HTTP耗時,這就叫SSL延遲。
命令行工具curl有一個w參數,可以用來測量TCP握手和SSL握手的具體耗時,以訪問支付寶為例。
$ curl -w "TCP handshake: %{time_connect}, SSL handshake: %{time_appconnect}\n" -so /dev/null https://www.alipay.com
TCP handshake: 0.022, SSL handshake: 0.064
curl -o /dev/null -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_nslookup:%{time_namelookup}\ntime_total: %{time_total}\n" "https://api.weixin.qq.com"
上面命令中的w參數表示指定輸出格式,timeconnect變量表示TCP握手的耗時,timeappconnect變量表示SSL握手的耗時,s參數和o參數用來關閉標准輸出。
從運行結果可以看到,SSL握手的耗時(64毫秒)大概是TCP握手(22毫秒)的三倍
結果:
time_connect: 0.154 time_starttransfer: 0.243 time_nslookup:0.150 time_total: 0.243
說明: 以上顯示網絡連接時間為0.154秒(其中DNS解析為0.150秒),總體請求0.243秒。DNS解析出現故障的概率在正式環境中比較高,所以在診斷時候千萬別漏了time_namelookup這個參數。
也就是說,在建立連接的階段,HTTPs鏈接比HTTP鏈接要長3倍的時間,具體數字取決於CPU的快慢。
CURL -w 參數詳解
https://blog.csdn.net/weifangan/article/details/80741981
