想成為Python開發必須知道的八個知識!


前言

想要從零基礎成為一名資深的互聯網Python開發工程師。有幾個階段是必須要進行的。第一個就是入門階段俗稱Python基礎,目前在學習Python的眾多人群當中,這一類的人是最多的。甚至有的朋友在這個階段待了很久也沒有實質性的突破。老師課上講的都會,為什么自己就是想不到,為什么自己就是做不出來呢?

那么第一個階段突破后就是第二個階段。Python進階,在這個階段是真正把Python划分成了兩種人群,一種是不太適合學習的,一種是比較適合學習的。因為在Python進階這個階段,你發現你要學習除了Python之外太多的技術了,例如網絡編程、多線程多進程、數據庫技術、數據分析、甚至是一些框架(Flask、Django、Scrapy...)。在這個階段是為我們最后一個項目階段做鋪墊的。一個企業的項目用到的技術可不僅僅是Python的語法這么簡單了,會Python這門語言只能是最基本的。所以,Python進階階段淘汰了很大一批想要做Python開發的人群。

阿喵今天就是來教一下大家Python網絡編程相關的一些知識點。當然知識點沒有羅列的那么全,大家也可以在此基礎之上深入的學習。難道又要開始薅頭發了嘛....

很多人學習python,不知道從何學起。
很多人學習python,掌握了基本語法過后,不知道在哪里尋找案例上手。
很多已經做案例的人,卻不知道如何去學習更加高深的知識。
那么針對這三類人,我給大家提供一個好的學習平台,免費領取視頻教程,電子書籍,以及課程的源代碼!
QQ群:609616831

網絡剖析

無狀態協議

先來看一看http,它是超文本傳輸協議,數據在計算機中進行傳輸,必須要用到協議,在TCP/IP協議族中,http協議是最常見的。

http是一種無狀態的協議, 什么是無狀態協議呢?這里我們先對它來做一個解釋。

無狀態協議就是不保存狀態。簡單來理解就是,發送的請求和響應的報文信息不會保留, 只要有新的請求發送,就會有對應的新響應。這樣做的好處就是能快速的處理大量事務

http屬於無狀態的協議,所以在這個里面引發出了一個問題。

比如現在我用python搭建了一個web網站,現在有一個用戶,登錄到了這網站頁面,拿到了自己的個人用戶信息。基於這個點,在用戶信息里面再點擊了其它的頁面信息,很顯然這里面的操作,需要繼續保持這個登錄的狀態才能進行后續的操作。既然http屬於無狀態的協議,那么它是怎么解決這個問題的呢?

這里其實就用到了Cookie技術,使用Cookie就可以實現保持好這登錄狀態。用戶進行請求的時候,在請求頭里面會攜帶Cookie進行發送。

http這種無狀態協議的方式,可以減少服務器的CPU以及內存資源的消耗。通過在請求和響應中寫入Cookie信息來控制客戶端的狀態。當我請求之后,它到底是通過什么字段從服務器那邊傳過來的, 從圖里面可以看出,是通過Set-Cookie傳送過來的,同時也會通知客戶端保存Cookie.

從這個get方法的響應頭中就可以看到Set-Cookie的值

響應頭字段表示的含義:

  1.  
    Server:                服務器版本
  2.  
    content-type           文本的類型
  3.  
    Transfer-Encoding      報文主體傳輸編碼方式
  4.  
    connection             長連接
  5.  
    X-Powered-By           編程語言用的版本
  6.  
    Cache-Control          不緩存
  7.  
    Date                   創建報文的日期時間
  8.  
    set-cookie             服務器給你傳了個cookie
  9.  
    復制代碼

get和post方法

get方法跟post就不做過多的介紹,它們之間的區別來做下對比。除了它們之外,還有put,head等。

  • 數據特點:get方法沒有請求體,長度大小有限制。post方法有請求體,大小沒有限制。

  • 安全性:數據傳輸get方法沒post請求安全,get方法的參數在地址欄可以看到參數。

head方法

它在我們的使用中,head方法是很少見的。它跟get方法類似,只是不返回對應的響應體部分。它可以確定url的有效性和資源更新的日期時間等。

狀態碼

在發送請求獲取數據的時候,服務器會給一個狀態碼來提示客戶端數據結果。借助狀態碼,用戶就知道服務器是不是正常的處理了請求。

狀態碼有很多種,三位數字組成。第一位是它的響應類別。一般分為這5個大的種類。

  1.  
    1xx   信息狀態碼     接收的請求正在處理
  2.  
    2xx   成功狀態碼     請求正常處理
  3.  
    3xx   重定向狀態碼   要完成請求需要進行更進一步操作
  4.  
    4xx   客戶端錯誤       服務器無法處理請求
  5.  
    5xx   服務器錯誤       服務器處理請求出錯
  6.  
    復制代碼

常見的狀態碼如下圖

 

不管是用python來做web后端,還是其它的語言。在網絡這塊始終離不開一個共性的問題 ,就是信息傳輸的安全性問題。信息在互聯網上進行傳輸,任何地方都存在通信內容被竊聽的可能, 那我們是怎么去保證它們通信的安全性呢,其中離不開的就是https

網絡安全

不管是用python來做web后端,還是其它的語言。在網絡這塊始終離不開一個共性的問題 ,就是信息傳輸的安全性問題。信息在互聯網上進行傳輸,任何地方都存在通信內容被竊聽的可能, 那我們是怎么去保證它們通信的安全性呢,其中離不開的就是https

https就是在http后面多加了個s,簡單理解就是加密的。要具體對它進行學習,得回顧下前面學過的http這塊了,如果有對http這塊不熟悉的小伙伴,可以去翻看下前面寫過的python網絡這塊的內容,結合起來學習更容易理解。

先來看看http的優缺點,以及了解它在進行通信的時候會帶來的問題, 就知道為什么https會安全些了。

http

http優點:

  • 1.傳輸速度快,非常的靈活。
  • 2.是無狀態協議,可以減少服務器的CPU以及內存資源的消耗。
  • 3.每次連接只處理一個請求,處理完之后就斷了,減少資源消耗。

http缺點:

  • 1.不能進行大量數據的傳輸。
  • 2.通信的時候使用的是明文,所以導致信息容易被竊聽,安全性差。
  • 3.通信的時候,不驗證身份。如:(python爬蟲里面,添加一個ua就可以偽裝成瀏覽器進行欺騙)
  • 4.無法驗證數據傳輸的完整性,數據被篡改了都不知道

做這樣的竊聽很簡單,使用瀏覽器上面的抓包工具,對網絡進行抓包,就可以看到大量的數據。

http的安全性

拿http的安全性作為討論。在互聯網上,網絡可以連通到全世界,在TCP/IP協議族的工作機制中,基因里面就決定了線路上面的內容都可能被窺視到,哪怕是你加過密,那些加過密的通信數據也可能被看到,只是不能破解而已。所以加密的重要性就體現出來了。

加密可以防止信息被竊取,加密的處理方式常見的有這兩種:第一種是通信加密,第二種是內容加密。

通信加密其實就是https的方式,內容加密還是用的http, 只不過是把它的傳輸內容加密了,也有些除了內容加密之外,接口也會進行加密,這個看需求來。內容加密之后即使被你抓到了數據包也沒關系,看到的是一堆亂碼,這種方式在涉及到敏感信息的傳輸時,會采用

通信加密

通信加密的過程是怎么實現的呢?http本身沒有加密機制,它可以和SSL(安全套接層)組合起來一起使用,SSL是提供了加密處理的,它可以加密http的通信內容, 利用SSL建立安全通道,http就可以在這條通道里面安全的通信,這種組合就是https。

https之所以更加安全,是因為SSL不僅提供了加密的處理,同時還使用了證書來驗證對方,這種證書是由可信賴的三方機構頒發的,它可以證明雙方實際存在,而不是偽造的。

使用了證書之后,客戶端的身份可以得到確認,服務端的身份也可以得到認證,就可以減少信息的泄露。有人可能會想到,證書要是被偽造了那咋辦?這種可能性太低了,技術難度很大,所以可以放心。

內容的加密

另一種加密的方式內容的加密。http本身沒加密機制,所以就會對傳輸的內容進行加密,加密之后再進行請求的發送。這里就引發出了一個問題,傳輸之前對內容進行了加密,服務器那邊怎么去解密呢,所以它們之間要協商好加解密的方式。一般比較常見的是md5的方式,或者再加鹽的方式都可以.內容加密這塊在使用的時候,也要根據公司的業務需求來確定。

http和https的安全性對比,它們之間的區別和由來就是這些,如果要對https中的證書頒發過程做深入探討,就要去學習互聯網上常見的加解密方式了。當然在下一節也會對它進行探討。

網絡數據剖析

網絡在開發中是至關重要的,很多人在寫爬蟲的時候,根本不知道抓包工具里面的數據包中字段的意思。網絡的知識點很多,這章咱們暫且針對它的請求和傳輸做一個深入探討。

先來看一個url地址:https://image.baidu.com/,打開抓包工具, 里面有一段請求的報文。分析這段報文,報文里面有請求行和各種首部字段。

請求行里面可以看到,是get請求,協議用的是http/1.1的協議 先簡單來啰嗦一個基本的問題,這是url地址的格式組成。協議://主機地址/路勁https是協議,image.baidu.com這是主機地址,也是域名。后面是接路徑,路徑后面接參數,有些url地址很多人看不懂路徑后面那些符號是啥意思。

其他的參數

url分析完之后,請求報文中這些字段分別代表的含義,會通過請求發送給其它服務器

  1.  
    1.accept            客戶端可以處理的類型
  2.  
    2.accept-language   優先支持中文
  3.  
    3.User-Agent        瀏覽器的標識
  4.  
    4.Accept-Encoding   優先的壓縮方式
  5.  
    5.Host              主機地址
  6.  
    6.connection        長連接
  7.  
    7.Cache-Control     緩存控制
  8.  
    8.cookie            服務器生成的cookie
  9.  
    復制代碼

通信過程

幾個參數了解了之后,在發送請求的時候進行通信,計算機之間會做些什么事情呢。比如現在在文本框輸入python,當我點搜索發送起請求的時候,界面上很快就給你呈現出了你要的東西,我們來對它進行解釋。

說到這里就要提到TCP/IP, TCP/IP是協議族按層來划分,分為應用層,傳輸層,網絡層,數據鏈路層。

首先會通過這個域名,會向本地的DNS服務器去獲取ip地址,本地的DNS地址可以通過指令ipconfig -all來查詢。也可以到你自己電腦,找到本地的hosts文件。

最初的互聯網是整體的管理一份數據庫文件hosts,這份文件里面有域名和IP地址的對應。只要新增一台,就要對這文件進行更新,很麻煩。所以搞了個系統來管理,就是DNS系統。

它在查詢IP的時候,先到本地的DNS服務器查找,查不到再去根域名服務器查找。從這里也可以看出,有些黑客想對你電腦做些壞事,對DNS進行一些攻擊或者做些欺騙手段,你所訪問的網站都是他給你安排的。

拿到了IP地址之后,同時會對我們輸入的python字符串進行編碼,這個處理過程在應用層這塊,其中http協議, DNS也屬於這一層,它會把請求報文里面的首部字段攜帶一起進行發送,在應用層做完這些事情之后,會進行下一層的轉發。

應用層處理完畢之后,來到傳輸層,傳輸層包含TCP, UDP等. 會在之前的應用層數據前給它添加TCP首部,添加完之后發送給IP。TCP首部里面包含了源端口號和目標端口號,主要是用於識別發送主機和接口主機。以及確定發送幾個字節的序號,和校驗。TCP主要干的事情,是將HTTP請求報文分割成報文段,按序號傳出去。

接着來到網絡層這塊,IP也基於前面傳過來的數據,添加自己的IP首部。IP首部里面包含了接收端的IP地址和發送端的IP地址,還有一個重要的信息就是用來判斷TCP和UDP的數據。生成之后就發送給網絡接口的驅動程序。發送到具體的接收方,還要知道接收方的Mac地址。

最后在鏈路層添加以太網的首部,里面包含了Mac地址以及類型的協議。

在這里建立連接之后,會有TCP的三次握手。IP協議起的作用,就是一邊搜地址,一邊轉一邊傳報文段。同時TCP也會對接收的報文段按序列進行重組。這就是數據傳輸的整個過程。

知識無邊界,同學們根據自身的工作和學習情況合理安排時間。找到自己的薄弱點,對症學習,掌握好方式方法,可以在短期內看到效果。不過學習還是一個長期積累的過程,切勿好高騖遠,循序漸進才是長久之計。

這里還是要推薦下阿喵建的Python學習群:609616831,群里都是學Python的,如果你想學或者正在學習Python ,歡迎你加入,大家都是軟件開發黨,不定期分享干貨(只有Python軟件開發相關的),包括我自己整理的一份2020最新的Python進階資料和零基礎教學,歡迎進階中和對Python感興趣的小伙伴加入!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM