2017/12/31
第十二天:從瀏覽器認識 HTTP 協定( 2018 iT邦幫忙鐵人賽-只要有心,人人都可以作卡米狗 )
markdown
# 複習 HTTP 協定
我們在[第六天:認識網站](https://ithelp.ithome.com.tw/articles/10193664),安裝了chrome瀏覽器,並且在[第九天:作一個最簡單的 Rails 網站](https://ithelp.ithome.com.tw/articles/10194359)成功架好一個 Rails 網站。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRBpBQJf3MdaAk2bH5YQjq3bkppb1uZSr1Sq1QQBiok4gm92Er6mrovpzRuUnIGv8bNo-vSwkdy1AxfBcZQtVpsMXb5K76jwC1qCsYsEElr2s4uTjkvMeLkiOzlCVQ4yA0aIVpZ8m69UQ/s1600/01.PNG)
我們可以透過 Chrome 的開發人員工具來觀察瀏覽器開啟一個網頁的過程。
# 認識 Chrome 開發人員工具
從昨天結束的地方繼續,先開啟 rails server 之後開啟 [http://localhost:3000/](http://localhost:3000/)。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhafsjC9nYu_Ny_ewgmxFBJjUoNxBNbYSdbIdPWQ6gL_h9IhutFMp0nShUoXCjyX16Q3c7ftU_aRaU28rTQ_BkmZ1UVraMTxsYxnNyb-hbzy4iqLmMHnuO9UKNrxfg7VzTJIWCnmUPCVO8/s1600/2.jpg)
按下 `F12` 或 `Ctrl`+`Shift`+`I`,就可以叫出開發人員工具。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrSPig9FPhwZ-cU-7EpbwruiHZuDfOYmc3HO4QTMKN-ounYN_TlIHtVcM4MLbXx2tzdQ59nOUPk6uBpniFwX23e3_Hr6TgcaogRyX5miQIOnas9CHgc6gVWAcLwx1fqvG2D0tb0buow2w/s1600/3.jpg)
這個畫面有點複雜,總之先按這裡的`X`,把多餘的部分關掉。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3YwITuKS6eMQD4yjJeuEUz2O8Qxmw3giG0QXscoV0bcm5VrgF7tX_7VWRAHndJWr4bXMRJv5yvuHx8S5MXXH9HKX8l-IuYKIqpUaujPJKuTj4wxisHeCTuImUhijZ4AzV6v62Ok13Yog/s1600/4.jpg)
按了之後應該會看起來像這樣:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsATxBJVctvQ08sFjB646pCwJY1bYK_KS0Nj-ypEQFEj_werFsAq6GWgFwVj1AIhHU-vO3T74YsWYlvGHmz4pYTu3iBJN1nu3P-yavkc9Ckc0O_i0YzBw9KaXeYTpnAV_oLamE7pV4-K4/s1600/5.jpg)
開發人員工具有很多的功能,我們只需要用到其中的一小部分,這裡就不一一介紹。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUzDFLMuM_5XGNNwL9VM7hqTPr17oLWV0QdJRWxDJ5Ir_SvO0TsrpmqR3UFTMsbeVxRco7p2hOF4LJrZGhCwvdO3kDT3aPAL2Yekrrz4LN-pT7TodSJ80Git3N2W1XbIoWqHcp78yTKA8/s1600/6.png)
請先切換到 `Network` 分頁。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioJoXW2mZMLEMWmfQ3yBosSgcbKGYt1SoI1-n9VsXuuLErSQVCWTW4cFS12VD5QnojlHiXNiAwRhaz8LKeQCJWkEzDj5KwKY5dd6sDCvENGmINhlc28hf7-ueZLyPDCkp_fpup9zVtVdI/s1600/7.jpg)
一個複雜的介面,但是什麼資料都沒有顯示,那是因為開發人員工具開啟後才會開始監控數據,所以我們要重開網頁,這裡按下 `Ctrl`+`R`。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1K1JUg-CDO35iZSq0BwNmDvgMVyHjbEo8SMFGmxf1PHC50a-QdAQFkzIYzNk7ssR1sKFdRJQsKp80tFsYy8wKzCHtW7fBxTDHsKqSIVv5_JkdoMIkcEvj6HB4SNWRzTLvDzCyqR2VK8Q/s1600/8.jpg)
出現了兩筆資料,一個是 `localhost`,另一個是 `favicon.ico`,我們點 `localhost`。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLecZjpMhTMLm1OsmdKZROvapSeOlqLe8lK0H4DI9v2b55Z18Cll08ETAZBp5WgmQpzlY6tafXVlPl1dVxXLc-EVXb06dTiGKxtxHfmmLhzUffQRGHyoefTcQhS9TPjNkqMud6MEGILJo/s1600/9.jpg)
我們看見這裡有四個分頁:`Headers`、`Preview`、`Response`、`Timing`,我們只需要認識 `Headers` 和 `Response`。
# Headers
`Headers` 這裡的資料也很多,我們只需要認識其中的三項:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3WuslVYMRKDFOQdFBohdxaRMvOkrV11MxxXytKoEcUCGkANhyGDXpDPVXtEnQ1thenCInGR0j1-F6VO3OMlsFRv7Xq8qexI55_m5cb0zxLLGXgDUhxKG_Hz3wNo8f65ve7L1ZBDWH2WQ/s1600/10.jpg)
- Request URL:http://localhost:3000/
- Request Method:GET
- Status Code:304 Not Modified
接下來就一項一項講解。
### Request URL
請求網址:就是你在瀏覽器上輸入的網址,因為你輸入的是 http://localhost:3000/,所以他顯示 http://localhost:3000/。
### Request Method
請求方法:瀏覽器希望網頁伺服器做些什麼事,我們這裡是用 `GET` 是表示我們想要下載檔案。
除了 `GET` 之外,還有其他的請求方法可以使用,比方說 `POST`、`PUT`、`DELETE`,以下是各個請求方法的用途:
- GET:下載檔案
- POST:上傳資料
- PUT:更新資料
- DELETE:刪除資料
舉個例:當你想在論壇發文,你把文章標題和內文填好,按下送出時,那就應該是一個 POST 請求方法。
依照目前可公開的情報,我們只需要知道 `GET` 和 `POST` 即可。
### Status Code
狀態碼:是網頁伺服器用一個數字來表示瀏覽器提出的請求最後有沒有完成,如果沒有,為什麼沒有。其實提款機也有類似的東西,叫做[訊息代碼](http://www.bot.com.tw/services/atmmsg.htm)。
當然這個[狀態碼](https://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81)列出來會有很多,但因為我們只是要做一個聊天機器人,不需要認識全部,我們現階段只認識必須認識的那些。最主要的是你必須知道有狀態碼的存在,當你知道有狀態碼這種東西時,你需要相關資訊時就能在 Google 搜尋時輸入正確的關鍵字。
正式版說明:
- 200:表示成功。
- 304:表示瀏覽器已經有一模一樣的檔案。
- 400:瀏覽器發出的請求被網頁伺服器拒收,通常是發出的請求格式不正確。
- 404:找不到網頁。
- 500:網頁伺服器掛了。
網頁伺服器擬人:
- 200:網頁伺服器:「好哦~好哦~」
- 304:網頁伺服器:「你手上的檔案是最新的。」
- 400:網頁伺服器:「駁回!」
- 404:網頁伺服器:「你想找的東西不在我這。」
- 500:網頁伺服器:「阿阿我要壞掉惹。」
# Response
又稱為 Response Body(回應內容):指的是網頁伺服器回應給瀏覽器的內文部分。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4MNfiIqOj4driKfxH6seWwnNo3HF2AHfZvnpLBD0zYFn9sLR27F77hu1UKdz_rIJNivbHA-GhDiQcWBS8yjqmQ5bF1Vct1YCh4lqbIJZi2A7bEaXdcrEodRlXrSB-M5Q2x8ez9oudZbE/s1600/11.jpg)
其實就是檔案內容的部分。
# HTTP 總結
- 由瀏覽器發給網頁伺服器的請求稱為 HTTP Request,HTTP Request 包含 Header 和 Body。
- 由網頁伺服器回應瀏覽器的請求稱為 HTTP Response,HTTP Response 也包含 Header 和 Body。
- Request Header 中的 Request Method 表示瀏覽器希望網頁伺服器做些什麼事。
- Response Header 中的 Status Code 表示網頁伺服器告訴瀏覽器事情辦好沒。
接下來我們從網頁伺服器的角度來觀察 HTTP Request 和 HTTP Response,但這需要寫點程式,所以我們明天會先從認識 Ruby 程式語言開始。
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言