原创 20 生鮮速遞:HTTP的緩存控制

服務器的緩存控制 夏天到了,天氣很熱。你想喫西瓜消暑,於是打開冰箱,但很不巧,冰箱是空的。不過沒事,現在物流很發達,給生鮮超市打個電話,不一會兒,就給你送來一個 8 斤的沙瓤大西瓜,上面還貼着標籤:“保鮮期 5 天”。好了,你把它

原创 24 固若金湯的根本(上):對稱加密與非對稱加密

術語 加密(encrypt),就是把消息用某種方式轉換成誰也看不懂的亂碼,只有掌握特殊“鑰匙”的人才能再轉換出原始文本。 密鑰(key),就是指鑰匙 明文(plain text/cleartext),加密前的消息 密文(ciph

原创 26 信任始於握手:TLS1.2連接過程解析

HTTPS 建立連接 瀏覽器首先要從 URI 裏提取出協議名和域名。因爲協議名是“https”,所以瀏覽器就知道了端口號是默認的 443,它再用 DNS 解析域名,得到目標的 IP 地址,然後就可以使用三次握手與網站建立 TCP

原创 21 良心中間商:HTTP的代理服務

代理服務 所謂的“代理服務”就是指服務本身不生產內容,而是處於中間位置轉發上下游的請求和響應,具有雙重身份:面向下游的用戶時,表現爲服務器,代表源服務器響應客戶端的請求;而面向上游的源服務器時,又表現爲客戶端,代表客戶端發送請求

原创 25 固若金湯的根本(下):數字簽名與證書

摘要算法 摘要算法(Digest Algorithm),也就是常說的散列函數、哈希函數(Hash Function)。 你可以把摘要算法近似地理解成一種特殊的壓縮算法,它能夠把任意長度的數據“壓縮”成固定長度、而且獨一無二的“摘要

原创 19 讓我知道你是誰:HTTP的Cookie機制

Cookie 是服務器委託瀏覽器存儲的一些數據,讓服務器有了“記憶能力”; 響應報文使用 Set-Cookie 字段發送“key=value”形式的 Cookie 值; 請求報文裏用 Cookie 字段發送多個 Cookie 值

原创 11 你能寫出正確的網址嗎

URI 的完整格式 URI 還有一個“真正”的完整形態,如下圖所示 URI 的創造者蒂姆·伯納斯 - 李也曾經私下承認://並非必要,當初有些“過於草率”了。 這個“真正”形態比基本形態多了兩部分。 第一個多出的部分是協議名

原创 9 HTTP報文是什麼樣子的

HTTP 協議的請求報文和響應報文的結構基本相同,由三大部分組成: 起始行(start line):描述請求或響應的基本信息; 頭部字段集合(header):使用 key-value 形式更詳細地說明報文; 消息正文(entit

原创 17 排隊也要講效率:HTTP的連接管理

早期的 HTTP 協議使用短連接,收到響應後就立即關閉連接,效率很低; HTTP/1.1 默認啓用長連接,在一個連接上收發多個請求響應,提高了傳輸效率; 服務器會發送“Connection: keep-alive”字

原创 16 把大象裝進冰箱:HTTP傳輸大文件的方法

引言 如何在有限的帶寬下高效快捷地傳輸這些大文件就成了一個重要的課題。這就好比是已經打開了冰箱門(建立連接),該怎麼把大象(文件)塞進去再關上門(完成傳輸)呢? 數據壓縮 把大象變成小豬佩奇,再放進冰箱。 通常瀏覽器在發送請求

原创 18 四通八達:HTTP的重定向和跳轉

重定向是服務器發起的跳轉,要求客戶端改用新的 URI 重新發送請求,通常會自動進行,用戶是無感知的; 301/302 是最常用的重定向狀態碼,分別是“永久重定向”和“臨時重定向”; 響應頭字段 Location 指示了要跳轉的

原创 12 響應狀態碼該怎麼用

狀態碼在響應報文裏表示了服務器對請求的處理結果; 狀態碼後的原因短語是簡單的文字描述,可以自定義; 狀態碼是十進制的三位數,分爲五類,從 100 到 599; 1××類狀態碼屬於提示信息,是協議處理的中間狀態,實際能夠用到的時候

原创 10 應該如何理解請求方法

目前 HTTP/1.1 規定了八種方法,單詞都必須是大寫的形式 GET:獲取資源,可以理解爲讀取或者下載數據; HEAD:獲取資源的元信息; POST:向資源提交數據,相當於寫入或上傳數據; PUT:類似 POST; DELET

原创 15 海納百川:HTTP的實體數據

數據類型與編碼 早在 HTTP 協議誕生之前就已經有了針對這種問題的解決方案,不過它是用在電子郵件系統裏的,讓電子郵件可以發送 ASCII 碼以外的任意數據,方案的名字叫做 多用途互聯網郵件擴展(Multipurpose Inte