一本關於HTTP的戀愛日記

碼農小說家 發表於 2021-04-08

1991年 8月

我叫客戶端,英文名字 client。

她叫服務端,英文名字 server。

這一年,我們出生了。

是的,我們都是90後。

我愛她,可是她卻遠在天邊。

為了和她可以互訴衷腸,我同時發明了HTTP協議。

一門世界上只有我和她能懂的語言,一種世界上只有我和她能懂的浪漫。

雖然我只能給她發出GET操作,她也只能返回HTML文件,但是已足夠了。

當我發出 GET /index.html
她會返回

<html>
  <body>Hello World</body>
</html>

可能在她看來,我也是她的全世界吧。

我知道自己還不完美,所以給自己命名0.9版本,我期待未來自己也能變得更好。

1996年 5月

這是我的第二篇日記。

原諒我很少寫日記,畢竟一位知名人物說過:"正常人誰寫日記啊?!"

之前我只和她分享HTML,這已經遠遠不能滿足我了,現在我還想和她分享影像、視訊、二進位制檔案。

另外,我也想要和她有更多的接觸,就像戀人除了牽手還想要擁抱接吻,我除了GET還想要POSTHEAD

再次,在我的強烈要求下,每次交流能不能給點提示,省得老是被吐槽不解風情。所以,除了資料部分,每次通訊加上了頭資訊 ,大家都有個心理準備這次要幹嗎。

比如在請求資料頭資訊, Accept: */*會告訴她我能接受的資料型別,她若返回資料 Content-Type:image/jpeg我就知道她要分享自己的美照,
Content-Type:video/mp4我就知道可以看到她美美的視訊。

最後,唉,女孩子有時候真的是有點囉嗦的,所以我又在HTTP協議里加了 Content-Encoding,暗示她可以壓縮一下資料。

比如
我會用 Accept-Encoding: gzip, deflate 來告訴她我能接受的壓縮型別,而Content-Encoding: gzip就是告訴我她的實際壓縮型別。

可以看出來現在HTTP協議複雜了很多,但是我想說這是我們倆的特殊密碼,我願意記錄下來,成為一份美好的回憶。

另外一個很尷尬的問題就是,她覺得我不太久,每個Tcp連結只能傳送一個請求,傳送資料就關閉,這讓我很苦惱,所以有些瀏覽器在請求時,用了一個非標準的Connection欄位。

Connection: keep-alive

這樣她就知道,我這次時間真的長了,不要再輕易斷開連結。

不過遺憾的是,這個並沒有納入標準。

不管咋樣,我覺得HTTP這次改的也算像模像樣了,所以就命名1.0吧。

有了這個里程碑,我和我的服務端之後交流可以更加豐富多彩了。

畢竟異地戀,最重要的還是有效、豐富的溝通。

1997年1月

隨著我們深入瞭解,我覺得我更愛她了,所以願意做更多的事情。

作為男人最大的尊嚴,我首先把Connection: keep-alive納入標準,即沒有宣告預設不關閉。

其次,我已經受不了我一問她一答這個模式,我想盡可能一次把我更多的愛意發出去,所以我引入管道機制,允許我同時發出多個請求,當然她還是按照順序,先後回應即可,最起碼我已經做到位了。

我的付出也是有回報的,server也很體貼的給我傳回來 Content-Length欄位,好讓我方便知道她給了我多少資料。

但是有時候她要說的話太多了,我真的不想等待太久她處理完了才有回應,所以除了Content-Length,我同時在HTTP增加了
Transfer-Encoding欄位 ,就表明回應將由數量未定的資料塊組成。

比如
每個非空的資料塊之前,會有一個16進位制的數值,表示這個塊的長度。最後是一個大小為0的塊,就表示本次回應的資料傳送完了。下面是一個例子。

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked

25
This is the data in the first chunk

1C
and this is the second one

3
con

8
sequence

0

這樣,我就可以立馬收到她的回覆,真好。

最後,除了GET POST 等操作,我還增加了PUT PATCH各種姿勢來和她溝通,你們懂的。

雖然優化了不少,但是作為男人要謙虛點,所以我把版本命名為1.1。

好的,就到這裡吧,我會繼續努力的,為了她。

2009年

聽說谷歌公開了SPDY協議,還是用來解決我的 HTTP1.1 效率不高的問題?我不太開心,我還是喜歡我的HTTP協議。

server還問我能不能也把HTTP也優化優化,無語,我通過我的HTTP已經和她談了18年的戀愛了。

就這樣吧,不想寫了,愛咋咋地。

2015年 5月

愛一個人,真的會讓自己變得優秀啊。

為了能和我的她走的更近,我還是狠狠地把HTTP優化了下。

雖然是在SPDY的協議基礎上,但是,不重要!

大概主要幾點吧:

1、HTTP/1.1版的頭資訊肯定是文字(ASCII編碼),資料體可以是文字,也可以是二進位制,文字解析肯定不如二進位制啊,所以直接徹底點,都變成二進位制了。

這樣我們可以快速理解對方的訴求。

2、之前說我這可以同時發出多個請求,server按照順序處理,但是我不想一個個接收她的回應,所以她也可以併發返回給我資料啦。

3、戀愛越久,越怕對方說重複的話,所以除了資料體,我這次把頭資訊也進行了壓縮。一方面可以使用gzip/ compress 進行壓縮,另外我和她同時維護一張頭資訊表,所有欄位都會存入這個表,生成一個索引號,以後就不傳送同樣欄位了,只傳送索引號,這樣就提高速度了。

4、這個是最重要的,服務端可以主動給客戶端傳送資源了,而不是我必須先發個請求。也就是當我走了99步之後,剩下的一步終於是她向我走來。

這次優化太多了,我決定直接命名HTTP2.0,當然之後還會有3.0,4.0。為了她,我願意變得更加優秀。

結束語

從前車馬很慢,書信很遠,一生只夠愛一個人。

如今,HTTP可以讓你的愛意毫秒級傳達給對方,但是也更祝福大家像我一樣,得之所愛,一生被愛。

BAT碼農,轉行程式設計師,Bug小王子,著名背鍋俠。

西二旗風中之狼,211院校掛科之神,真·搬磚者,偽·小說家。

一本關於HTTP的戀愛日記