最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

全部開(kāi)發(fā)者教程

Django 入門(mén)教程

課程導(dǎo)學(xué)
Django 慕課教程使用指南
Django開(kāi)發(fā)實(shí)戰(zhàn)
35 開(kāi)發(fā)實(shí)戰(zhàn)
首頁(yè) 慕課教程 Django 入門(mén)教程 Django 入門(mén)教程 05 HTTP 協(xié)議與網(wǎng)站基本開(kāi)發(fā)流程

HTTP 協(xié)議與網(wǎng)站基本開(kāi)發(fā)流程

上節(jié)課我們學(xué)習(xí)了 Web 開(kāi)發(fā)中必備的一些 HTML/CSS/JS 這一節(jié)中我們會(huì)繼續(xù)介紹下 Web 開(kāi)發(fā)中的一些基礎(chǔ)知識(shí),包括常用術(shù)語(yǔ)、HTTP 協(xié)議、 URL 的組成部分,以及網(wǎng)站運(yùn)行原理和開(kāi)發(fā)的流程。只有理解了這些基礎(chǔ)知識(shí),才能繼續(xù)后續(xù)的 Django 學(xué)習(xí)。

1. Web 服務(wù)中的常用術(shù)語(yǔ)

在正式開(kāi)始 Django 項(xiàng)目開(kāi)發(fā)之前,我們需要掌握一些 Web 開(kāi)發(fā)中常見(jiàn)的術(shù)語(yǔ)。Web 服務(wù)和網(wǎng)站在某種程度上是等價(jià)的,因此后面描述時(shí)并不區(qū)分這兩個(gè)概念。

  • 客戶(hù)端:用戶(hù)主機(jī)上運(yùn)行并連接到互聯(lián)網(wǎng)的應(yīng)用程序,一般而言是指瀏覽器。用戶(hù)通過(guò)瀏覽器實(shí)現(xiàn)和網(wǎng)站的數(shù)據(jù)交互;

  • 服務(wù):服務(wù)主要接受和處理來(lái)自互聯(lián)網(wǎng)的請(qǐng)求。服務(wù)一般部署在某臺(tái)主機(jī)上,監(jiān)聽(tīng)某個(gè)端口,等待用戶(hù)請(qǐng)求;

  • 域名:用于標(biāo)識(shí)一個(gè)或者多個(gè) IP 地址;

  • IP:互聯(lián)網(wǎng)協(xié)議地址?;ヂ?lián)網(wǎng)上的每臺(tái)計(jì)算機(jī)都有一個(gè) IP 地址,用于識(shí)別和通信。IP 地址由 4 組數(shù)組組成,以小數(shù)點(diǎn)分割,這些被稱(chēng)為邏輯地址;

  • DNS:域名系統(tǒng)服務(wù),主要用于網(wǎng)絡(luò)域名與 IP 地址的相互轉(zhuǎn)換;

  • ISP:互聯(lián)網(wǎng)服務(wù)提供商;

  • TCP/IP:傳輸控制協(xié)議 / 網(wǎng)際協(xié)議,是當(dāng)前互聯(lián)網(wǎng)使用的主要通信協(xié)議。

除了上述基礎(chǔ)術(shù)語(yǔ)之外,我們還有兩個(gè)非常重要的知識(shí)點(diǎn)需要掌握,分別是 HTTP 協(xié)議和 URL 的組成。

1.1 HTTP 協(xié)議

HTTP 協(xié)議,即超文本傳輸協(xié)議,是一個(gè)客戶(hù)端終端(用戶(hù))和服務(wù)器端(網(wǎng)站)請(qǐng)求和應(yīng)答的標(biāo)準(zhǔn)。這也是 Web 開(kāi)發(fā)基礎(chǔ)。因?yàn)榇蟛糠志W(wǎng)站或者 Web 服務(wù)的前后端交互幾乎都是走 HTTP 請(qǐng)求。HTTP 協(xié)議定義 Web 客戶(hù)端如何從 Web 服務(wù)器請(qǐng)求 Web 頁(yè)面,以及服務(wù)器如何把 Web 頁(yè)面?zhèn)魉徒o客戶(hù)端。

HTTP 協(xié)議采用了請(qǐng)求 / 響應(yīng)模型??蛻?hù)端向服務(wù)器發(fā)送一個(gè)請(qǐng)求報(bào)文,請(qǐng)求報(bào)文包含請(qǐng)求的方法、URL、協(xié)議版本、請(qǐng)求頭部和請(qǐng)求數(shù)據(jù)。服務(wù)器以一個(gè)狀態(tài)行作為響應(yīng),響應(yīng)的內(nèi)容包括協(xié)議的版本、成功或者錯(cuò)誤代碼、服務(wù)器信息、響應(yīng)頭部和響應(yīng)數(shù)據(jù)。

HTTP 協(xié)議有如下特點(diǎn):

  • 簡(jiǎn)單快速:客戶(hù)向服務(wù)器請(qǐng)求服務(wù)時(shí),只需傳送請(qǐng)求方法和路徑。由于 HTTP 協(xié)議簡(jiǎn)單,使得 HTTP 服務(wù)器的程序規(guī)模小,因而通信速度很快;

  • 靈活:HTTP 允許傳輸任意類(lèi)型的數(shù)據(jù)對(duì)象;

  • 無(wú)連接:無(wú)連接的含義是限制每次連接只處理一個(gè)請(qǐng)求。服務(wù)器處理完客戶(hù)的請(qǐng)求,并收到客戶(hù)的應(yīng)答后,即斷開(kāi)連接。采用這種方式可以節(jié)省傳輸時(shí)間;

  • 無(wú)狀態(tài):HTTP 協(xié)議是無(wú)狀態(tài)協(xié)議。無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒(méi)有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快。

在 HTTP/1.1 協(xié)議中共定義了八種方法(也叫 “動(dòng)作”)來(lái)以不同方式操作指定的資源,目前我們比較常見(jiàn)和常用的有以下四個(gè):

  • GET 請(qǐng)求:向指定的資源發(fā)出 “顯示 “請(qǐng)求。使用 GET 方法應(yīng)該只用在讀取數(shù)據(jù),而不應(yīng)當(dāng)被用于產(chǎn)生 “副作用” 的操作中。一般在瀏覽器中直接敲擊 URL 并按回車(chē)鍵是執(zhí)行的 GET 請(qǐng)求;

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

  • PUT 請(qǐng)求:從客戶(hù)端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容;

  • DELETE 請(qǐng)求:請(qǐng)求服務(wù)器刪除指定的頁(yè)面。

這四種請(qǐng)求和數(shù)據(jù)的增刪改查(CRUD) 可以看成是相對(duì)應(yīng)的,一般在設(shè)計(jì) URL 接口時(shí),也會(huì)默認(rèn)使用這樣特性,讓 GET 請(qǐng)求對(duì)應(yīng)查詢(xún)數(shù)據(jù)、POST 請(qǐng)求對(duì)應(yīng)數(shù)據(jù)的新增等等,這樣的接口設(shè)計(jì)出來(lái)才會(huì)具備良好的 Restful 風(fēng)格。

HTTP 請(qǐng)求通常會(huì)返回一個(gè)狀態(tài)碼,常見(jiàn)的 HTTP 狀態(tài)碼有:

  • 2xx:正確類(lèi)。表示用戶(hù)請(qǐng)求被正確接收、理解和處理;

    • 200 - 請(qǐng)求成功;
  • 3xx:重定向類(lèi)。表示沒(méi)有請(qǐng)求成功,必須采取進(jìn)一步的動(dòng)作;

    • 301 - 資源(網(wǎng)頁(yè)等)被永久轉(zhuǎn)移到其它 URL;

    • 302 - 資源臨時(shí)移動(dòng),資源只是臨時(shí)被移動(dòng),客戶(hù)端應(yīng)繼續(xù)使用原有 URI ;

  • 4xx:客戶(hù)端錯(cuò)誤。表示客戶(hù)端提交的請(qǐng)求包含語(yǔ)法錯(cuò)誤或不能正確執(zhí)行;

    • 400 - 往往是 Bad Request 錯(cuò)誤。是指請(qǐng)求的方法不對(duì);

    • 401 - 用戶(hù)沒(méi)有訪問(wèn)權(quán)限,需要進(jìn)行身份認(rèn)證;

    • 403 - 禁止訪問(wèn);

    • 404 - 資源不存在,Not Found 錯(cuò)誤;

  • 5xx:服務(wù)端錯(cuò)誤。一般是說(shuō)明服務(wù)器出現(xiàn)了問(wèn)題;

    • 503 - 服務(wù)端錯(cuò)誤,一般是服務(wù)器內(nèi)部處理異常。

實(shí)操: 用 curl 命令模擬發(fā)送 HTTP 請(qǐng)求。

[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 的中文名稱(chēng)為統(tǒng)一資源定位符。簡(jiǎn)單來(lái)說(shuō),它就是一個(gè)地址,是我們請(qǐng)求互聯(lián)網(wǎng)上某一個(gè)資源地址或者某一個(gè)服務(wù)接口的完整路徑。我們找一個(gè)網(wǎng)站的實(shí)際 URL 例子,來(lái)說(shuō)明下完整 URL 的組成部分:

圖片描述

URL 示例

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

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

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

  • port:不寫(xiě)會(huì)使用默認(rèn)端口,非默認(rèn)地址一定要寫(xiě)明端口號(hào)。本例中使用默認(rèn)端口 443

  • path:資源地址,會(huì)有多個(gè) / 表示路徑層級(jí)。本例中的路徑為 /class/evaluation/393.html;

  • query-string:如果 URL 帶參數(shù),放到 ? 之后, # 號(hào)之前,使用 key=value 形式,多個(gè)參數(shù)之間使用 & 進(jìn)行連接。本例中的參數(shù)是 ?page=5;

  • 錨點(diǎn):或稱(chēng)片段(fragment),HTTP 請(qǐng)求不包括錨部分,從 # 開(kāi)始到最后,都是錨部分。本例中的錨部分是 Log。錨部分不是一個(gè) URL 必須的部分。

2. 網(wǎng)站運(yùn)行原理

在了解上面這些基本術(shù)語(yǔ)后,我們介紹下當(dāng)在瀏覽器中敲下 www.baidu.com 這個(gè) URL,到百度返回給我們搜索首頁(yè),這個(gè)過(guò)程中究竟發(fā)生了哪些事情?

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

  • 客戶(hù)端先檢查本地是否有對(duì)應(yīng)的 IP 地址,若找到則返回響應(yīng)的 IP 地址。若沒(méi)找到則請(qǐng)求在 ISP 的 DNS 服務(wù)器上。如果還沒(méi)找到,則請(qǐng)求會(huì)被發(fā)向根域名服務(wù)器,直到找到對(duì)應(yīng)的 IP 地址;

  • 瀏覽器在 DNS 服務(wù)器中找到對(duì)應(yīng)域名的 IP 地址,然后結(jié)合 URL 中的端口(沒(méi)有指明端口則使用默認(rèn)端口,HTTP 協(xié)議的默認(rèn)端口是 80,HTTPS 的默認(rèn)端口是 443) 組成新的請(qǐng)求 URL,并與百度的 Web 服務(wù)建立 TCP 連接;

  • 瀏覽器根據(jù)用戶(hù)操作向百度的 Web 服務(wù)器發(fā)送 HTTP 請(qǐng)求;

  • Web 服務(wù)器接收到該請(qǐng)求后會(huì)根據(jù)請(qǐng)求的路徑查找對(duì)應(yīng)的 Web 資源并返回;

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

3. 網(wǎng)站開(kāi)發(fā)的基本流程

技術(shù)發(fā)展至今,隨著各類(lèi) Web 框架的出現(xiàn),一周甚至幾天上線(xiàn)一個(gè)網(wǎng)站已經(jīng)不再是夢(mèng)。但是想要做好一個(gè)大型網(wǎng)站,同樣是不容易的?,F(xiàn)在來(lái)談一下正規(guī)公司的網(wǎng)站,也即 Web 服務(wù)開(kāi)發(fā)的一個(gè)大致流程,基本如下:

  • 項(xiàng)目需求分析:產(chǎn)品經(jīng)理在拿到項(xiàng)目之后,需要和架構(gòu)師一起進(jìn)行需求分析、架構(gòu)的設(shè)計(jì),這一步非常重要,沒(méi)有理清需求,后面只會(huì)越做越亂;沒(méi)有好的架構(gòu)設(shè)計(jì),后續(xù)上線(xiàn)后會(huì)面臨各種嚴(yán)重問(wèn)題,比如沒(méi)有使用主備數(shù)據(jù)庫(kù)模式,可能存在數(shù)據(jù)丟失風(fēng)險(xiǎn)等到。此外,一個(gè)正規(guī)的網(wǎng)站都需要有自己的域名,一定數(shù)量的服務(wù)主機(jī)等到,這些都是事先規(guī)劃好的。當(dāng)然,也要求網(wǎng)站架構(gòu)能支持后端服務(wù)的水平擴(kuò)展;

  • 規(guī)劃網(wǎng)站頁(yè)面并設(shè)計(jì)網(wǎng)站草圖:這一步最好有一個(gè)美工團(tuán)隊(duì)專(zhuān)門(mén)負(fù)責(zé)。美工出圖,程序員負(fù)責(zé)實(shí)現(xiàn);

  • 網(wǎng)站開(kāi)發(fā)階段:如果架構(gòu)是前后端分離,那么前端和后端服務(wù)可以同時(shí)開(kāi)工,兩不耽誤。往往有了清晰的需求后,代碼實(shí)現(xiàn)起來(lái)是比較快速的;

  • 測(cè)試和上線(xiàn):正常情況下,開(kāi)發(fā)完成之后會(huì)有一個(gè)測(cè)試團(tuán)隊(duì)對(duì)網(wǎng)站各方面功能進(jìn)行嚴(yán)格測(cè)試,然后將 bug 單交給開(kāi)發(fā)團(tuán)隊(duì)返工。開(kāi)發(fā)團(tuán)隊(duì)修改完后,繼續(xù)由測(cè)試團(tuán)隊(duì)進(jìn)行測(cè)試,如此循環(huán)直到問(wèn)題被掃平,便可以正式部署和上線(xiàn);

  • 最后便是網(wǎng)站的維護(hù)和推廣:網(wǎng)站上線(xiàn)后也會(huì)遇到很多問(wèn)題,比如競(jìng)爭(zhēng)對(duì)手的惡意 DDOS 攻擊,網(wǎng)站被人掛馬、釣魚(yú)以及用戶(hù)訪問(wèn)量過(guò)大后導(dǎo)致服務(wù)癱瘓等等,此時(shí)需要運(yùn)維人員定期檢查網(wǎng)站運(yùn)行狀態(tài),保證線(xiàn)上環(huán)境的穩(wěn)定運(yùn)行,同時(shí)也需要對(duì)網(wǎng)站進(jìn)行 SEO 和推廣吸引客流。

4. 小結(jié)

今天我們介紹了 Web 編程的相關(guān)術(shù)語(yǔ),重點(diǎn)介紹了 HTTP 協(xié)議和 URL。接下來(lái),我們介紹了網(wǎng)站的一個(gè)運(yùn)行原理和開(kāi)發(fā)的基本流程,有了這些知識(shí)儲(chǔ)備后,我們就可以正式開(kāi)始學(xué)習(xí) Django 了。