WEB請求過程的深入學習(深入分析JavaWeb技術內幕,第一章讀後總結和深入學習)

幾天前,看到了這樣一本書,《深入分析JavaWeb技術內幕》,作者是許令波,非常全面的對整個web進行了分析和講解,但是其中可能會有很多地方和名詞對於一個我來說,不能理解,所以根據原文,總結整理了這個筆記。

1.B/S架構帶來的好處

   a.統一使用瀏覽器,操作起來相對簡單,且瀏覽器具有統一性,屏蔽了用戶使用服務的差異性。
   b.服務端(S端)統一使用http協議,簡化開發模式,並且使開發模式規範化,降低開發人員的開發成本和學習成本。
2.B/S架構的概述
   a. B/S架構基於統一的應用層協議http來進行數據交互,C/S架構通常使用長連接(始終保持連接狀態),http協議使用無狀態短連接的通信方式,一次請求對應一次數據交互,也就是對應一個業務邏輯(比如進行一次搜索),請求之後斷開通信連接,這樣做的好處就是保證同時服務更多的用戶,保證高併發的訪問。目前B/S架構都採用類似於下圖所示架構設計,既滿足海量用戶的訪問請求,又要保證用戶請求的快速響應,所以網絡結構也變得越來越複雜。
                          
   一個用戶在瀏覽器中輸入一個URL(如www.baidu.com)時,會發生這樣的一些操作,首先他會請求DNS把這個域名解析成對應的IP地址,然後瀏覽器根據這個IP地址去查找對應的服務器,再向這個服務器發送一個請求,然後在服務器上進行一些操作,然後由服務器決定返回默認的數據資源給訪問的用戶。(由上圖可以看出,服務器端還有很多複雜的邏輯,比如服務器可能有多臺,到底是那一臺服務器來響應這個請求,這裏需要一個負載均衡設備來平均所有的請求,當數據返回瀏覽器時,瀏覽器再解析是發現還有一些靜態的數據比如JS和CSS或者圖片時,會發起另外的http請求,而這個請求,而這些請求很可能在CDN上,然後CDN服務器又會處理這個請求)。不管網絡架構如何變化,始終有些固定不變的原則需要遵守
 a.互聯網上所有的資源都需要一個URL來表示
 b.必須基於HTTP協議與服務端來進行交互
 c.數據展示必須在瀏覽器中
3.如何發起一個請求
   瀏覽器在地址欄輸入URL,然後根據URL的域名DNS解析出對應的IP地址和端口號,在根據這個IP地址和端口號與遠程服務器建立SOCKET連接 ,然後瀏覽器根據這個URL,構建一個get類型的HTTP請求頭,使用outputStream.write發送到目標服務器,服務器根據inputStream.read返回數據,然後斷開連接。
4.常見的http請求頭,響應頭,狀態碼
       
         
       
5.瀏覽器的緩存機制:瀏覽器緩存是一個比較複雜並且重要的機制,在瀏覽器端如果進行同一個請求,就有可能拿到瀏覽器中緩存                                    的數據,一個非常有效的解決辦法就是按ctrl+f5組合鍵,ctrl+F5瀏覽器會直接想目標URL發送請求,不會取                                  瀏覽器的緩存數據,其次 在服務端也可能會有緩存的數據(服務器的前端可能有一個緩存服務器,如                                              Varnish代理,Varnish也肯能直接拿取緩存的數據),所以爲了保證拿到最新的數據,必須通過HTTP協議來                                 進行控制,使用ctrl+F5組合鍵的時候,在HTTP的情求頭中會增加一些請求頭,他會告訴服務器我們要的是最                                 新的數據。
                                這裏的請求頭是:
                               a.Cache-Control(多種瀏覽器支持)/Pragma(服務器遵守):這個HTTP head字段用於指定所有緩存機制在                                   整個請求/響應鏈中必須服從的指令,不僅可以控制 瀏覽器端,還可以控制緩存或代理服務器
                                
                                b.Expires:後面通常跟着的是時間格式,超過這個時間之後,緩存內容就將失效,瀏覽器再發送請求之前來檢                                 查這個字段 查看這個頁面是否過期,若是過期則重新請求。
                                c.Last-Modified/Etag:Last-Modified用於表示資源的最後一次修改時間,瀏覽器發送請求時,請求頭中會                                   帶這個字段,來詢問這個資源修改時間是否是最新,如果是最新的,就返回304狀態碼,服務器不會返回數據                                 給瀏覽器。Etag與 Last-Modified很像,只不過它是爲每一個頁面分配唯一的編號,然後通過編號來判斷是否                                 是最新的。
6.DNS域名解析過程  :DNS的工作就是將域名解析成IP地址。(如圖)
                                 DNS的解析過程:
                                 第一步:瀏覽器檢測緩存中有沒有這個域名對應的解析過的IP地址,如果緩存中有,結束解析(瀏覽器中緩存                                               與域名是 有限制的,時間和大小上都有限制,時間限制由TTL屬性設置,這個時間太長太短都不好,                                               太長,有可能服務器 地址發生變化,太短,會導致每次請求都需要解析)
                                 第二步:如果瀏覽器中沒有這個域名的緩存,瀏覽器會查找操作系統緩存中是否有這個域名對應的解析結果.
                                 第三步:如果在本機中無法完成域名的解析,就會來到這一步。我們的網絡配置中DNS服務器地址這一項,                                                 操作系統會把域名發送給這裏設置的LDNS(本地區的域名服務器),大約80%域名的解析到這一步                                               就結束了。
                                 第四步:如果LDNS沒有解析成功,就會到Root Server域名服務器進行解析。
                                 第五步:根域名服務器會返回給LDNS一個所查詢域的主域名(gTLD Server)服務器地址,gTLD是世界上頂                                               級域名服務 器,如com cn 全世界只有13臺左右
                                 第六步:本地服務器再向主域名服務器發送請求
                                 第七步:接受請求的主域名服務器查找並返回此域名對應的NameServer域名服務器地址(這個域名服務器通                                                常就是你要訪問的那個域名的域名提供商)
                                 第八步:NameServer域名服務器會查詢儲存的域名服務器和IP的映射關係表,然後將查詢的IP以及TTL傳回                                                  LDNS
                                 第九步:LDNS會緩存這個域名和IP的對應關係,緩存時間由TTL控制。
                                 第十步:把解析結果返回給用戶,用戶根據TTL值,將結果保存至本地緩存中。
                                
7.清除緩存的域名:域名一般會緩存在兩個位置,一個是LDNS,一個是用戶的本地機器,這兩個的緩存時間都是由TTL和本地緩存                                大小控制的,基本上來說LDNS上面的緩存時間就是TTL,控制,很難人工介入,但是本地緩存可以通過                                           ipconfig/flushdns來清除,在java應用中JVM也會緩存DNS解析結果,這個緩存是在InetAddress中完成的,                                 而且緩存比較特殊,它有兩種緩存策略,一種是正確解析結果緩存,另一個是失敗的解析結果緩存,這兩個的                                緩存時間由一個配置項控制,是在java的lib下面的security/java.swecurity中配置的,他們兩個的配置項分別是                               networkaddress.cache.ttl和networkaddress.cache.negative.ttl,他們的默認值分別爲-1(永不失效)和                                      10(10秒後失效),可以直接修改
                             注意:使用InetAddress來進行域名解析是,一定要使用單例,否則會有嚴重性能問題(因爲每次創建都是一次                              完整解析)
8.CDN
                             a:CDN的定義:CDN(content Delivery Network)也就是內容分佈網絡,它是構築在現有Internet上的一種                              先進 的流量分配網絡。
                             b:CDN的工作機制:其目的是通過現有Internet增加一種新的網絡架構,將網站內容發送到最接近用戶的網                                  絡“邊緣”使用戶就近取得信息,提高響應效率,目前CDN主要已緩存靜態數據爲主,如CSS,JS等,用戶從主                              網站請求動態內容再從CDN上下載靜態數據。
                             c.CDN要達到的目標:可擴展行(性能可擴展:應對新增大量數據,用戶,事物的拓展能力。成本可擴展:用低                              廉的運營成本提供動態的服務能力和高質量內容的分發);安全性;可靠性;
                             
9.負載均衡:負載均衡就是對任務進行平衡,分攤到多個操作單元上執行,如應用服務器,圖片服務器,通常有三種負載均衡架構
                   鏈路負載均衡,集羣負載均衡以及操作系統負載均衡
                   通過DNS解析出不同的IP,用戶根據不同的IP訪問不同的服務器,這就是一種鏈路負載均衡。
                   集羣負載均衡分爲硬件負載均衡和軟件負載均衡,硬件負載均衡成本高,性能好,但是不能進行動態擴容,軟件負載均                    衡 成本低,但是要經過多個代理服務器會增加網絡延時。
                   操作系統負載均衡,就是利用操作系統級別的軟中斷或者是硬件中斷來達到負載均衡,比如多隊列網卡。
                   
                      
註解:
  應用層協議http:TCP/IP是個協議組,大致可以分爲五個層次:應用層,傳輸層,網絡層,數據鏈路層,物理層
                            每個層下面都有很多的協議:
                            應用層:http----超文本傳輸協議,用於網頁瀏覽
                                         smtp----簡單郵件傳輸協議,用於郵件發送
                                         pop3----郵局協議版本3,用於郵件接收
                                         telnet---- 用於遠程登陸
                                         snmp----簡單網絡管理協議,用於網絡管理 
                                         ftp----文件傳輸協議,用於遠程文件傳輸
                                         dhcp----動態主機配置協議,自動分配IP
                                         tftp----簡單文件傳輸協議,短小文件遠程傳輸
                            傳輸層:tcp----傳輸控制協議,在傳輸層保證數據可靠傳輸的一種協議
                                         udp----用戶數據包協議,在傳輸層是數據具有較高傳輸效率的協議
                                         spx----序列分組交換協議,在Novell網絡傳輸層中的一種協議
                             網絡層:IP----網際協議,實現異網互聯通信機制和邏輯編址的協議
                                          ipx  在Novell網絡中網絡層的一種協議
                                          apple talk蘋果公司計算機專業的網絡層通信協議
                             數據鏈路層:  802.3、802.4、802.5、802.11、FDDI、ATM
                             物理層 :v.24 v.35 RS232 RS485
                             那麼這幾個層次之間都是做什麼的?有這麼一個例子
                             把整個過程比喻成郵局寄信,應用層就是寫信,然後放入信箱。傳輸層就是你把信件投到郵局。網絡層就是郵                                  局把你的信件投放到對方所屬的中心郵局,鏈路層就是對方中心郵局把信件發送到小郵政點,物理層就是就是把                              信件送到對方手上。
      無狀態 :   協議的狀態是指下一次傳輸可以記住這次傳輸信息的能力,http是不會爲下一次鏈接而維護這一次鏈接的信息的。
                       無狀態就是指 當瀏覽器發送請求給服務器的時候,服務器響應,但是同一個瀏覽器再次發生請求時,服務器還會響                          應,但是他不知道你就是剛纔的瀏覽器,簡單的說,就是服務器不會去記得你,所以是無狀態協議。在客戶端與服務                        端進行動態交互的web程序出現之後,http無狀態的特性嚴重阻礙了這些應用程序的實現,畢竟交互需要呈上起下,                        比如購物車程序需要知道用戶買了什麼,於是兩種用於保持HTTP連接狀態的技術應運而生,一個是cookie,一個                          是session,session和cookie是有區別的,一個是客戶端保持連接狀態,一個是服務端保存連接狀態。
      短連接:    短連接就是指SOCKET連接,發送,接收數據後馬上斷開連接。
                       長連接就是指建立SOCKET連接之後,不管是否使用都保持連接,但是安全性比較差
                       HTTP也是可以支持長連接的,使用Connection:keep-alive,HTTP1.1默認進行持久連接,但還是無狀態的,也就                        是不可信任的。
      

發佈了32 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章