非對稱加密,如今用的幾乎都是非對稱加密,本身有一個密鑰對公鑰和私鑰,公鑰能夠給任何人知道,別人經過公鑰加密發數據給本身,本身經過密鑰解密。算法
數字簽名,當別人知道你的公鑰,雖然不能解密傳輸的數據,可是能夠劫持以後經過公鑰加密僞造數據發送給你,這時候就須要數字簽名了。將摘要信息用發送者的私鑰加密,與原文一塊兒傳送給接收者。接收者只有用發送者的公鑰才能解密被加密的摘要信息,而後用HASH函數對收到的原文產生一個摘要信息,與解密的摘要信息對比。若是相同,則說明收到的信息是完整的,在傳輸過程當中沒有被修改,不然說明信息被修改過,所以數字簽名驗證傳輸的內容是不是對方發送的數據,發送的數據沒有被篡改過。apache
數字證書,好比有一箇中間人經過一系列方法把你的電腦某我的的公鑰給僞造了,而後你一直覺得這是那我的的公鑰,這時候就算被攻擊了。這時候須要CA認證機構,也是經過公鑰密鑰加數字簽名的方式,來驗證咱們公鑰的真實性。(我的理解成CA機構永遠不會被僞造攻擊,因此能安全)瀏覽器
當咱們瀏覽器輸入一個域名地址以後,會先去瀏覽器本地緩存查找有沒有域名對應的IP地址,若是沒有會去本機的host文件去查詢有沒有域名和ip的指向,因此咱們常常會在host文件去配置指向。再沒有就會進行DNS解析,解析出域名對應的IP地址。通常來講DNS已經夠了,可是DNS是沒有全世界全部的網址的,因此還有一個更權威的機構,gTLD Server,,每個頂級域名對應的IP都有記錄。簡單說第一步就是要把域名解析出IP地址。緩存
http是無狀態的,客戶端和服務端不會知道以前通訊的是誰。http1.0以後新增了持久鏈接,也就是說一次TCP鏈接能夠發送多個請求,在瀏覽器的network裏面能夠看見response headers的Connection: keep-alive就是持久鏈接的標誌,而後看connection id,相同就是用的同一個TCP鏈接。tomcat
http實體主體其實就是做爲數據在http中傳輸的數據,能夠等價爲報文主體,報文主體是http的一部分。能夠採用壓縮把實體主體壓小,在客戶端解析數據,也能夠分塊傳輸實體主體的方法提高傳輸效率。咱們若是在下載東西的過程當中斷了,按照之前咱們是須要從新下載的,可是如今能夠在中斷中繼續下載。咱們可使用到獲取範圍數據,這種叫作範圍請求。安全
http有請求報文和響應報文,都是分爲首部和報文主體組成。其中首部字段有不少內容,這邊列舉幾個:服務器
Accept-Encoding: gzip,compress:瀏覽器告訴服務器,它支持的壓縮格式網絡
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0):瀏覽器告訴服務器,瀏覽器的內核是什麼jsp
Connection: close/Keep-Alive: 瀏覽器告訴服務器,請求完後是斷開連接仍是保持連接ide
Server:apache tomcat:服務器告訴瀏覽器,服務器的型號是什麼
Transfer-Encoding: chunked: 服務器告訴瀏覽器數據以分塊方式回送
https安全就是由於使用SSL創建安全的通訊線路,其實HTTPS就是披着SSL的HTTP,採用數字簽名和第三方CA的數字證書保證的安全。SSL加密還有加速的做用。
http使用端口是80,https使用端口是443,http在應用層工做,https的安全傳輸機制是在傳輸層工做。https信息都是加密的,抓包工具獲取的也是加密的,具備校驗機制,被篡改了就會馬上發現,有身份證書,防止被冒充。
一次http請求的幾個步驟:
創建TCP鏈接
向瀏覽器發送請求行,也就是發送請求命令:GET /sample/hello.jsp HTTP/1.1
向瀏覽器發送請求頭,而後用一個空白行結束頭信息的發送,也就是報文首部和報文主體之間的空行。
服務器應答,也就是 HTTP/1.1 200 OK 這些。
服務器發送應答頭,跟請求頭同樣。
服務器發送數據以Content-Type應答頭信息所描述的格式發送用戶所請求的實際數據。
關閉TCP鏈接。
http1.1版本默認持久鏈接,也就是TCP鏈接不斷開,新增了管線化,客戶端同時發出的多個http請求,不用一個一個等待響應,可是這個功能默認是關閉的,只限於理論階段,由於能夠同時發送,可是響應數據仍是要按照順序來一一接收。還新增了斷點續傳。利用HTTP消息頭使用分塊傳輸編碼,將實體主體分塊傳輸。
TCP鏈接限制:
對於同一個域名,瀏覽器最多隻能同時建立 6~8 個 TCP 鏈接 (不一樣瀏覽器不同)。爲了解決數量限制,出現了域名分片技術,其實就是資源分域,將資源放在不一樣域名下(好比二級子域名下)。以一種變通的方式突破限制,可是會形成不少問題,由於過多鏈接對於服務器來講容易形成網絡擁擠、交通阻塞等。
線頭阻塞:
每一個 TCP 鏈接同時只能處理一個請求響應,若是上一個響應沒返回,後續請求響應都會受阻。因此管線化pipelining 技術出現了,可是管線化也有問題,好比第一個響應慢仍是會阻塞後續響應、服務器爲了按序返回響應須要緩存多個響應占用更多資源、瀏覽器中途斷連重試可能得從新處理多個請求等等。
http2採用了二進制分幀層,幀是數據傳輸的最小單位,以二進制傳輸代替本來的明文傳輸,本來的報文消息被劃分爲更小的數據幀。並且會改變一些頭字段。
http2的多路複用:
在一個 TCP 鏈接上,能夠不斷髮送幀,每幀的 stream identifier標識這一幀屬於哪一個流,而後在對方接收時,根據 stream identifier 拼接每一個流的全部幀組成數據。把 HTTP/1.1 每一個請求都看成一個流,那麼多個請求變成多個流,請求響應數據分紅多個幀,不一樣流中的幀交錯地發送,這就是 HTTP/2 中的多路複用。 http2 對於同一域名只須要建立一個鏈接,而不是像 http/1.1 那樣建立 6~8 個鏈接。
http2服務推送:
瀏覽器發送一個請求,服務器主動向瀏覽器推送與這個請求相關的資源,這樣瀏覽器就不用發起後續請求。
http2採用HPACK算法壓縮頭部。http1端對端關閉就直接斷開鏈接,http2引入RST_STREAM類型的frame,能夠在不斷開鏈接的前提下取消某個請求的流。還能夠設置請求的優先級。
隨便看看了解了解,這都是很淺的東西,由於http實在是有太多的內容了。