認識 HTTP
Published in
4 min readOct 22, 2022
Hi,不專業工程師是我~時隔 N 個月,終於想起來要來寫寫技術文。由於一直都在準備資訊安全相關的考試,發現自己對於電腦網路的知識實在太差勁,剛好重新複習並用自己的話寫出來分享給大家~請不吝指教!
Hyper Text Transfer Protocol,HTTP,應該是最廣泛使用的傳輸協定了,是用來傳輸資料的協定,其後因應資訊科技發展,多了加密存取機制進而誕生了 HTTPS, S = Secure。
HTTP 的運作
- Client to Web server → 以 client 是瀏覽器為例,瀏覽器會跟伺服器端先建立連線,建立連線則是以傳輸層的 TCP 作為溝通協定,通常 http 會走 TCP 的 80 port。
- http request → 在建立連線後,client 會向 server 發出請求,請 server 回覆我們所需要的東西。瀏覽器的話就是要回 html、javascript….要呈現的資料。
- http response → 收到 client 的 request 後,給予回應,如果有相對應的資訊就提供,沒有的話就回覆 error,同時會帶有 http status code 如 200、404…
- release connection → 如果 server 端模式設定為 closed 會由 server 端主動關閉 TCP 連線;keep-alive 則會保持連線一段時間
- parse content → 同樣以瀏覽器為例,client 端收到 response 後,則依照 HTML 內容顯示畫面
HTTP 封包
- start line → 區分是哪一種封包:request or response。
request → request-line: method / request-target / http-version。中間用空白(space, SP)隔開。
response → status-line:http-version / status-code / reason-phase。中間用空白(space, SP)隔開。 - header line → 不一定要使用,裡面會帶一些 client / server 的資訊。可能有多行,以
CR LF
換行。 - entity body → 不一定會使用,是主要用來放資料的地方。(常見的用法會放
payload
在裡面,可能是 XML / Json…) - start line 與 header line之間沒有空行(
CR LF
),header line 與 entity body 則有。
METHOD 方法
GET
請求資源使用,大部分我們在瀏覽網頁的時候用的是這個,跟伺服器要資料的時候也是用它。POST
使用POST
通常是在我們用來新增資料或是提交資料的時候使用,例如登入。HEAD
顧名思義用來取得 header 使用。PUT
用來修改資料或是覆蓋資料時使用,但使用它時通常會完整上傳整份資料,佔用資源較多,於是後來有衍生出PATCH
做部分更新使用。
如果是上傳 server 沒有的資料,根據用途,也可能會拿來作為新增使用。DELETE
就是刪除指定的資源。TRACE
請 server 回傳我們發出的 request 用來測試居多。CONNECT
當瀏覽器使用 proxy 的時候會用到,由瀏覽器先跟代理伺服器建立連線取得Connection Established
在接續後面作業。OPTIONS
當開發時,我們可以透過OPTIONS
來確認這個 url 有哪些 method 可以使用。
STATUS CODE 狀態碼
1xx
表示收到 request 或是正在處理。2xx
表示成功,大部分都會回200
。3xx
表示redirect
需要謹慎使用。(尤其是301/308
會將資源永久轉址)4xx
表示 client 的輸入有誤,造成 request 異常。如404
、400
5xx
表示 server error。 如500
、502