計算機網絡篇(前端、HTTP)

全端工程師需知道的計算機網絡知識

1、網絡篇—http報文詳解

1. 分類

  1. 請求報文
  2. 響應報文

2. 報文結構

(一)、請求報文

一個HTTP請求報文由 請求行(request line)、請求頭部(header)、空行和請求數據4個部分組成;
  1. 請求行
  • 由請求方法字段、URL字段和HTTP協議字段3個字段組成,它們由空格分隔;
  • 例如,GET /index.html HTTP/1.1。
  • HTTP協議的請求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。
  1. 請求頭部
  • 請求頭部由關鍵字/值對組成,每行一對,關鍵字和值用英文冒號「:」分隔。
  • 請求頭部通知服務器有關於客戶端請求的信息;
  • 經常使用的請求頭:html

    1. Accept 設置接受的內容類型Accept: text/plain;
    2. Accept-Charset 設置接受的字符編碼:Accept-Charset: utf-8;
    3. Accept-Encoding 設置接受的編碼格式:Accept-Encoding: gzip, deflate;
    4. Accept-Language 設置接受的語言:Accept-Language: en-US;
    5. Cache-Control 設置請求響應鏈上全部的緩存機制必須遵照的指令:Cache-Control: no-cache;
    6. Connection 設置當前鏈接和hop-by-hop協議請求字段列表的控制選項:Connection: keep-alive;
    7. Content-Length 設置請求體的字節長度:Content-Length: 348;
    8. Content-Type 設置請求體的MIME類型(適用POST和PUT請求):Content-Type: application/x-www-form-urlencoded;
    9. Cookie 設置服務器使用Set-Cookie發送的http cookie:Cookie: $Version=1; Skin=new;;
    10. Host 設置服務器域名和TCP端口號,若是使用的是服務請求標準端口號,端口號能夠省略:Host: en.wikipedia.org:8080;
    11. Origin 標識跨域資源請求(請求服務端設置Access-Control-Allow-Origin響應字段):Origin: http://www.example-social-network.com;
    12. Expires 設置響應體的過時時間:Expires: Thu, 01 Dec 1994 16:00:00 GMT;
    13. ETag 特定版本資源的標識符,一般是消息摘要:ETag: "737060cd8c284d8af7ad3082f209582d";
    14. Last-Modified 設置請求對象最後一次的修改日期:Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT;
  1. 空行
  • 最後一個請求頭以後是一個空行,發送回車符和換行符,通知服務器如下再也不有請求頭。
  1. 請求主體(數據)
  • 請求數據不在GET方法中使用,而是在POST方法中使用。POST方法適用於須要客戶填寫表單的場合。與請求數據相關的最常使用的請求頭是Content-Type和Content-Length。

(二)、響應報文

HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行、響應正文。
  1. 在響應中惟一真正的區別在於第一行中用狀態信息代替了請求信息。狀態行(status line)經過提供一個狀態碼來講明所請求的資源狀況。
  2. 狀態行
  • 格式:服務器HTTP協議的版本 響應狀態代碼 狀態代碼的文本描述;
  • 狀態代碼由三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:segmentfault

    • 1xx:指示信息--表示請求已接收,繼續處理。
    • 2xx:成功--表示請求已被成功接收、理解、接受。
    • 3xx:重定向--要完成請求必須進行更進一步的操做。
    • 4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現。
    • 5xx:服務器端錯誤--服務器未能實現合法的請求。
  • 常見狀態代碼:跨域

    • 200 OK :表示請求成功 一切正常
    • 301 Moved Permanently:重定向,客戶請求的文檔在其餘地方,新的URL在Location頭中給出,瀏覽器應該自動地訪問新的URL
    • 302 Found:臨時重定向,相似於301,但新的URL應該被視爲臨時性的替代,而不是永久性的。
    • 304 Not Modified:客戶端有緩衝的文檔併發出了一個條件性的請求。服務器告訴客戶,原來緩衝的文檔還能夠繼續使用。
    • 400 Bad Request:請求出現語法錯誤。
    • 403 Forbidden:資源不可用。
    • 404 Not Found:沒法找到指定位置的資源。
    • 405 Method Not Allowed:請求方法(GET、POST、HEAD、Delete、PUT、TRACE等)對指定的資源不適用。
    • 500 Internal Server Error:服務器遇到了意料不到的狀況,不能完成客戶的請求。
    • 501 Not Implemented:服務器不支持實現請求所須要的功能

(三)、關於請求post和get的區別

  1. GET提交,請求的數據會附在URL以後(就是把數據放置在HTTP協議頭<request-line>中);
  2. POST提交:把提交的數據放置在是HTTP包的包體<request-body>中;
  3. 傳輸數據的大小:
  • HTTP協議沒有對傳輸的數據大小進行限制,HTTP協議規範也沒有對URL長度進行限制。
  • 而在實際開發中存在的限制主要有:瀏覽器

    • GET:特定瀏覽器和服務器對URL長度有限制,例如IE對URL長度的限制是2083字節(2K+35)。對於其餘瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於操做系統的支持。所以對於GET提交時,傳輸數據就會受到URL長度的限制。
    • POST:因爲不是經過URL傳值,理論上數據不受限。但實際各個WEB服務器會規定對post提交數據大小進行限制,Apache、IIS6都有各自的配置。

4.安全性:緩存

  • POST的安全性要比GET的安全性高。
  • 經過GET提交數據,用戶名和密碼將明文出如今URL上,由於
  • (1)登陸頁面有可能被瀏覽器緩存,
  • (2)其餘人查看瀏覽器的歷史紀錄,那麼別人就能夠拿到你的帳號和密碼了

(四)、http和https

1. HTTP和HTTPS安全

  • HTTP協議一般承載於TCP協議之上,在HTTP和TCP之間添加一個安全協議層(SSL或TSL),這個時候,就成了咱們常說的HTTPS
  • 默認HTTP的端口號爲80,HTTPS的端口號爲443

2. 爲何HTTPS安全服務器

  • 由於網絡請求須要中間有不少的服務器路由器的轉發。中間的節點均可能篡改信息,而若是使用HTTPS,密鑰在你和終點站纔有。https之因此比http安全,是由於他利用ssl/tls協議傳輸。它包含證書,卸載,流量轉發,負載均衡,頁面適配,瀏覽器適配,refer傳遞等。保障了傳輸過程的安全性

3. 關於Http 2.0cookie

  • HTTP/2引入了「服務端推(server push)」的概念,它容許服務端在客戶端須要數據以前就主動地將數據發送到客戶端緩存中,從而提升性能。
  • HTTP/2提供更多的加密支持
  • HTTP/2使用多路技術,容許多個消息在一個鏈接上同時交差。
  • 它增長了頭壓縮(header compression),所以即便很是小的請求,其請求和響應的header都只會佔用很小比例的帶寬

4. http缺點:網絡

  • 通訊使用明文不加密,內容可能被竊取;
  • 不驗證通訊方身份,可能遭到假裝;
  • 沒法驗證報文完整性,可能被篡改。
https是加上加密處理(通常是SSL安全通訊線路)+認證+完整性保護

5. HTTP/2 與 HTTP/1.x 的關鍵區別併發

  • 二進制協議代替文本協議,更加簡潔高效
  • 針對每一個域只使用一個多路複用的鏈接
  • 壓縮頭部信息減少開銷
  • 容許服務器主動推送應答到客戶端的緩存中

(五)、http狀態碼

簡單版
    [
        100  Continue   繼續,通常在發送post請求時,已發送了http header以後服務端將返回此信息,表示確認,以後發送具體參數信息
        200  OK         正常返回信息
        201  Created    請求成功而且服務器建立了新的資源
        202  Accepted   服務器已接受請求,但還沒有處理
        301  Moved Permanently  請求的網頁已永久移動到新位置。
        302 Found       臨時性重定向。
        303 See Other   臨時性重定向,且老是使用 GET 請求新的 URI。
        304  Not Modified 自從上次請求後,請求的網頁未修改過。

        400 Bad Request  服務器沒法理解請求的格式,客戶端不該當嘗試再次使用相同的內容發起請求。
        401 Unauthorized 請求未受權。
        403 Forbidden   禁止訪問。
        404 Not Found   找不到如何與 URI 相匹配的資源。

        500 Internal Server Error  最多見的服務器端錯誤。
        503 Service Unavailable 服務器端暫時沒法處理請求(多是過載或維護)。
    ]

2、網絡——其餘

1. 一個頁面從輸入 URL 到頁面加載顯示完成,這個過程當中都發生了什麼?(流程說的越詳細越好)
一個頁面從輸入 URL 到頁面加載顯示完成,這個過程當中都發生了什麼

2. 說說網絡分層裏七層模型是哪七層

  • 應用層:應用層、表示層、會話層(從上往下)(HTTP、FTP、SMTP、DNS)
  • 傳輸層(TCP和UDP)
  • 網絡層(IP)
  • 物理和數據鏈路層(以太網)
  • 每一層的做用以下:
  • 物理層:經過媒介傳輸比特,肯定機械及電氣規範(比特Bit)數據鏈路層:將比特組裝成幀和點到點的傳遞(幀Frame)

    • 網絡層:負責數據包從源到宿的傳遞和網際互連(包PackeT)
    • 傳輸層:提供端到端的可靠報文傳遞和錯誤恢復(段Segment)
    • 會話層:創建、管理和終止會話(會話協議數據單元SPDU)
    • 表示層:對數據進行翻譯、加密和壓縮(表示協議數據單元PPDU)
    • 應用層:容許訪問OSI環境的手段(應用協議數據單元APDU)

3. 304緩存的原理

  • 服務器首先產生ETag,服務器可在稍後使用它來判斷頁面是否已經被修改。本質上,客戶端經過將該記號傳回服務器要求服務器驗證其(客戶端)緩存
  • 304是HTTP狀態碼,服務器用來標識這個文件沒修改,不返回內容,瀏覽器在接收到個狀態碼後,會使用瀏覽器已緩存的文件
  • 客戶端請求一個頁面(A)。 服務器返回頁面A,並在給A加上一個ETag。 客戶端展示該頁面,並將頁面連同ETag一塊兒緩存。 客戶再次請求頁面A,並將上次請求時服務器返回的ETag一塊兒傳遞給服務器。 服務器檢查該ETag,並判斷出該頁面自上次客戶端請求以後還未被修改,直接返回響應304(未修改——Not Modified)和一個空的響應體
  • 認識更多--瀏覽器緩存篇
相關文章
相關標籤/搜索