我叫客戶端,英文名字 client。html
她叫服務端,英文名字 server。程序員
這一年,咱們出生了。瀏覽器
是的,咱們都是90後。併發
我愛她,但是她卻遠在天邊。ide
爲了和她能夠互訴衷腸,我同時發明了HTTP
協議。優化
一門世界上只有我和她能懂的語言,一種世界上只有我和她能懂的浪漫。this
雖然我只能給她發出GET
操做,她也只能返回HTML
文檔,可是已足夠了。編碼
當我發出 GET /index.html
時
她會返回code
<html> <body>Hello World</body> </html>
可能在她看來,我也是她的全世界吧。視頻
我知道本身還不完美,因此給本身命名0.9版本,我期待將來本身也能變得更好。
這是個人第二篇日記。
原諒我不多寫日記,畢竟一位知名人物說過:"正常人誰寫日記啊?!"
以前我只和她分享HTML
,這已經遠遠不能知足我了,如今我還想和她分享圖像、視頻、二進制文件。
另外,我也想要和她有更多的接觸,就像戀人除了牽手還想要擁抱接吻,我除了GET
還想要POST
,HEAD
。
再次,在個人強烈要求下,每次交流能不能給點提示,免得總是被吐槽不解風情。因此,除了數據部分,每次通訊加上了頭信息 ,你們都有個心理準備此次要幹嘛。
好比在請求數據頭信息, 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吧。
有了這個里程碑,我和個人服務端以後交流能夠更加豐富多彩了。
畢竟異地戀,最重要的仍是有效、豐富的溝通。
隨着咱們深刻了解,我以爲我更愛她了,因此願意作更多的事情。
做爲男人最大的尊嚴,我首先把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。
好的,就到這裏吧,我會繼續努力的,爲了她。
據說谷歌公開了SPDY
協議,仍是用來解決個人 HTTP1.1
效率不高的問題?我不太開心,我仍是喜歡個人HTTP
協議。
server還問我能不能也把HTTP
也優化優化,無語,我經過個人HTTP
已經和她談了18年的戀愛了。
就這樣吧,不想寫了,愛咋咋地。
愛一我的,真的會讓本身變得優秀啊。
爲了能和個人她走的更近,我仍是狠狠地把HTTP
優化了下。
雖然是在SPDY
的協議基礎上,可是,不重要!
大概主要幾點吧:
一、HTTP/1.1
版的頭信息確定是文本(ASCII
編碼),數據體能夠是文本,也能夠是二進制,文本解析確定不如二進制啊,因此直接完全點,都變成二進制了。
這樣咱們能夠快速理解對方的訴求。
二、以前說我這能夠同時發出多個請求,server按照順序處理,可是我不想一個個接收她的迴應,因此她也能夠併發返回給我數據啦。
三、戀愛越久,越怕對方說重複的話,因此除了數據體,我此次把頭信息也進行了壓縮。一方面可使用gzip/ compress
進行壓縮,另外我和她同時維護一張頭信息表,全部字段都會存入這個表,生成一個索引號,之後就不發送一樣字段了,只發送索引號,這樣就提升速度了。
四、這個是最重要的,服務端能夠主動給客戶端發送資源了,而不是我必須先發個請求。也就是當我走了99步以後,剩下的一步終因而她向我走來。
此次優化太多了,我決定直接命名HTTP2.0
,固然以後還會有3.0,4.0。爲了她,我願意變得更加優秀。
從前車馬很慢,書信很遠,一輩子只夠愛一我的。
現在,HTTP
可讓你的愛意毫秒級傳達給對方,可是也更祝福你們像我同樣,得之所愛,一輩子被愛。
BAT碼農,轉行程序員,Bug小王子,著名背鍋俠。
西二旗風中之狼,211院校掛科之神,真·搬磚者,僞·小說家。