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 首頁 )
- 瀏覽器一開始在網址欄中,輸入 google.com 這個域名
- 瀏覽器去 google 所提供的 DNS Server,IP 為 8.8.8.8,要求 google.com 這個域名實際的 IP 位置
- DNS Server 回傳 IP 為 172.217.160.78 給瀏覽器
- 瀏覽器接受到 response 後,瀏覽器發 Request 給 172.217.160.78 ,告訴他我要讀取他的 html、css、JavaScript 等文件
- 172.217.160.78 回傳文件內容
- 瀏覽器開始解析、渲染回傳的文件內容( 包含 html、css、JavaScript )
- 瀏覽器顯示 google.com 的頁面
上面步驟中瀏覽器發送 request 給 server ,這就是依據 HTTP ,而電腦、瀏覽器(只要是發送 request 要求的那一方),就稱為 client 。
如圖:
圖片源自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 : 臨時伺服器過載(搶票時)
總結
- HTTP 只是一個協定
- 瀏覽器只是一個程式,因此會有些限制,但這些限制僅止於瀏覽器上,並非 HTTP 或 Server 限制,