HTTP學習(一)初識HTTP

来源:http://www.cnblogs.com/zhixuanziben/archive/2017/02/17/6410463.html
-Advertisement-
Play Games

作為一名準前端開發工程師,必須要對http基礎知識有一定的瞭解,可是想學習HTTP相關的知識,發現國內只有兩本相關的圖書,《HTTP權威指南》和《圖解http》,所有的書但凡帶上權威指南,必將是聖經級別的圖書,我在學校圖書館借了一本,600多頁的磚頭書,由於基礎太過薄弱,根本讀不下去,於是轉向了《圖 ...


  作為一名準前端開發工程師,必須要對http基礎知識有一定的瞭解,可是想學習HTTP相關的知識,發現國內只有兩本相關的圖書,《HTTP權威指南》和《圖解http》,所有的書但凡帶上權威指南,必將是聖經級別的圖書,我在學校圖書館借了一本,600多頁的磚頭書,由於基礎太過薄弱,根本讀不下去,於是轉向了《圖解HTTP》,是本書很薄,只有二百多頁,很適合我這樣的小白。推薦基礎比較薄弱的朋友先從《圖解HTTP》看起!廢話不多說,準備起飛!      幾乎每一位前端工程師在面試的時候都會被問道這樣一個問題,在瀏覽器地址欄輸入URL到顯示出整個頁面,經歷了什麼?這個問題並沒有一個統一的答案,最簡單的形容:     1.利用dns進行功能變數名稱解析,解析成電腦能夠識別的ip地址 。   2.進行tcp的三次握手 。   3.建立起tcp連接後,進行http請求 。   4.伺服器端相應http請求,瀏覽器得到html頁面 。   5.瀏覽器解析html頁面,發起html頁面內的資源請求 。   6.渲染得到的html頁面,呈獻給用戶。      如果覺得理解不了,可以先跳過,等看完全篇文章再回看這個問題,就容易理解很多。      首先要瞭解兩個概念,客戶端和伺服器,客戶端通俗理解就是用戶(比如你手機上的瀏覽器),請求資源的一方,而伺服器端就是存儲網站信息的主機(比如百度公司的伺服器),提供資源相應的一方。而http就是客戶端和伺服器之間進行交流的一個協議。電腦和網路設備之間進行通信,就必須使用雙方都能夠理解的信息進行交流,這種為了使雙方順利進行信息的通訊而制定的規範就是協議! 要想學習http,則還要簡單瞭解一下tcp/ip協議,tcp/ip協議是許多協議組成的集合的總稱,包括TCP, IP, HTTP, DNS,FTP,UDP,PPPoE,ICMP,SNMP,FDDI等協議,http是tcp/ip協議的一個子集,是tcp/ip協議族的一部分!由於tcp/ip協議族中有很多不同的協議,而這些協議所應用的領域又有很大的不同,所以,對不同領域的協議進行劃分就顯得很重要了,tcp/ip協議族將這些協議劃分為4層,分別是:應用層,傳輸層,網路層,數據鏈路層。不同的層次分工也各有不同。      應用層:應用層決定了向用戶提供應用服務時通信的活動,包含的協議包括HTTP, DNS(Domain Name System,功能變數名稱系統),FTP(File Transfer Protocol,文件傳輸協議)。      傳輸層:傳輸層對上層應用層,提供處於網路連接中的兩台電腦之間的數據傳輸。包括TCP(Transmission Control Protocol, 傳輸控制協議)和UDP( User Data Protocol, 用戶數據報協議)。      網路層(又稱:網路互聯層):網路層用來處理 在網路上流動的數據包。數據包是網路傳輸的最小數據單位,該層規定了通過怎樣的傳輸路線到達對方電腦,並把數據包傳給對方,當與對方電腦之間通過多台電腦或者網路設備進行傳輸時,網路層的作用就是在多條路中間選擇一條傳輸路線。網路層最主要的就是IP協議(Internet Protocol)。      數據鏈路層: 用來處理連接網路的硬體部分,包括控制操作系統,硬體的設備驅動,網卡,光纖等肉眼可見的部分,硬體範疇都屬於數據鏈路層。         配圖(tcp/ip分層結構圖)      在利用tcp/ip協議族通訊的時候,會按分層的順序走,客戶端從上往下,接收端從下往上,以此完成一次通訊!通俗點理解就是,在京東購物下單,發送用戶的請求(應用層,http發送請求),倉庫打包物品(傳輸層,tcp將大數據分割成報文段,準確可靠的把信息傳遞),快遞裝車,途徑各個中轉中心,發往全國各地(網路層,ip協議,通過目標地址,選擇線路),快遞小哥派送物品(數據鏈路層)。      知道這些顯然還不夠,與http有關的協議主要有TCP,IP,DNS。      DNS屬於應用層,有時候輸入功能變數名稱(給人看的)或者一串數字(給電腦看的)組成的ip地址都能夠訪問同一個網站,這是因為功能變數名稱是方便記憶,但是電腦看不懂,電腦只能看懂ip地址,所以DNS就是為了將功能變數名稱和ip地址進行轉換而生的。輸入網址後,第一件事就是利用DNS將功能變數名稱轉換為ip地址。      TCP協議屬於傳輸層,將http的大塊請求數據進行分解,拆成報文段( segment)為單位的數據包進行管理,這樣可以方便傳輸。tcp有強迫症,將信息告訴他人後,他還不放心,需要再次確認才能夠放心,所以tcp傳遞是靠譜,準確的傳遞,整個過程就像:           小A:我給你說點事,XXXXXXXXXXXXXXXX,你可別給他人說!收到請回覆!(第一次握手)(發送SYN數據包)           小B:好的,收到了。(第二次握手)(回覆SYN/ACK數據包)           小A:嗯,我就是確認一下!(第三次握手)(發送ACK數據包)      這就是大名鼎鼎的三次握手,如果中間莫名中斷,tcp協議會再次以相同的順序發送相同的數據包。保證了通信的可靠性。      IP協議屬於網路層,主要負責數據傳輸,把數據包傳遞給對方,要想傳遞給對方,則需要知道對方的IP地址或MAC地址,IP地址指明瞭節點被分配到的地址,而MAC地址是指網卡所屬的固定地址,IP地址能夠和MAC地址進行配對,IP地址能夠更換,而MAC地址是固定不變的!IP間的通訊依賴MAC地址,但是,通信雙方在一個區域網內的情況是很少的,所以說大部分的通信都是需要中間的設備進行中轉的,根據下一個中轉設備的MAC地址才能夠搜索下一個中轉目標。採用ARP協議(Address Resolution Protocol),解析通信方的ip地址,反查出MAC地址。   未完,待續!
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天我們來講一下命令模式。 一、案例 我們去燒烤店吃燒烤,給我們烤羊肉串和雞翅。用簡單的控制台應用程式來模擬一下。 客戶端調用: 二、演繹 1、第一步演繹 如果燒烤店裡有好多人,都要了若幹的烤串和雞翅,那麼,烤肉串者怎麼記得誰點了什麼,點了多少串呢?這樣就會亂掉了。如何解決這個問題呢?我們需要服務員 ...
  • extends與implements的不同 1、在類的聲明中,通過關鍵字extends來創建一個類的子類。 一個類通過關鍵字implements聲明自己使用一個或者多個介面。 extends 是繼承某個類, 繼承之後可以使用父類的方法, 也可以重寫父類的方法; implements 是實現多個介面, ...
  • 今天我們來講一下橋接模式。 一、案例 我有N牌子的一個手機,需要運行一款游戲軟體。咱們用簡單的控制台應用程式來實現一下。 客戶端調用: 二、演繹 1、第一步演繹: 如果我不僅有N品牌的手機,還有M品牌的手機也需要運行這款游戲軟體,怎麼辦? 我們可以將運行游戲軟體抽象出一個父類,讓N,M品牌的手機繼承 ...
  • 很久沒寫博客了,因為最近在用react+express做一個自己的工具型網站(其實就是奪寶島搶拍器) 然後因為經常要改動,而且又要放到伺服器上進行測試。總是要webpack,然後手動把文件上傳上去,不勝其煩,索性搜索了下,直接寫個能檢測文件變化並自動進行上傳的腳本好了。 首先,我們使用npm 安裝兩 ...
  • 什麼是webpack webpack是一個模塊化載入器 支持AMD/CMD。 webpack優勢 代碼分割 Loaders 插件機制 ... 安裝webpack 全局安裝 局部安裝 安裝某個指定的版本 例如1.14.0 webpack命令行參數 p 編譯後會壓縮文件 w/ watch 開發環境下會監 ...
  • //先定義一個數組 anular代碼: var app = angular.module('serApp', []); app.controller('indexCtrl', function($scope, $http) { $scope.arrs = [{ n:'a'; arr:['1','2' ...
  • DOM事件模型 在0級DOM事件模型中,它只是簡單的執行你為它綁定的事件,比如你為某個元素添加了一個onclick事件,當事件觸發時,它只是去調用我們綁定的那個方法,不再做其他的操作。 在2級DOM事件模型中,就比較複雜一些,它將不再是單純的調用一下自身綁定的事件就完事了,它還擁有機會去處理它的祖先 ...
  • 在發送簡訊息驗證碼的時候要用到js設置時間倒序問題:有時候這種常規寫法會導致js失效,試了很多方法才找到問題所在,可能是因為js版本過低導致。 解決方法: jquery代碼:必須用input設置value值,以便利用jquery更改value值 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...