今天给大家讲解一下Python网络编程篇

前言

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

本期推送整理了初学者可能会用到的Python资料,含有书籍/视频/在线文档和编辑器/源
代码,关于Python的安装qun:850973621

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

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

今天给大家讲解一下Python网络编程篇_第1张图片

网络剖析

无状态协议

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

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

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

今天给大家讲解一下Python网络编程篇_第2张图片

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

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

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

今天给大家讲解一下Python网络编程篇_第3张图片

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

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

[图片上传失败…(image-2e73d-1609221905821)]

响应头字段表示的含义:

`Server:                服务器版本
content-type           文本的类型
Transfer-Encoding      报文主体传输编码方式
connection             长连接
X-Powered-By           编程语言用的版本
Cache-Control          不缓存
Date                   创建报文的日期时间
set-cookie             服务器给你传了个cookie
复制代码`

get和post方法

get方法跟post就不做过多的介绍,它们之间的区别来做下对比。除了它们之外,还有put,head等。

  • 数据特点:get方法没有请求体,长度大小有限制。post方法有请求体,大小没有限制。

  • 安全性:数据传输get方法没post请求安全,get方法的参数在地址栏可以看到参数。

head方法

它在我们的使用中,head方法是很少见的。它跟get方法类似,只是不返回对应的响应体部分。它可以确定url的有效性和资源更新的日期时间等。

今天给大家讲解一下Python网络编程篇_第4张图片

状态码

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

今天给大家讲解一下Python网络编程篇_第5张图片

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

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

常见的状态码如下图

今天给大家讲解一下Python网络编程篇_第6张图片

今天给大家讲解一下Python网络编程篇_第7张图片

不管是用python来做web后端,还是其它的语言。在网络这块始终离不开一个共性的问题 ,就是信息传输的安全性问题。信息在互联网上进行传输,任何地方都存在通信内容被窃听的可能, 那我们是怎么去保证它们通信的安全性呢,其中离不开的就是https

网络安全

不管是用python来做web后端,还是其它的语言。在网络这块始终离不开一个共性的问题 ,就是信息传输的安全性问题。信息在互联网上进行传输,任何地方都存在通信内容被窃听的可能, 那我们是怎么去保证它们通信的安全性呢,其中离不开的就是https

https就是在http后面多加了个s,简单理解就是加密的。要具体对它进行学习,得回顾下前面学过的http这块了,如果有对http这块不熟悉的小伙伴,可以去翻看下前面写过的python网络这块的内容,结合起来学习更容易理解。

先来看看http的优缺点,以及了解它在进行通信的时候会带来的问题, 就知道为什么https会安全些了。

今天给大家讲解一下Python网络编程篇_第8张图片

https

http优点:

  • 1.传输速度快,非常的灵活。
  • 2.是无状态协议,可以减少服务器的CPU以及内存资源的消耗。
  • 3.每次连接只处理一个请求,处理完之后就断了,减少资源消耗。

http缺点:

  • 1.不能进行大量数据的传输。
  • 2.通信的时候使用的是明文,所以导致信息容易被窃听,安全性差。
  • 3.通信的时候,不验证身份。如:(python爬虫里面,添加一个ua就可以伪装成浏览器进行欺骗)
  • 4.无法验证数据传输的完整性,数据被篡改了都不知道

今天给大家讲解一下Python网络编程篇_第9张图片

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

今天给大家讲解一下Python网络编程篇_第10张图片

http的安全性

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

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

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

通信加密

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

今天给大家讲解一下Python网络编程篇_第11张图片

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

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

今天给大家讲解一下Python网络编程篇_第12张图片

内容的加密

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

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

网络数据剖析

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

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

今天给大家讲解一下Python网络编程篇_第13张图片

请求行里面可以看到,是get请求,协议用的是http/1.1的协议 先简单来啰嗦一个基本的问题,这是url地址的格式组成。协议://主机地址/路劲https是协议,image.baidu.com这是主机地址,也是域名。后面是接路径,路径后面接参数,有些url地址很多人看不懂路径后面那些符号是啥意思。

www.jd.com/?cu=true&ut…

今天给大家讲解一下Python网络编程篇_第14张图片

其他的参数

url分析完之后,请求报文中这些字段分别代表的含义,会通过请求发送给其它服务器

`1.accept            客户端可以处理的类型
2.accept-language   优先支持中文
3.User-Agent        浏览器的标识
4.Accept-Encoding   优先的压缩方式
5.Host              主机地址
6.connection        长连接
7.Cache-Control     缓存控制
8.cookie            服务器生成的cookie
复制代码`

通信过程

几个参数了解了之后,在发送请求的时候进行通信,计算机之间会做些什么事情呢。比如现在在文本框输入python,当我点搜索发送起请求的时候,界面上很快就给你呈现出了你要的东西,我们来对它进行解释。

今天给大家讲解一下Python网络编程篇_第15张图片

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

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

今天给大家讲解一下Python网络编程篇_第16张图片

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

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

今天给大家讲解一下Python网络编程篇_第17张图片

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

今天给大家讲解一下Python网络编程篇_第18张图片

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

今天给大家讲解一下Python网络编程篇_第19张图片

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

image

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

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

今天给大家讲解一下Python网络编程篇_第20张图片

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

你可能感兴趣的:(python,linux,网络,编程语言,http)