網路基礎概論-http協定
client 與 server
在瀏覽器傳遞資料的過程,傳遞資訊的兩端稱之為『客戶端』(client)與『伺服器端』(server)
客戶端(client)
瀏覽器網頁端會發送『request』到server端,客戶端負責會發起連線,發送一個或者多個請求給伺服器。這邊的rquest包含了 head與body,這邊之後會說明。
伺服器端(server)
伺服器端負責監聽 (listen) 與接受 (accept)/拒絕 (reject) 連線,並送回 一或多個 回應 (response),換言之,伺服器收到『request』後,會開始解析請求的內容,然後回應『response』到client客戶端,這邊包含回傳head與body,接著瀏覽器會開始渲染(render),解析後將html、css、js、圖片等等相關資訊,呈現到網頁上。
其他-使用者代理(User agent)
HTTP 只是傳輸『協定』,並無規範使用方式,使用的程式,除了瀏覽器,還有:命令列工具
爬蟲(Webcrawler)、手機 APP、各種通訊設備、家電用品…,任一這些 Client 程式,又稱為
User Agent (使用者代理),其比 Client 一詞,更明確地指向『 代表使用者發起請求的
在google搜尋框按下enter後
- DNS 將 URL 轉換成實際的 IP Address,Browser 將 IP Address 包成一個 Request 送出去。
- Request 透過 Internet 傳送到 Server 。
- 收到 Request 的 Server 會跑去 Data center 撈取資料。
- 將撈取到的資料透過 Internet Response 回去。
- Browser 解析資料並印於 Browser 上。
IP Address
在這個協定裡面有一個 IP Address ,就是我們在網路上的網址,別人可以從這個地址訪問到你的電腦。因此我們平常說 小心我查你IP!!
是簡化 IP Address 的說法。有分為以下幾種類型:
- 固定 IP:不會變、固定的 IP,基本上公司企業及伺服器都是使用固定 IP,這樣才能確保使用者可以連上伺服器。
- 浮動 IP:在每次連上網的時候 IP 位置都會不一樣,普通的使用者跟家用電腦大部分都是浮動 IP。
- 虛擬 IP:僅能使用於內部網路(或者說是區域網路內),外網是連不上的。
Request與Response?
Request是指瀏覽器或者程式發送的 http請求,包含了以下幾點:
- method
- URL + parameters
- Headers
- Message body(get沒有,但是 post requests有)
Response使只伺服器收到reaponse後,回傳給瀏覽器或者程式的http response,包含以下幾點:
- response headers
- response body:內容可以是任何格式,例如html或者Json
HTTP的協定
- HTTP是一種網路協定的方式(HyperText Transfer Protocol,中文為超文本傳輸協定)
- 是全球資訊網的通訊基礎,當我們在上網或網頁前端跟後端做溝通時就要遵照 HTTP 「協定」
- 預設 port :80
- body與head
HTTPS
- 全名 HyperText Transfer Protocol Secure,中文為超文本傳輸安全協定
- 由於 HTTP 一直都有安全性的問題,因此 HTTPS 就是基於 HTTP 並利用 SSL/TLS 將資訊加密封包的另一種更安全的協定。
- 預設 port :443
[補充說明] 為什麼 HTTP 不安全
- HTTP 傳遞是使用明文的方式並不具備加密的功能,所以無法對內容進行加密。
- 不會對 client 端與 server 進行驗證,無法確定兩端是否為正確的(小明傳給小美的信可能中途被小王攔截)
HTTP method是一種規則
標準化的內容
根據 HTTP 通訊協定其中的內容 Request & Response 有標準化內容格式,並且都包含了 header 和 body。
- 標準化內容格式
- 分為 header 跟 body
- 用狀態碼標準化結果 (Http status code)
- 用動詞標準化請求方法 (Http Request Method)其實這四個其實就是 HTTP 通訊協定的內容。
head
- 大部分會包含:
- IP 位置
- Http Request Method 狀態碼
- Http status code 請求方法
- 其他額外資訊也會放在這裡,例如:Client-ID、User-Agent、Authorization 等。#在 API 串接時會使用到。
body
- 主要傳遞的內容,但也有可以沒有內容。
Http Request Method
在早期 http 1.1 為了區分 Request 不同的用途,使用動詞標準化讓 Server 能清楚辨別 Request 的目的,定義了八種 Method,最常見的 Method 為 Get 及Post。其他還有 GET、HEAD、PUT、OPTIONS、POST、TRACE、DELETE、CONNECT
Get
- 單純的跟 server 要一個連結或圖片,通常網頁都是 Get 的 request 比較多
- 傳送資料以QUERY STRING(key/value編碼方式),加在URL網址列上,以?問號的方式作為連接
- 最常使用的 Method
- 例如:要去某個網址、看某張圖片
- 傳送的資料會以 Query String 的方式加在 url 上
Post
- 需要執行一些動作時,會傳送 Post request
- 例如:登入會員、送出表單
- 獲取「指定的」資訊,放在 request body(Form data)裡面(資訊會放在body meaasge)
其他的 HTTP Request Method
- Put :取代掉整個 request。
- Patch:修改部分 request。
- Delete:刪除資源。
- Head:只要獲取 request 的 header,不要 body。
- Option:可以了解 server 提供哪些溝通方法。
Http status code 狀態碼
1xx:指示資訊。表示收到 Web 瀏覽器請求,正在進一步的處理中
2xx:成功。表示請求已經被正確接收,並已經被理解和接受,例如:200 OK
3xx:重新導向。表示請求沒有成功,必須採取進一步的動作以完成請求
4xx:客戶端錯誤。表示客戶端提交的請求中有錯誤或者不能被完成,例如:404 NOT found,代表請求中引用的檔案不存在
5xx:伺服器錯誤。表示伺服器不能完成請求的處理,儘管請求是正確的,例如:500 Internal Server Error,代表伺服器遇到了一個未曾預料的狀況,通常是伺服器的程式碼出錯
詳細的狀態碼,可參考
https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Status