亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

首頁 慕課教程 Django 入門教程 Django 入門教程 05 HTTP 協議與網站基本開發流程

HTTP 協議與網站基本開發流程

上節課我們學習了 Web 開發中必備的一些 HTML/CSS/JS 這一節中我們會繼續介紹下 Web 開發中的一些基礎知識,包括常用術語、HTTP 協議 URL 的組成部分,以及網站運行原理和開發的流程。只有理解了這些基礎知識,才能繼續后續的 Django 學習。

1. Web 服務中的常用術語

在正式開始 Django 項目開發之前,我們需要掌握一些 Web 開發中常見的術語。Web 服務和網站在某種程度上是等價的,因此后面描述時并不區分這兩個概念。

  • 客戶端:用戶主機上運行并連接到互聯網的應用程序,一般而言是指瀏覽器。用戶通過瀏覽器實現和網站的數據交互;

  • 服務:服務主要接受和處理來自互聯網的請求。服務一般部署在某臺主機上,監聽某個端口,等待用戶請求;

  • 域名:用于標識一個或者多個 IP 地址;

  • IP:互聯網協議地址?;ヂ摼W上的每臺計算機都有一個 IP 地址,用于識別和通信。IP 地址由 4 組數組組成,以小數點分割,這些被稱為邏輯地址;

  • DNS:域名系統服務,主要用于網絡域名與 IP 地址的相互轉換;

  • ISP:互聯網服務提供商;

  • TCP/IP:傳輸控制協議 / 網際協議,是當前互聯網使用的主要通信協議。

除了上述基礎術語之外,我們還有兩個非常重要的知識點需要掌握,分別是 HTTP 協議和 URL 的組成。

1.1 HTTP 協議

HTTP 協議,即超文本傳輸協議,是一個客戶端終端(用戶)和服務器端(網站)請求和應答的標準。這也是 Web 開發基礎。因為大部分網站或者 Web 服務的前后端交互幾乎都是走 HTTP 請求。HTTP 協議定義 Web 客戶端如何從 Web 服務器請求 Web 頁面,以及服務器如何把 Web 頁面傳送給客戶端。

HTTP 協議采用了請求 / 響應模型??蛻舳讼蚍掌靼l送一個請求報文,請求報文包含請求的方法、URL、協議版本、請求頭部和請求數據。服務器以一個狀態行作為響應,響應的內容包括協議的版本、成功或者錯誤代碼、服務器信息、響應頭部和響應數據。

HTTP 協議有如下特點:

  • 簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。由于 HTTP 協議簡單,使得 HTTP 服務器的程序規模小,因而通信速度很快;

  • 靈活:HTTP 允許傳輸任意類型的數據對象;

  • 無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間;

  • 無狀態:HTTP 協議是無狀態協議。無狀態是指協議對于事務處理沒有記憶能力。缺少狀態意味著如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。

在 HTTP/1.1 協議中共定義了八種方法(也叫 “動作”)來以不同方式操作指定的資源,目前我們比較常見和常用的有以下四個:

  • GET 請求:向指定的資源發出 “顯示 “請求。使用 GET 方法應該只用在讀取數據,而不應當被用于產生 “副作用” 的操作中。一般在瀏覽器中直接敲擊 URL 并按回車鍵是執行的 GET 請求;

  • POST 請求:向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST 請求可能會導致新的資源的建立和 / 或已有資源的修改;

  • PUT 請求:從客戶端向服務器傳送的數據取代指定的文檔的內容;

  • DELETE 請求:請求服務器刪除指定的頁面。

這四種請求和數據的增刪改查(CRUD) 可以看成是相對應的,一般在設計 URL 接口時,也會默認使用這樣特性,讓 GET 請求對應查詢數據、POST 請求對應數據的新增等等,這樣的接口設計出來才會具備良好的 Restful 風格。

HTTP 請求通常會返回一個狀態碼,常見的 HTTP 狀態碼有:

  • 2xx:正確類。表示用戶請求被正確接收、理解和處理;

    • 200 - 請求成功;
  • 3xx:重定向類。表示沒有請求成功,必須采取進一步的動作;

    • 301 - 資源(網頁等)被永久轉移到其它 URL;

    • 302 - 資源臨時移動,資源只是臨時被移動,客戶端應繼續使用原有 URI ;

  • 4xx:客戶端錯誤。表示客戶端提交的請求包含語法錯誤或不能正確執行;

    • 400 - 往往是 Bad Request 錯誤。是指請求的方法不對;

    • 401 - 用戶沒有訪問權限,需要進行身份認證;

    • 403 - 禁止訪問;

    • 404 - 資源不存在,Not Found 錯誤;

  • 5xx:服務端錯誤。一般是說明服務器出現了問題;

    • 503 - 服務端錯誤,一般是服務器內部處理異常。

實操: 用 curl 命令模擬發送 HTTP 請求。

[root@server ~]# curl -I -XGET http://www.baidu.com/index.html
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: keep-alive
Content-Length: 2381
Content-Type: text/html
Date: Sun, 08 Mar 2020 14:36:01 GMT
Etag: "588604c8-94d"
Last-Modified: Mon, 23 Jan 2017 13:27:36 GMT
Pragma: no-cache
Server: bfe/1.0.8.18
Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/

1.2 URL 介紹

URL 的中文名稱為統一資源定位符。簡單來說,它就是一個地址,是我們請求互聯網上某一個資源地址或者某一個服務接口的完整路徑。我們找一個網站的實際 URL 例子,來說明下完整 URL 的組成部分:

圖片描述

URL 示例

這個慕課網上的完整的 URL 地址為: https://coding.imooc.com/class/evaluation/393.html?page=5#Log。URL 的格式如下:

schema://host[:port]/path…/[?query-string]#fragment
  • schema:表示協議,常見的有 http/https 協議,還有 ftp 協議,ws/wss 協議(websocket)等等;

  • host:域名或者直接是 IP 地址。本例子使用的是慕課網的一個子域名:coding.imooc.com;

  • port:不寫會使用默認端口,非默認地址一定要寫明端口號。本例中使用默認端口 443

  • path:資源地址,會有多個 / 表示路徑層級。本例中的路徑為 /class/evaluation/393.html

  • query-string:如果 URL 帶參數,放到 ? 之后, # 號之前,使用 key=value 形式,多個參數之間使用 & 進行連接。本例中的參數是 ?page=5;

  • 錨點:或稱片段(fragment),HTTP 請求不包括錨部分,從 # 開始到最后,都是錨部分。本例中的錨部分是 Log。錨部分不是一個 URL 必須的部分。

2. 網站運行原理

在了解上面這些基本術語后,我們介紹下當在瀏覽器中敲下 www.baidu.com 這個 URL,到百度返回給我們搜索首頁,這個過程中究竟發生了哪些事情?

  • 解析輸入 URL 中包含的信息,比如 HTTP 協議和域名 (baidu.com);

  • 客戶端先檢查本地是否有對應的 IP 地址,若找到則返回響應的 IP 地址。若沒找到則請求在 ISP 的 DNS 服務器上。如果還沒找到,則請求會被發向根域名服務器,直到找到對應的 IP 地址;

  • 瀏覽器在 DNS 服務器中找到對應域名的 IP 地址,然后結合 URL 中的端口(沒有指明端口則使用默認端口,HTTP 協議的默認端口是 80,HTTPS 的默認端口是 443) 組成新的請求 URL,并與百度的 Web 服務建立 TCP 連接;

  • 瀏覽器根據用戶操作向百度的 Web 服務器發送 HTTP 請求;

  • Web 服務器接收到該請求后會根據請求的路徑查找對應的 Web 資源并返回;

  • 最后客戶端瀏覽器將這些返回的 Web 信息 (包括圖片、HTML 靜態頁面,JS 等)組織成用戶可以查看的網頁形式,最后就得到了我們熟悉的那個 百度一下,你就知道 的搜索主頁了。

3. 網站開發的基本流程

技術發展至今,隨著各類 Web 框架的出現,一周甚至幾天上線一個網站已經不再是夢。但是想要做好一個大型網站,同樣是不容易的。現在來談一下正規公司的網站,也即 Web 服務開發的一個大致流程,基本如下:

  • 項目需求分析:產品經理在拿到項目之后,需要和架構師一起進行需求分析、架構的設計,這一步非常重要,沒有理清需求,后面只會越做越亂;沒有好的架構設計,后續上線后會面臨各種嚴重問題,比如沒有使用主備數據庫模式,可能存在數據丟失風險等到。此外,一個正規的網站都需要有自己的域名,一定數量的服務主機等到,這些都是事先規劃好的。當然,也要求網站架構能支持后端服務的水平擴展;

  • 規劃網站頁面并設計網站草圖:這一步最好有一個美工團隊專門負責。美工出圖,程序員負責實現;

  • 網站開發階段:如果架構是前后端分離,那么前端和后端服務可以同時開工,兩不耽誤。往往有了清晰的需求后,代碼實現起來是比較快速的;

  • 測試和上線:正常情況下,開發完成之后會有一個測試團隊對網站各方面功能進行嚴格測試,然后將 bug 單交給開發團隊返工。開發團隊修改完后,繼續由測試團隊進行測試,如此循環直到問題被掃平,便可以正式部署和上線;

  • 最后便是網站的維護和推廣:網站上線后也會遇到很多問題,比如競爭對手的惡意 DDOS 攻擊,網站被人掛馬、釣魚以及用戶訪問量過大后導致服務癱瘓等等,此時需要運維人員定期檢查網站運行狀態,保證線上環境的穩定運行,同時也需要對網站進行 SEO 和推廣吸引客流。

4. 小結

今天我們介紹了 Web 編程的相關術語,重點介紹了 HTTP 協議和 URL。接下來,我們介紹了網站的一個運行原理和開發的基本流程,有了這些知識儲備后,我們就可以正式開始學習 Django 了。