[筆記] 傳紙條與 HTTP 基本概念
傳紙條
告白篇
- 來源
- 目的地
- 三次前置作業,確保收發功能(三次握手:確定發送、接收功能正常)
訂便當
- 格式統一
- 特殊需求(頭-特殊資訊、身體-內容)
- 回覆格式:以數字/狀態碼回應 200、300、400、404、500、503(也有頭-數字、身體-內容)
- 不同動作:GET POST DELET PUT
發大財
- 統一服務代碼:80、3000、4000、5000……
- 格式簡化:對不同服務可以有不同格式
- 加速:有些服務不用確認如 streaming
- 地址、校名:ip Domain
- 為何需要協定(protocol)?
為了讓人能夠溝通,需要規範,所以其實語言就是一種 protocol 啦!?
HTTP 是什麼
H [超] T[文本] T[傳輸] P[協定]!!!
它是一個「協定」,我們要做的事情是去瞭解它的「規則」。
HTTP 屬於網路分層中的「應用層」(Application),每層都有相關的「協定」,這個到 TCP/IP 的部分會更詳細的討論。
HTTP request 與 response
client ---request---> server |
以瀏覽器為例:
我們在網址列輸入 https://www.google.com
瀏覽器幫我們傳一個 Request 到 server(幫我們寫紙條)
Request 差不多長這樣(在每個瀏覽器上會有些不同):
(因為是 GET 所以只有 head 沒有 body):authority: www.google.com
:method: GET
:path: /
:scheme: https
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9
..................................................server 會回傳一個帶有 HTML 原始碼的 Response。(完成紙條上的要求)
瀏覽器接收到這個 Response 然後渲染(render)出來。
DNS
網路世界的郵差,進行 IP 與 Domain Name 的轉換、翻譯。
DNS 伺服器也有分層,company > isp > country > root
可以用 nslookup
查看IP 與 Domain Name 的對照。
一個神奇的檔案:/etc/hosts
裡面寫有電腦預設的 IP / Domain Name 對照表
瀏覽器與其它
除了瀏覽器可以傳送 request 與接收 response 之外,我們也可以自已寫程式完成這個任務。
使用 request 這個套件就可以寫出一個這樣的 node 程式。
(node 也有內建函式可以用。http.request(url[, options][, callback])
)
GET、POST 與其它
執行什麼動作:
- GET:最常使用,用於取得資料,通常不會有 request body,只需要 header
- POST:傳送資料,通常會有 request body,body 內容為要向伺服器傳送的資料
- DELETE:刪除資料
- PUT:會完全取代所選取的資料
- PATCH:單純對所選取的資料做某些內容的修改、或增加內容
- OPTIONS:會回傳可以用的方法。(例如:Allow: GET,POST)有點像是一個可執行動作的查詢功能。
HTTP 狀態碼
常見 HTTP 狀態碼:
1XX:Server 正在做事情。
2XX:
- 204 處理了,但是不需回應,(如 DELETE)
3XX:
- 301 Location: XXXX 瀏覽器會記住 LOC (永久移動)
- 302 (暫時移動)
4XX:
- 404 沒有
- 418 查無
5XX:server錯誤
- 500
- 503
Google 418
Huli 418
維基百科 - HTTP 狀態碼
超簡單 HTTP Server
const http = require('http') |