最近開始學習ajax相關知識,所以正好仔細複習一下http的相關基礎知識。
1ip和mac
:
s1 網路 分成很多個子網, 就像乙個國家分成很多個省份
s2 寄送物品的時候,只要按省份分類 下發到各省級物流中心即可 (由子網內部解決)
路由器只需記住每個子網的位置即可,大大減少了路由器所需要的記憶體
我們需要用 mac位址來區分不同的裝置;
總之
2閘道器
:
聯絡外網的裝置,
具有其他閘道器位址的 路由表
具有內網內 ip和mac對應的 arp表
3dhcp伺服器
: 隨機得到ip
4路由
: 閘道器之間的查詢和連線的 一系列過程
5dns
: 網域名稱和ip的對照表
6客戶端
: 能傳送(資源)請求 + 接受響應資源的裝置,都可以稱為是客戶端
7協議
: 從發起請求——獲得響應資源,這過程中的 各種約定規則的集合
我們可以模擬一下日常生活中的例子來形象理解一下:
s1 如果古代人a想獲取乙份救濟品,於是他向當地的行政員b寄了乙份申請信,這就是發起乙個資源請求。
s2 在經過一段路徑傳輸後,行政員b收到了申請(信),於是返回了某些資源(比如 救濟金 /救濟糧 /拒絕信等),這就叫做處理請求並響應
s3 在這過程中,a 和 b 之間很多方面都是有規則約束的(比如 a 申請信的格式 / b返回資源的格式 / 返回資源的多少 /傳輸路線的選擇等等)
所有這些規則的集合,就稱為`協議`
8tcp/ip 分層設計
從上面的例子可以看出,資源的傳輸(發出請求—傳遞請求—接到請求並處理—返回響應—傳輸響應—獲取響應並處理)其實是乙個很複雜的過程,需要考慮到許多不同方面因素,我們可以大致分為以下層次:
s1 應用層: 首先要明確 a向b 發起請求的 具體目的是什麼 (可能是要獲取救濟品/ 可能是要投訴**c/ ….)
s2 傳輸層: 其次要明確 a和b之間如何高效完整的 傳遞資訊/資源;
s3 網路層: 明確 傳輸路線
最關鍵的是要知道 ip位址和 mac位址
核心是 `路由選擇機制`
s4 鏈路層: 實際的物理道路/大橋等實體建築
分層的目的其實類似於分工,都是為了各司其職,互不干擾,從而提高效率,繼續舉例來說:
s1應用層——寫信人&信件的內容
: 不同的目的,信件的內容各不相同。但是只要負責寫好信件就可以;
s2傳輸層——信件/資源 加工處理站
: 包括切分信件/資源為 小塊,以便並行傳送 + 內容完整性驗證;
s3網路層——信件/資源 傳輸中轉站
: 明確 a 和 b 之間的傳輸路線;
s4鏈路層—— 實際派送人員
: 實際派送資源的人員
每過一層都會添上/去除 該層的首部資訊(http資料——tcp首部——ip首部——乙太網首部)
9tcp相關
:
tcp的三次握手原因
:
三次握手即是在最快最省力的情況下做出的選擇
比如在紅軍時代,a連和b連分在左右翼,約定在幾時幾分一同發起打擊。這個幾時幾分的資訊就需要人工通過通訊員來走路傳遞。
所以a連指揮官派出通訊員。這是第一次。
在tcp裡,就是 `傳送端 首先傳送乙個帶 syn標誌的資料報 給對方`
假設通訊員到達了b連,並且告知了b連指揮官幾時幾分,b連指揮官一定會讓通訊員再回去通知a連指揮官,
可憐的通訊員只能冒著危險返回a連,因為a連指揮官看不到通訊員返回的話,不知道幾時幾分這個資訊到底傳達到了b連沒有。
這是第二次。
在tcp裡,就是接收端收到後, 回傳乙個帶有 syn/ack標誌的資料報 以示傳達確認資訊
在b連指揮官開始擔心通訊員是否回到了a連,如果沒回到,b連指揮官會設身處地的想一想a連指揮官見不到返回的通訊員,肯定是不敢打的,
所以b連指揮官最盼望的是再次看到通訊員出現在b連,所以a連指揮官會讓通訊員再回b連一次。
這是第三次。
在tcp裡,就是傳送端再 回傳乙個帶 ack標誌的資料報,代表「握手」結束
這就是三次握手
總結圖如下:
10 uri 和 url
uri: 統一資源識別符號
由某個協議方案表示的 資源的定位字串
不同的協議方案,其獲取資源的語法等規則有區別
url: 統一資源定位符,是uri的子集。也就是一般我們輸入瀏覽器中的 網頁位址
絕對uri的格式:
其中, 檔案路徑: 類似於 伺服器上的檔案目錄結構
查詢字串: 用於確定 檔案路徑內的某一資源,形如 xx=yy
具體見下示意圖:
1 http協議 規範了客戶端和伺服器端間的通訊流程
:
s1 客戶端發起請求 —— s2 伺服器接收+處理請求,返回響應內容 —— s3 客戶端接收+處理響應,展示/使用 響應內容;
可參考 mdn的 典型的http會話
2 http 規定了通訊報文的內容+格式
:
s1 請求報文:
請求行: 請求方法 + 請求的資源內容(請求url: 相對url+host首部字段定位) + http協議版本;
請求首部字段
\空行(cr+lf)
請求內容實體
s2 響應報文: 狀態行:http協議版本 + 狀態碼 + 原因短語;
響應首部字段
\空行(cr+lf)
響應內容實體
可參考 mdn的 http訊息
3 http 規定了 自身是一種無狀態協議 + 持久連線
s1 為了實現保持狀態功能 —— `cookie技術`
s2 持久連線: http keep-alive, 只要任意一端沒有明確提出斷開連線,則保持 tcp連線狀態;
持久連線的好處是實現了管線化,從而可以 同時並行傳送多個請求
可參考:
mdn的 http cookies
mdn的 http/1.x 的連線管理
1 具體型別參見: mdn的 http請求方法
2 get和post請求的區別:
1 根本區別是兩者語義上的區別,get的語義是「獲取資料」,post的語義是「提交資料」;
2 get引數有長度限制(受限於url長度,具體數值取決於瀏覽器和伺服器限制),而post理論上沒有限制
3 get冪等+不改變伺服器狀態, post不冪等+改變伺服器狀態
4 get提交的資料會在url中顯示出來, 而post 是把提交的資料放在 http包的包體中
可參考
[get和post區別;](
[http協議中get和post方法的區別](
1 狀態碼的分類見圖:
2 常見的狀態碼含義
可參考
《**http》第4章
[http常見狀態碼;](
[mdn的 http響應**](
1 作用:
http首部字段 給瀏覽器/伺服器 提供了 報文主體大小/所使用的語言/認證資訊等額外資訊內容
2 語法結構:
首部欄位名: 字段值1,字段值2
3 型別:
分類一: 通用首部字段; 請求首部字段; 響應首部字段; 實體首部字段
分類二: 端到端首部; 逐跳首部
4 具體內容及含義
可參考
《**http》第5章
[mdn的 http headers](
其次,關於https和安全的部分,本文並未提及,以後會再單獨寫一篇博文。
2 mdn的 http目錄
3 如何生動的解釋ip位址、子網掩碼、閘道器等概念;
4 ip位址和mac位址的區別和聯絡是什麼;
5 怎樣生動描述 tcp 的「三次握手」;
HTTP基礎知識點小結
什麼是http協議?http,超文字傳輸協議是現在網際網路應用最為廣泛的協議,所有的www檔案都必須遵循這個標準設計這個最初的目的是為了發布和接收html檔案。http就是web通訊的基礎,就是為了能夠讓文件之間互相關聯可以進行互相傳閱。http協議在應用層。http協議的組成 http協議由htt...
HTTP協議小結
應答頭 說明allow 伺服器支援哪些請求方法 如get post等 content encoding content length 表示內容長度。只有當瀏覽器使用持久http連線時才需要這個資料。如果你想要利用持久連線的優勢,可以把輸出文件寫入bytearrayoutputstram,完成後檢視其...
Http 協議小結
1.請求行,狀態行只有一行 2.訊息頭由只有乙個部分 3.訊息頭與實體之間通過空行隔開 r n 4.可以存在多個實體部分,實體之間通過空行分開 在content type multipart form data的型別當中 5.連續兩個 r n只是乙個部分的分隔符 6.訊息頭,實體頭的格式 1.x 空...