[ week 4 ] HTTP協定


Posted by vick12052002 on 2020-07-15

HTTP 是什麼

超文本傳輸協定(英語:HyperText Transfer Protocol,縮寫:HTTP)是一種用於分佈式、協作式和超媒體訊息系統的應用層協定。HTTP是全球資訊網的資料通信的基礎。
設計 HTTP 最初的目的是為了提供一種發布和接收 HTML 頁面的方法。透過 HTTP 或者 HTTPS 協定請求的資源由統一資源識別碼(Uniform Resource Identifiers,URI)來標識。來源:維基百科

之前有提到 Protocol 是協定的意思,可以把協定看成「 規則,且這個規則是雙方需要遵守的格式、條件、資料標準 」,HTTP 就是一個網頁前後端在溝通時,必須遵守的一個規範,而他的使用範圍是全球資訊網路。

HTTP vs HTTPS

超文本傳輸安全協定(英語:HyperText Transfer Protocol Secure,縮寫:HTTPS;常稱為HTTP over TLS、HTTP over SSL或HTTP Secure)是一種透過計算機網路進行安全通訊的傳輸協定。HTTPS經由HTTP進行通訊,但利用SSL/TLS來加密封包。HTTPS開發的主要目的,是提供對網站伺服器的身分認證,保護交換資料的隱私與完整性。出自:維基百科

跟去上文 , S 是 Secure ,HTTPS 相較 HTTP 更安全,附上說明
HTTP不是安全的,而且攻擊者可以透過監聽和中間人攻擊等手段,取得網站帳戶和敏感訊息等。HTTPS的設計可以防止前述攻擊,在正確組態時是安全的。出自:維基百科

而 HTTP 是網路協定套組中,應用層的其中一個協定,每一層都有很多不同功能的協定。往後我們會提到網路協定套組中的每一層及每層包含哪些協定。

網際網路協議(英語:Internet Protocol Suite,縮寫IPS)
是一個網路通訊模型,以及一整個網路傳輸協定家族,為網際網路的基礎通訊架構。

常被通稱為TCP/IP協定套組(英語:TCP/IP Protocol Suite,或TCP/IP Protocols),簡稱TCP/IP。 出自:維基百科


HTTP request

提到 HTTP request ,我們就來模擬一下,「 假設我今天去 Google 首頁搜尋框打上:JavaScrit 並且按下 Enter,請說出從這一刻開始到我看到搜尋結果為止發生在背後的事情。」

預設我們使用的 DNS Server 是 google 提供 IP 位置為 8.8.8.8

前提 ( 瀏覽器到 google 首頁 )

  1. 瀏覽器一開始在網址欄中,輸入 google.com 這個域名
  2. 瀏覽器去 google 所提供的 DNS Server,IP 為 8.8.8.8,要求 google.com 這個域名實際的 IP 位置
  3. DNS Server 回傳 IP 為 172.217.160.78 給瀏覽器
  4. 瀏覽器接受到 response 後,瀏覽器發 Request 給 172.217.160.78 ,告訴他我要讀取他的 html、css、JavaScript 等文件
  5. 172.217.160.78 回傳文件內容
  6. 瀏覽器開始解析、渲染回傳的文件內容( 包含 html、css、JavaScript )
  7. 瀏覽器顯示 google.com 的頁面

上面步驟中瀏覽器發送 request 給 server ,這就是依據 HTTP ,而電腦、瀏覽器(只要是發送 request 要求的那一方),就稱為 client 。
如圖:
HTTP request圖片源自NET101 網路基礎概論


HTTP request % respond 傳什麼

  • client 與 Server,相互傳遞的格式,內容包含 「 headers 、 body 」
  • hearder 包含 request methods 動作 、code status 狀態碼、
  • body 主要為 method詳細要做什麼、文件內容

DNS Service

在 mac 的 termial 中有個nslookup ___域名___的指令,可以查詢該域名的 IP 位置


HTTP request method

對於 HTTP 來說這些名詞為動詞的用法,常見的用法為 GET、PUT、 POST、DELIETE、PATCH ,最常使用的方法則為 「 GET、 POST」,以下使用訂飲料會發生的事情作為範例:
情境:我在訂飲料的平台,準備要訂飲料給家人喝

GET:取得指定資源 (我要什麼菜單)

POST:提交指定資源的 body (我要訂多多綠 X 2、烏龍綠 X 1)

PUT:取代指定資料,(我不要多多綠、烏龍綠了,改梅子青茶 X 1、奶茶 X 1)

PATCH:取代部分指定資料 (我修改奶茶的數量,奶茶 X 3)

DELIETE:刪除指定資源 (我棄單)

HEAD:與 GET 用法相同,但只回傳 headers 的資料

OPTION:可查看該資料,可使用的 method


HTTP status code 狀態碼

狀態碼由三個數字組成,大致可以分為五種狀態,由第一個數字可先判斷是哪種狀態:

1 開頭 - request 已經接收,但 client 端需要進行一些處理,較少見
2 開頭 - 成功

  • 200 OK:最常見,表示請求成功
  • 204 No Content:request 成功,但沒有返回內容,ex.發 DELETE XX的 resquest,respond 狀態碼就會是204(刪除成功,但沒有資訊返回))

3 開頭 - 重新導向

  • 301 Moved Permanently:請求資源「 永久 」已搬家,當 request 回傳 301,他會紀錄最新的地址在哪裡,下次 request 就會讀取紀錄
  • 302 Found:請求資源「暫時」已搬家
    *

4 開頭 - 用戶端錯誤,ex.格式、語法錯誤、請求太大

  • 404 Not Found : 找不到資源

5 開頭 - 伺服器錯誤

  • 500 Internal Server Error : 找不到資源
  • 503 Service Unavailable : 臨時伺服器過載(搶票時)

總結

  1. HTTP 只是一個協定
  2. 瀏覽器只是一個程式,因此會有些限制,但這些限制僅止於瀏覽器上,並非 HTTP 或 Server 限制,

資料來源

  1. lidemy-NET101 網路基礎概論(搭配 JS 實作練習)
  2. miahsu-第六週 網路基礎-HTTP、Request、Response
  3. 維基百科-TCP/IP協定套組
  4. 維基百科-超文本傳輸協定
  5. 維基百科-HTTPS

#HTTP #HTTPS #request #respond #status code







Related Posts

[FE102] Part 2

[FE102] Part 2

CSS保健室|為什麼position:sticky不起作用?

CSS保健室|為什麼position:sticky不起作用?

[進階 js 09] Closure & Scope Chain

[進階 js 09] Closure & Scope Chain


Comments