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 程式語言開始。

沒有留言: