1、講解Python Web開發,必定離不開HTTP。有多少人知道HTTP的工作流程呢?
2、我們訪問網站,網站伺服器把內容反饋給我們。網站伺服器是什麼?
3、都說HTTP網站不安全,要變成HTTPS的。如何建立HTTPS網站?
本文就針對以上問題做簡單解答,更詳細的內容請閱讀
《Python高效開發實戰――Django、Tornado、Flask、Twisted(第3版)》
一書。
PART.
1
HTTP流程
HTTP是Web瀏覽器與Web伺服器之間通訊的標準協議,是Internet上能夠可靠地交換檔案的重要基礎。HTTP的基本互動流程如圖1所示。
圖1 HTTP的基本互動流程
每個HTTP站點都有一個伺服器程序監聽著TCP的HTTP埠,HTTP埠預設為80,也可由伺服器程序設定為其他埠。
當伺服器發現有客戶端建立連線並提交了一個 HTTP 請求(Request)後,就根據請求的內容執行相應的操作,並將結果返回給客戶端(Response)。
通常客戶在瀏覽器中發起一次網路訪問的步驟如下。
(1)
輸入網址並按Enter鍵,比如訪問http://mysite:8080/app/index。html。
(2)
瀏覽器透過域名系統查詢mysite的真實IP,比如212。34。98。20。
(3)
向伺服器212。34。98。20的8080埠發起TCP連線請求並建立連線。
(4)
傳送HTTP請求的內容,包括訪問的地址/app/index。html、訪問方式GET、瀏覽器本身的產品名等。
(5)
伺服器返回/app/index。html中的資料作為Response傳送給客戶端。如果請求的不是一個檔案,則伺服器需要執行相應的程式碼,動態生成且返回給客戶端。
(6)
瀏覽器接收到結果後關閉與伺服器的TCP連線。
(7)
瀏覽器將接收到的結果呈現在顯示器上。
注意:域名解析本身不是HTTP的一部分,客戶端應在向伺服器建立TCP連線之前就透過DNS伺服器完成域名解析工作。
以上是最典型的HTTP流程,當今的HTTP版本還允許客戶端在一次HTTP請求完成後不關閉TCP連線,以便第2次傳送HTTP請求時複用該連線,從而達到減少系統整體開銷的目的,此技術在HTTP中叫作keep-alive。
PART.
2
基於HTTP的網站開發
經過幾十年的發展,已經出現幾個成熟的處理HTTP的知名Web伺服器。
這些Web伺服器可以解析(handle)HTTP,當Web伺服器接收到一個HTTP請求時,會根據配置的內容返回一個靜態HTML頁面或者呼叫某些程式碼動態生成返回結果。
Web伺服器把動態響應(dynamic response)產生的委託(delegate)給其他一些程式,例如Python程式碼、JSP(JavaServer Pages)指令碼、Servlets、ASP(Active Server Pages)指令碼等。
無論它們的目的如何,這些伺服器端(server-side)的程式通常會產生一個HTTP響應讓瀏覽器瀏覽。
由於目標作業系統、應用場景及商業目的的不同,當今主流的Web伺服器各有特色,將它們的特性簡單地概括如下。
Apache:
是世界上用得最多的Web伺服器,市場佔有率達60%左右。由於其卓越的效能,Tomcat或JBoss等很多其他Web伺服器使用Apache為自己提供HTTP介面服務。
Nginx:
是一款輕量級、高效能的HTTP和反向代理伺服器。因它的穩定性、豐富的功能集、示例配置檔案和低系統資源的消耗而聞名。
IIS:
微軟的Web伺服器產品。由於Windows的影響,IIS是目前最流行的Web伺服器產品之一,它的最大優勢當然是對微軟ASP。net及其周圍產品的支援。
Tomcat:
是一個開源伺服器,是Java Servlet 2。2和JavaServer Pages 1。1技術的標準實現。
JBoss:
是一個管理EJB的容器和伺服器,支援EJB 1。1、EJB 2。0和EJB 3的規範。但JBoss的核心服務不包括支援Servlet、JSP的Web容器,一般與Tomcat或Jetty繫結使用。
當前的主流Web伺服器都實現了主流語言的可呼叫介面標準,這些標準如下。
CGI:
Common Gateway Interface,CGI規範允許Web伺服器執行外部程式,並將它們的輸出傳送給Web瀏覽器,CGI將Web的一組簡單的靜態超媒體文件變成一個完整的新的互動式媒體。
ISAPI:
Internet Server Application Program Interface,是微軟提供的一套面向Web服務的API介面,它能實現CGI提供的全部功能,並在此基礎上進行了擴充套件,例如提供了過濾器應用程式的介面。
WSGI:
Web Server Gateway Interface,是一套專為Python語言制定的網路伺服器標準介面。本書將要學習的Python Web框架均以WSGI為基礎標準。
從客戶端瀏覽器的角度來看,它的每次訪問是透過HTTP訪問Web伺服器從而獲得某種服務(下載檔案、檢視頁面、訂購商品等)的,但實際上Web伺服器僅起到橋樑的作用,即將瀏覽器的HTTP請求解碼,轉換成伺服器端程式能夠識別的介面呼叫方式,然後將伺服器端程式生成的返回封裝成HTTP Response,並返回給瀏覽器。
伺服器端程式、Web伺服器、客戶端之間的關係如圖2所示。
圖2 伺服器端程式
最簡單的伺服器端程式可以是直接讀取某檔案或返回固定的網頁內容;稍複雜一些的伺服器端程式需要處理客戶端透過HTTP、URL、HTML中傳入的引數、動態執行邏輯程式碼、在資料庫或快取中讀寫資料等一系列操作,才能最終生成呼叫結果。
PART.
3
實戰演練
建立安全的HTTPS網站
普通HTTP站點的協議與資料以明文方式在網路上傳輸,而HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)是以安全為目標的HTTP通道,即在HTTP下加入SSL層,透過SSL達到資料加密及身份認證的功能。
目前幾乎所有的銀行、證券、公共交通的網站均以HTTPS方式搭建。
OpenSSL是一個強大的免費Socket層密碼庫,蘊含了主要的密碼演算法、常用的金鑰和證書封裝管理功能及SSL協議。目前大多數網站透過OpenSSL工具包搭建HTTPS站點,其步驟如下。
在伺服器中安裝OpenSSL工具包。
生成SSL金鑰和證書。
將證書配置到Web伺服器。
在客戶端安裝CA證書。
本節演示在Linux Ubuntu下OpenSSL的使用方法,以及Nginx在Linux下的證書配置方式。
Windows中OpenSSL的使用方式與Linux中的完全一致,讀者可以自行嘗試。
1.在伺服器中安裝OpenSSL工具包
透過如下兩條命令安裝OpenSSL:
命令執行成功後,OpenSSL命令和配置檔案將被安裝到Linux系統目錄中。
OpenSSL命令:
/usr/bin/openssl。
配置檔案:
/usr/lib/ssl/*。
2.生成SSL金鑰和證書
透過如下步驟生成CA證書ca。crt、伺服器金鑰檔案server。key和伺服器證書server。crt:
3.配置Nginx HTTPS伺服器
在站點配置檔案/etc/nginx/sites-enabled/default中新增如下server段,可以定義一個基於HTTPS的介面,該介面的伺服器端程式仍舊為uWSGI介面127。0。0。1:3011。
其中需要注意的是引數ssl_certificate和ssl_certificate_key需要分別指定生成的伺服器證書和伺服器金鑰的全路徑檔名。
至此,我們已經可以使用瀏覽器訪問伺服器的443埠進行HTTPS加密通訊了。
再也不用為如何學習Python迷茫了,
《Python高效開發實戰——Django、Tornado、Flask、Twisted(第3版)》
一書本著“純碎乾貨,實用至上”的原則,讓我們成為真正的全棧開發人才。
▊《
Python高效開發實戰——Django、Tornado、Flask、Twisted(第3版)
》
劉長龍 著
暢銷書Python Web程式設計集大成之作,全面升級
Python 3。8、Django 3、Tornado 6、Flask 1。1。2、Twisted 20
作者多年Python專案實踐經驗及程式碼編寫技巧分享
助你零基礎完成網站搭建、資料庫設計、前後端開發
本書分為3篇:上篇是Python基礎,帶領初學者實踐Python開發環境,掌握基本語法,同時對網路協議、Web客戶端技術、資料庫建模等網路程式設計基礎進行深入淺出的學習;中篇是Python框架,學習當前***的Python Web框架,即Django、Tornado、Flask和Twisted,達到對各種Python網路技術融會貫通的目的;下篇是Python框架實戰,分別使用4種框架進行專案實踐,利用其各自的特點開發適用於不同場景的網路程式。本書內容精練、重點突出、例項豐富、講解通俗,是廣大網路應用設計和開發人員不可多得的一本參考書。
(京東滿100減50,快快搶購吧!)