深刻Web請求過程

一、淺談HTTP協議html

B/S構架都是經過HTTP協議的方式來交換數據的。而其中HTTP鏈接本質是創建一個SOCKET鏈接。例如經過UrlConnction模擬一個HttpClinet鏈接。瀏覽器

public static InputStream getHTMLString(String urlString)緩存

                 throws IOException {安全

           // String urlString = "http://www.acfun.tv";服務器

           InputStream stream = null;網絡

           try {負載均衡

                 URL realUrl = new URL(urlString);框架

                 // 創建鏈接性能

                 URLConnection connection = realUrl.openConnection();網站

                 // 填寫頭信息

                 connection.setRequestProperty("accept", "*/*");

                 connection.setRequestProperty("connection", "Keep-Alive");

                 connection.setRequestProperty("user-agent",

                            "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

                 connection.connect();

                 stream = connection.getInputStream();

           } catch (Exception e) {

                 System.out.println(e.getMessage());

                 // TODO: handle exception

           } finally {

                 try {

                 } catch (Exception e2) {

                      System.out.println(e2.getMessage());

                      // TODO: handle exception

                 }

           }

           return stream;

}

 

一、     HTTP解析

 

請求頭

說明

Accept-Charset

用於指定客戶端接收的字符集

Accept-Encoding

用於指定可接受的內容編碼,如:Accept-Encoding:gzip.deflate

Accept-Language

用於指定一種天然語言,如:Accept-Language:zh-cn

Host

用於指定被請求資源的Internet主機和端口號,如:www.acfun.tv

User-Agent

客戶端類型 如火狐瀏覽器、手機等

Connection

當前鏈接是否保持,如:Connection:Keep-Alive

 

 響應頭

說明

Server

使用服務器名稱,如Server:Apache/1.3.6(Unix)

Content-Type

用來講明發送給接收者的實體正文的媒體類型,如Conntent-Type:text/html;charest=GBK

Content-Encoding

與請求報文頭Accept-Encoding對應

Content-Language

描述了資源所使用的天然語言,與Accept-Language對應

Content-Length

指明實體正文的長度,用字節方式存儲的十進制數字表示

Keep-Alive

保持鏈接時間,如:Keep-Alive:timeout=5,max=120

 

狀態碼

說明

200

客戶端請求成功

302

跳轉

400

客戶端請求有語法錯誤,不能被服務器識別

404

請求資源不存在

500

服務器發生錯誤

 

 

二、     DNS域名解析

當一個用戶在瀏覽器輸入一個請求時,DNS解析將會有將近10個步驟,這個過程大致以下:

第一步、瀏覽器會檢查緩存中有沒有這個域名對應的IP地址,若是緩存中有,這個解析過程會結束。

第二步、若是用戶的瀏覽器緩存中沒有,瀏覽器會查找操做系統中是否有這個域名對應的DNS解析結果。

第三步、LDNS,也就是咱們平時設置的域名服務器(網絡配置->DNS服務器地址)。若是你是在一個小區接入的互聯網。那這個DNS就是提供接入互聯網的供應商。如聯通、電信。

第四步、若是LDNS仍然沒有命中,就直接到Root Server域名服務器請求解析。

第五步、根域名服務器返回給本地域名服務器一個所查詢域的主域名服務器(gTLD Servver)地址。gTLD是國際頂級域名,如:.com、.cn等。

第六步、本地域名服務器再向上一步返回gTLD服務器發送請求。

第七步、接受請求的gLTD服務器查找並返回此域名對應的Name Server域名服務器的地址,這個Name Server一般就是你註冊的域名服務器。

第八步、Name Server域名服務器會查詢存儲域名和IP的映射關係表,在正常狀況下都根據域名獲得目標IP記錄,連同一個TTL值返回給DNS Server域名服務器。

第九步、返回該域名對應的IP和TTL值,本地DNS會緩存這個域名和IP的對應關係,緩存時間有TTL值控制。

第十步、把解析結果返回給用戶、用戶根據TTL值緩存在本地系統緩存中,域名解析結束。

2.一、跟蹤域名解析過程

         在Linux和Windows下均可以用nslookup命令來查詢域名的解析結果。

 

2.二、清除緩存域名

         在Windows下能夠執行ipconfig/flushdns命令刷新緩存。

 

         若是咱們須要用InetAddress解析域名。必須是單利模式,不然會有嚴重的性能問題,若是每次都建立Inetaddess,則每次都要進行一次完整的DNS解析,很是耗時。

2.三、幾種域名解析方式

         域名解析記錄主要分爲A記錄、MX記錄、CNAME記錄、NS記錄和TXT記錄。

         A記錄,A表明的Address,A記錄能夠將多個域名解析到一個IP地址,但不能將一個域名解析到多個IP地址。

         MX記錄,表示的是Mail Exchange,就是能夠將某個域名下的郵件服務器指向本身的Mail Server,如taobao.com域名的A記錄IP地址是115.14.24.xxx,若是將MX記錄設置爲115.238.25.xxx DNS會將郵件發送到115.238.25.xxx所在的服務器。而正常的請求仍然會解析到A記錄的IP地址上。

CNAME記錄,Canonical Name(別名解析)別名解析能夠爲一個域名設置多個別名。

NS記錄,爲某個域名指定DNS解析服務器也就是這個域名有指定IP地址的DNS服務器去解析。

TXT記錄,爲某個主機名或者域名設置說明。

三、     CND工做機制

CND也就是內容分佈網絡,目前CDN都是以緩存網站中的靜態數據爲主的,如CSS、JS圖片和靜態頁面數據等。

一般來講CDN要達到如下幾個目標

可擴展、安全性、可靠性。

3.一、負載均衡

         負載均衡就是對工做任務進行平衡、分攤到多個操做單元上執行,如圖片服務器、應用服務器,共同完成工做仍無。它能夠提升服務器響應速度及利用效率

         一般有三種負債均衡框架,分別是鏈路負載均衡、集成負載均衡和操做系統負載均衡。

相關文章
相關標籤/搜索