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协议的相关内容分享,希望对大家有所帮助,想要了解更多相关内容,欢迎关注本平台!