1. 鍓嶅悗絝閫氫俊鏄浠涔堟剰鎬濓紵
鍓嶇鍜屽悗絝閫氫俊鏄鍦ㄧ幇浠Web搴旂敤寮鍙戜腑蹇呬笉鍙灝戠殑涓閮ㄥ垎錛屽洜涓哄墠絝緗戦〉闇瑕佸悜鍚庣鏈嶅姟鍣ㄥ彂閫佽鋒眰騫惰幏鍙栧搷搴斾互瀹炵幇鐩稿簲鐨勪笟鍔¢昏緫銆傞氬父鎯呭喌涓嬶紝榪欑嶉氫俊鏄閫氳繃HTTP鍗忚瀹屾垚鐨勶紝鍗沖墠絝鍚戝悗絝鍙戦丠TTP璇鋒眰錛屽悗絝榪斿洖HTTP鍝嶅簲銆
鍓嶇鍜屽悗絝鍦ㄩ氫俊鏃墮渶瑕侀伒寰涓瀹氱殑閫氫俊瑙勫垯鍜屾牸寮忥紝浠ヤ究鍙屾柟鑳藉熸g『鍦拌В鏋愬拰澶勭悊鏁版嵁銆傚洜姝わ紝鍓嶇闇瑕佸湪璇鋒眰涓璁劇疆鐩稿簲鐨勮鋒眰澶達紝濡傝鋒眰鏂瑰紡銆丆ontent-Type絳夛紝浠ュ憡璇夊悗絝濡備綍澶勭悊璇鋒眰銆傚悗絝鍦ㄨ繑鍥炲搷搴旀椂闇瑕佽劇疆鍝嶅簲澶達紝濡侰ontent-Type銆丆ache-Control絳夛紝浠ュ憡璇夊墠絝濡備綍澶勭悊鍝嶅簲銆
涓轟簡鎻愰珮閫氫俊鐨勬晥鐜囧拰璐ㄩ噺錛屽墠絝鍜屽悗絝鐨勫紑鍙戜漢鍛橀氬父闇瑕侀厤鍚堝紑鍙戝拰嫻嬭瘯宸ヤ綔銆傚墠絝鍜屽悗絝闇瑕佺『瀹氬ソ鎺ュ彛鏂囨。錛屼互淇濊瘉鍓嶅悗絝鐨勫規帴欏哄埄榪涜屻傚悓鏃訛紝鍦ㄥ墠絝鍜屽悗絝寮鍙戜漢鍛橀厤鍚堜笅錛岄渶瑕佽繘琛孧ock鏁版嵁銆佽仈璋冨拰嫻嬭瘯絳夊伐浣滐紝浠ョ『淇濆墠鍚庣鐨勫姛鑳藉疄鐜板拰浜や簰浣撻獙杈懼埌棰勬湡鏁堟灉錛屾ゅ栬繕闇瑕佷繚璇侀氫俊鏁版嵁鐨勫畨鍏ㄦу拰鍙闈犳с
2. 伺服器如何處理http請求
1.需求
了解服務端如何處理http請求,了解基本的處理流程
2.實戰
處理http請求分為7個步驟
2.1 Tcp連接
建立一條tcp鏈接,(若之前不存在持久鏈接keep-alive),把客戶端的ip和port,服務端的ip和port數據放到web伺服器連接表中。伺服器隨時監聽鏈接表中的鏈接,看有沒有數據變化
2.2 接收http請求
一旦我們發送http請求了,這條tcp鏈接就開始工作了。因為web伺服器鏈接表中有許多鏈接需要被處理,處理的方式有單線程,多線程這些(這些涉及操作系統的知識)。
2.3 處理http請求
處理的過程大致是把請求的信息解析出來,如下圖
2.5 構建響應
要是找到資源,則構建響應信息,包括響應的對象類型,長度,狀態碼。
另一個情況是重定向響應,就是直接返回一個重定向,客戶端看到之後,立刻再向重定向的地址發起請求。重定向的響應的狀態碼一般是3xx。
2.6 發送響應
把構建的響應發送給客戶端
2.7 記錄日誌
服務端對這個請求響應過程進行記錄。(另外專門再講)
3.總結
以上是服務端處理http請求的大致過程。能讓大家有個大致輪廓,當然裡面有很多細節的知識沒講到,要另外查詢資料並學習
3. 鍓嶇璇鋒眰鏈夊摢浜
鍓嶇璇鋒眰涓昏佹湁浠ヤ笅鍑犵嶏細HTTP璇鋒眰銆丄JAX璇鋒眰銆丗etch API璇鋒眰浠ュ強Websocket璇鋒眰銆
1. HTTP璇鋒眰錛
HTTP璇鋒眰鏄鍓嶇寮鍙戜腑鏈涓哄父瑙佺殑涓綾昏鋒眰銆傚畠鏄疻eb瀹㈡埛絝涓嶹eb鏈嶅姟鍣ㄤ箣闂寸殑鏍囧噯閫氫俊鏂瑰紡銆傞氳繃HTTP璇鋒眰錛屽㈡埛絝鍙浠ュ悜鏈嶅姟鍣ㄨ幏鍙栨暟鎹鎴栨彁浜ゆ暟鎹銆侶TTP璇鋒眰鏈夊氱嶆柟娉曪紝濡侴ET銆丳OST銆丳UT銆丏ELETE絳夈傛瘡縐嶆柟娉曢兘鏈夊叾鐗瑰畾鐨勭敤閫旓紝渚嬪侴ET鐢ㄤ簬鑾峰彇鏁版嵁錛孭OST鐢ㄤ簬鎻愪氦鏁版嵁銆
2. AJAX璇鋒眰錛
AJAX鏄涓縐嶅湪涓嶅埛鏂伴〉闈㈢殑鎯呭喌涓嬩笌鏈嶅姟鍣ㄤ氦鎹㈡暟鎹騫舵洿鏂伴儴鍒嗙綉欏電殑鎶鏈銆傚畠閫氳繃寮傛ョ殑HTTP璇鋒眰錛屽彲浠ュ湪鍚庡彴涓庢湇鍔″櫒榪涜岄氫俊錛岃幏鍙栨暟鎹鍚庯紝閫氳繃JavaScript鏉ユ洿鏂伴〉闈㈢殑閮ㄥ垎鍐呭癸紝浠庤屾彁楂樹簡緗戦〉鐨勫搷搴旈熷害鍜岀敤鎴蜂綋楠屻
3. Fetch API璇鋒眰錛
Fetch API鏄涓涓鐜頒唬鐨勭綉緇淎PI錛岀敤浜庤繘琛岀綉緇滆鋒眰銆傚畠鎻愪緵浜嗕竴涓鍏ㄥ矓鐨刦etch鍑芥暟錛屽彲浠ユ柟渚垮湴榪涜岀綉緇滆鋒眰鍜屽搷搴斻侳etch API浣跨敤Promise瀵硅薄鏉ュ勭悊寮傛ユ搷浣滐紝浣垮緱緗戠粶璇鋒眰鐨勫啓娉曟洿鍔犵畝媧佸拰鏂逛究銆備笌浼犵粺鐨刋MLHttpRequest鐩告瘮錛孎etch API鏇村姞鐜頒唬鍖栦笖鏄撲簬浣跨敤銆
4. Websocket璇鋒眰錛
Websocket鏄涓縐嶅叏鍙屽伐閫氫俊鍗忚錛屽彲浠ュ湪鍗曚釜TCP榪炴帴涓婅繘琛屽叏鍙屽伐閫氫俊銆傚墠絝閫氳繃Websocket寤虹珛涓庢湇鍔″櫒鐨勮繛鎺ュ悗錛屽彲浠ュ疄鏃跺湴涓庢湇鍔″櫒鐨勮繘琛屾暟鎹浜や簰錛岃屼笉闇瑕佹瘡嬈¢兘鍙戣搗鏂扮殑HTTP璇鋒眰銆傝繖浣垮緱Websocket鍦ㄩ渶瑕佸疄鏃舵洿鏂扮殑搴旂敤涓闈炲父鏈夌敤錛屽傚疄鏃惰亰澶┿佸疄鏃舵父鎴忕瓑銆
浠ヤ笂鍥涚嶅墠絝璇鋒眰鍚勬湁鍏剁壒鐐瑰拰鐢ㄩ旓紝寮鍙戣呭彲浠ユ牴鎹鍏蜂綋鐨勯渶奼傞夋嫨閫傚悎鐨勮鋒眰鏂瑰紡銆
4. 鍓嶇痟ttp璇鋒眰緇嗚妭鈥斺擟ache-Control錛堢紦瀛樻満鍒訛級
璇鋒眰鍜屽搷搴斾腑鐨 Cache-Control 鎸囦護騫朵笉瀹屽叏鐩稿悓錛屽叿浣撳彲浠ユ煡鐪 榪欓噷 錛屽寘鎷鎸囦護鐨勫叿浣撴剰鎬濓紝榪欓噷涓嶈繃澶氳禈榪般傦紙榛樿ゅ礆細private錛
嫻忚堝櫒鐨勭紦瀛樻満鍒舵槸鏍規嵁 HTTP 鎶ユ枃鐨勭紦瀛樻爣璇嗚繘琛岀殑錛屾祻瑙堝櫒絎涓嬈″悜鏈嶅姟鍣ㄥ彂璧瘋ヨ鋒眰鍚庢嬁鍒拌鋒眰緇撴灉錛屼細鏍規嵁鍝嶅簲鎶ユ枃涓 HTTP 澶寸殑緙撳瓨鏍囪瘑錛屽喅瀹氭槸鍚︾紦瀛樼粨鏋溿
嫻忚堝櫒緙撳瓨絳栫暐鍒嗕負涓ょ嶏細寮哄埗緙撳瓨鍜屽崗鍟嗙紦瀛樸
寮哄埗緙撳瓨涓嶄細鍚戞湇鍔″櫒鍙戦佽鋒眰錛岀洿鎺ヤ粠緙撳瓨涓璇誨彇璧勬簮錛屽彲浠ョ湅鍒拌鋒眰榪斿洖鐨勭姸鎬佺爜閮芥槸200錛屽苟涓 Size 浠h〃璇ョ紦瀛樼殑浣嶇疆銆
嫻忚堝櫒璇誨彇緙撳瓨鐨勯『搴忎負memory 鈥> disk銆
涓夌駭緙撳瓨鍘熺悊 (璁塊棶緙撳瓨浼樺厛綰)錛
鍦ㄦ祻瑙堝櫒涓錛屾祻瑙堝櫒浼氬湪js錛屽瓧浣擄紝鍥劇墖絳夋枃浠惰В鏋愭墽琛屽悗鐩存帴瀛樺叆鍐呭瓨緙撳瓨涓錛岄偅涔堝綋鍒鋒柊欏甸潰鏃跺彧闇鐩存帴浠庡唴瀛樼紦瀛樹腑璇誨彇(from memory cache)錛涜宑ss鏂囦歡鍒欎細瀛樺叆紜鐩樻枃浠朵腑錛屾墍浠ユ瘡嬈℃覆鏌撻〉闈㈤兘闇瑕佷粠紜鐩樿誨彇緙撳瓨(from disk cache)銆
涓轟粈涔圕SS浼氭斁鍦ㄧ‖鐩樼紦瀛樹腑錛
鍥犱負CSS鏂囦歡鍔犺澆涓嬈″氨鍙娓叉煋鍑烘潵,鎴戜滑涓嶄細棰戠箒璇誨彇瀹,鎵浠ュ畠涓嶉傚悎緙撳瓨鍒板唴瀛樹腑,浣嗘槸js涔嬬被鐨勮剼鏈鍗撮殢鏃跺彲鑳戒細鎵ц,濡傛灉鑴氭湰鍦ㄧ佺洏褰撲腑,鎴戜滑鍦ㄦ墽琛岃剼鏈鐨勬椂鍊欓渶瑕佷粠紓佺洏鍙栧埌鍐呭瓨涓鏉,榪欐牱IO寮閿灝卞緢澶т簡,鏈夊彲鑳藉艱嚧嫻忚堝櫒澶卞幓鍝嶅簲銆
鑻ユ湇鍔″櫒鐨勮祫婧愭渶鍚庤淇鏀規椂闂 > If-Modified-Since鐨勫瓧孌靛
鍒欓噸鏂拌繑鍥炶祫婧愶紝鐘舵佺爜涓200錛涘惁鍒欏垯榪斿洖304錛屼唬琛ㄨ祫婧愭棤鏇存柊錛屽彲緇х畫浣跨敤緙撳瓨鏂囦歡
If-None-Match 鐨勫瓧孌靛 = 璇ヨ祫婧愬湪鏈嶅姟鍣ㄧ殑Etag鍊
涓鑷村垯榪斿洖304錛屼唬琛ㄨ祫婧愭棤鏇存柊錛岀戶緇浣跨敤緙撳瓨鏂囦歡錛涗笉涓鑷村垯閲嶆柊榪斿洖璧勬簮鏂囦歡錛岀姸鎬佺爜涓200銆
ETag 鍜 Last-Modified 鍖哄埆
鍙傝冮摼鎺ワ細
https://juejin.im/entry/5ad86c16f265da505a77dca4
https://www.cnblogs.com/suihang/p/12855345.html
https://www.jianshu.com/p/54cc04190252
5. Web前端開發者應該要懂的HTTP協議!
HTTP協議是構建在TCP/IP協議之上的,是TCP/IP協議的一個子集,所以要理解HTTP協議,要先了解下TCP/IP協議相關的知識。TCP/IP協議族是由一個四層協議組成的系統,這四層分別為:應用層、傳輸層、網路層和數據鏈路層。分層的好處是把各個相對獨立的功能解耦,層與層之間通過規定好的介面來通信。如果以後需要修改或者重寫某一個層的實現,只要介面保持不變也不會影響到其他層的功能。
如何理解HTTP與TCP/IP、DNS的關系呢?
當客戶端訪問Web站點時,首先會通過DNS服務查詢到域名的IP地址。然後瀏覽器生成HTTP請求,並通過TCP/IP協議發送給Web伺服器。Web伺服器接收到請求後會根據請求生成響應內容,並通過TCP/IP協議返回給客戶端。
相比於HTTP/1.1的不足,HTTP/2和HTTP/3各有哪些優勢呢?
HTTP/1.1有兩個主要的缺點:安全不足和性能不高。
HTTP/2完全兼容HTTP/1,是“更安全的HTTP、更快的HTTPS",頭部壓縮、多路復用等技術可以充分利用帶寬,降低延遲,從而大幅度提高上網體驗;
QUIC基於UDP實現,是HTTP/3中的底層支撐協議,該協議基於UDP,又取了TCP中的精華,實現了即快又可靠的協議。
以上就是環球青藤小編關於HTTP協議的相關內容分享,希望對大家有所幫助,想要了解更多相關內容,歡迎關注本平台!