前言

想要从零基础成为一名资深的互联网Python开发工程师。有几个阶段是必须要进行的。第一个就是入门阶段俗称Python基础,目前在学习Python的众多人群当中,这一类的人是最多的。甚至有的朋友在这个阶段待了很久也没有实质性的突破。老师课上讲的都会,为什么自己就是想不到,为什么自己就是做不出来呢?

那么第一个阶段突破后就是第二个阶段。Python进阶,在这个阶段是真正把Python划分成了两种人群,一种是不太适合学习的,一种是比较适合学习的。因为在Python进阶这个阶段,你发现你要学习除了Python之外太多的技术了,例如网络编程、多线程多进程、数据库技术、数据分析、甚至是一些框架(Flask、Django、Scrapy...)。在这个阶段是为我们最后一个项目阶段做铺垫的。一个企业的项目用到的技术可不仅仅是Python的语法这么简单了,会Python这门语言只能是最基本的。所以,Python进阶阶段淘汰了很大一批想要做Python开发的人群。

阿喵今天就是来教一下大家Python网络编程相关的一些知识点。当然知识点没有罗列的那么全,大家也可以在此基础之上深入的学习。难道又要开始薅头发了嘛....

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:609616831

网络剖析

无状态协议

先来看一看http,它是超文本传输协议,数据在计算机中进行传输,必须要用到协议,在TCP/IP协议族中,http协议是最常见的。

http是一种无状态的协议, 什么是无状态协议呢?这里我们先对它来做一个解释。

无状态协议就是不保存状态。简单来理解就是,发送的请求和响应的报文信息不会保留, 只要有新的请求发送,就会有对应的新响应。这样做的好处就是能快速的处理大量事务

想成为Python开发必须知道的八个知识!

http属于无状态的协议,所以在这个里面引发出了一个问题。

比如现在我用python搭建了一个web网站,现在有一个用户,登录到了这网站页面,拿到了自己的个人用户信息。基于这个点,在用户信息里面再点击了其它的页面信息,很显然这里面的操作,需要继续保持这个登录的状态才能进行后续的操作。既然http属于无状态的协议,那么它是怎么解决这个问题的呢?

这里其实就用到了Cookie技术,使用Cookie就可以实现保持好这登录状态。用户进行请求的时候,在请求头里面会携带Cookie进行发送。

想成为Python开发必须知道的八个知识!

http这种无状态协议的方式,可以减少服务器的CPU以及内存资源的消耗。通过在请求和响应中写入Cookie信息来控制客户端的状态。当我请求之后,它到底是通过什么字段从服务器那边传过来的, 从图里面可以看出,是通过Set-Cookie传送过来的,同时也会通知客户端保存Cookie.

从这个get方法的响应头中就可以看到Set-Cookie的值

想成为Python开发必须知道的八个知识!

响应头字段表示的含义:

  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的有效性和资源更新的日期时间等。

想成为Python开发必须知道的八个知识!

状态码

在发送请求获取数据的时候,服务器会给一个状态码来提示客户端数据结果。借助状态码,用户就知道服务器是不是正常的处理了请求。

想成为Python开发必须知道的八个知识!

状态码有很多种,三位数字组成。第一位是它的响应类别。一般分为这5个大的种类。

  1.  
    1xx   信息状态码     接收的请求正在处理
  2.  
    2xx   成功状态码     请求正常处理
  3.  
    3xx   重定向状态码   要完成请求需要进行更进一步操作
  4.  
    4xx   客户端错误       服务器无法处理请求
  5.  
    5xx   服务器错误       服务器处理请求出错
  6.  
    复制代码

常见的状态码如下图

想成为Python开发必须知道的八个知识!

 

不管是用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.无法验证数据传输的完整性,数据被篡改了都不知道

想成为Python开发必须知道的八个知识!

做这样的窃听很简单,使用浏览器上面的抓包工具,对网络进行抓包,就可以看到大量的数据。

想成为Python开发必须知道的八个知识!

http的安全性

拿http的安全性作为讨论。在互联网上,网络可以连通到全世界,在TCP/IP协议族的工作机制中,基因里面就决定了线路上面的内容都可能被窥视到,哪怕是你加过密,那些加过密的通信数据也可能被看到,只是不能破解而已。所以加密的重要性就体现出来了。

加密可以防止信息被窃取,加密的处理方式常见的有这两种:第一种是通信加密,第二种是内容加密。

通信加密其实就是https的方式,内容加密还是用的http, 只不过是把它的传输内容加密了,也有些除了内容加密之外,接口也会进行加密,这个看需求来。内容加密之后即使被你抓到了数据包也没关系,看到的是一堆乱码,这种方式在涉及到敏感信息的传输时,会采用

通信加密

通信加密的过程是怎么实现的呢?http本身没有加密机制,它可以和SSL(安全套接层)组合起来一起使用,SSL是提供了加密处理的,它可以加密http的通信内容, 利用SSL建立安全通道,http就可以在这条通道里面安全的通信,这种组合就是https。

想成为Python开发必须知道的八个知识!

https之所以更加安全,是因为SSL不仅提供了加密的处理,同时还使用了证书来验证对方,这种证书是由可信赖的三方机构颁发的,它可以证明双方实际存在,而不是伪造的。

使用了证书之后,客户端的身份可以得到确认,服务端的身份也可以得到认证,就可以减少信息的泄露。有人可能会想到,证书要是被伪造了那咋办?这种可能性太低了,技术难度很大,所以可以放心。

想成为Python开发必须知道的八个知识!

内容的加密

另一种加密的方式内容的加密。http本身没加密机制,所以就会对传输的内容进行加密,加密之后再进行请求的发送。这里就引发出了一个问题,传输之前对内容进行了加密,服务器那边怎么去解密呢,所以它们之间要协商好加解密的方式。一般比较常见的是md5的方式,或者再加盐的方式都可以.内容加密这块在使用的时候,也要根据公司的业务需求来确定。

http和https的安全性对比,它们之间的区别和由来就是这些,如果要对https中的证书颁发过程做深入探讨,就要去学习互联网上常见的加解密方式了。当然在下一节也会对它进行探讨。

网络数据剖析

网络在开发中是至关重要的,很多人在写爬虫的时候,根本不知道抓包工具里面的数据包中字段的意思。网络的知识点很多,这章咱们暂且针对它的请求和传输做一个深入探讨。

先来看一个url地址:https://image.baidu.com/,打开抓包工具, 里面有一段请求的报文。分析这段报文,报文里面有请求行和各种首部字段。

想成为Python开发必须知道的八个知识!

请求行里面可以看到,是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,当我点搜索发送起请求的时候,界面上很快就给你呈现出了你要的东西,我们来对它进行解释。

想成为Python开发必须知道的八个知识!

说到这里就要提到TCP/IP, TCP/IP是协议族按层来划分,分为应用层,传输层,网络层,数据链路层。

首先会通过这个域名,会向本地的DNS服务器去获取ip地址,本地的DNS地址可以通过指令ipconfig -all来查询。也可以到你自己电脑,找到本地的hosts文件。

想成为Python开发必须知道的八个知识!

最初的互联网是整体的管理一份数据库文件hosts,这份文件里面有域名和IP地址的对应。只要新增一台,就要对这文件进行更新,很麻烦。所以搞了个系统来管理,就是DNS系统。

它在查询IP的时候,先到本地的DNS服务器查找,查不到再去根域名服务器查找。从这里也可以看出,有些黑客想对你电脑做些坏事,对DNS进行一些攻击或者做些欺骗手段,你所访问的网站都是他给你安排的。

想成为Python开发必须知道的八个知识!

拿到了IP地址之后,同时会对我们输入的python字符串进行编码,这个处理过程在应用层这块,其中http协议, DNS也属于这一层,它会把请求报文里面的首部字段携带一起进行发送,在应用层做完这些事情之后,会进行下一层的转发。

想成为Python开发必须知道的八个知识!

应用层处理完毕之后,来到传输层,传输层包含TCP, UDP等. 会在之前的应用层数据前给它添加TCP首部,添加完之后发送给IP。TCP首部里面包含了源端口号和目标端口号,主要是用于识别发送主机和接口主机。以及确定发送几个字节的序号,和校验。TCP主要干的事情,是将HTTP请求报文分割成报文段,按序号传出去。

想成为Python开发必须知道的八个知识!

接着来到网络层这块,IP也基于前面传过来的数据,添加自己的IP首部。IP首部里面包含了接收端的IP地址和发送端的IP地址,还有一个重要的信息就是用来判断TCP和UDP的数据。生成之后就发送给网络接口的驱动程序。发送到具体的接收方,还要知道接收方的Mac地址。

想成为Python开发必须知道的八个知识!

最后在链路层添加以太网的首部,里面包含了Mac地址以及类型的协议。

在这里建立连接之后,会有TCP的三次握手。IP协议起的作用,就是一边搜地址,一边转一边传报文段。同时TCP也会对接收的报文段按序列进行重组。这就是数据传输的整个过程。

想成为Python开发必须知道的八个知识!

知识无边界,同学们根据自身的工作和学习情况合理安排时间。找到自己的薄弱点,对症学习,掌握好方式方法,可以在短期内看到效果。不过学习还是一个长期积累的过程,切勿好高骛远,循序渐进才是长久之计。

这里还是要推荐下阿喵建的Python学习群:609616831,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2020最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!

想成为Python开发必须知道的八个知识!

相关文章: