zoukankan      html  css  js  c++  java
  • 想成为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感兴趣的小伙伴加入!

  • 相关阅读:
    xfce4-windowck-plugin的替代品
    git使用Beyond Compare作为diff和merge工具
    Visual Studio设置多个快捷键
    scrapy参数-COOKIES_ENABLED 最权威解释, 帮你避坑
    Linux基础使用
    python 所有的库整理
    Nginx配置详解
    15个常用的javaScript正则表达式
    Redis开发建议
    mysql 同步大量数据小技巧
  • 原文地址:https://www.cnblogs.com/python-miao/p/14254192.html
Copyright © 2011-2022 走看看