感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
subtype
:子类型,任意的字符串,如html,如果是*号代表所有,用“/”与主类型隔开;
parameter
:可选参数,如charset,boundary等。
例如:
Content-Type: text/html;
Content-Type: application/json;charset:utf-8;
Connect-Encoding
字段
则表示服务器返回的数据
解压
方式。
一般客户端会使用
Accept-Encoding
来告诉服务器自己能接收的压缩数据格式。
💐
👨💻面试官: OK,我们接着向下聊,不用紧张。那么来说说
GET
和POST
的区别吧
🙋♂️小宝:好的,让我整理一下思路!
首先我们需要知道什么是
GET
,是什么又是POST
?
从
GET
先来:GET
是一个常见的用来获取资源它只是获取、查询数据,不会修改服务器的数据,从这点来讲,它是安全的。
而
POST
:则是可以向服务器发送修改请求,进行数据的修改的。就是一个数据提交给服务器,数据一般都会放在body
里。
GET
:对于GET
一般我们通过他来访问某个资源,然后服务器并响应回该资源。就比如我们打开csdn
这个网站,我们开始就是一个get
请求,然后服务器获得信息后响应资源,最后我们才能看到这整个完整的网页。
POST
:对于POST
而言我们发送请求一般是需要对服务器数据修改的。举一个例子: 一般的我们在评论区会经常评论,一般这种请求我们都会使用POST
。因为POST
会没有缓存,如果有本地缓存的话我们只是对本地的浏览器进行了一个修改,服务器并没有做什么,而且我们的评论也就只能我们自己能看见,其他用户是看不见的。也是就是说评论其实就没有进行一个更新,这样就会出现难以想象的场景!
OK,介绍了两者的概念,我们继续说一下两者的区别!
通过上面的介绍我们能大概的知道这些区别:
POST
是有body,而GET
是没有body的。(这个地方一般都是口头描述,有的文章也提到过get
也可也有body
的。)
GET
请求一般不会改变服务器的数据,而POST
则会修改服务器中的数据。
GET
是可以缓存的,而POST
是不可缓存的。
其实还有几个其他的区别:
GET
与POST
相比,GET
的安全性较差,因为所发送的数据是UR
L 的一部分。在发送密码或其他敏感信息时绝不要使用GET
!
GET
向URL
添加数据是有限制的(URL
最大长是2048个字符),而POST
是没有限制的。
- GET 和 POST 只是 HTTP 协议中两种请求方式(异曲同工),而 HTTP 协议是基于 TCP/IP 的应用层协议,无论 GET 还是 POST,用的都是同一个传输层协议,所以在传输上,没有区别。
💐
👨💻面试官: 掌握非常不错的,那我们接着聊一下
POST
和GET
两者方法都是安全和幂等的吗?
🙋♂️小宝:OK,首先我们需要先知道什么是
幂等
?
- 在
HTTP
协议里,所谓的安全
是指请求方法不会破坏
服务器上面的资源。
- 所谓
幂等
,意思是多次执行相同的操作,结果都是相同
的。
那么很明显
GET方法就是安全且幂等的
,因为它是只读
操作,无论操作多少次,服务器上的数据都是安全的,且每次结果都是相同的。
POST
因为是新增或提交数据
的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以是不幂等的
。
💐
👨💻面试官: 那我们来来个比较基础的问题,知道HTTP和HTTPS两者间的区别吗?
🙋♂️小宝:知道的面试官。
首先
HTTP
协议是运行在TCP
之上且为明文传输。而且客户端和服务器都没法验证对方身份。
则
HTTPS
则是在SSL(Secure Socket Layer)
包裹下的HTTP
协议,运行在SSL
上面,而SSL
运行在TCP
上面。是添加了加密和认证机制的HTTP
。
且二者的区别在于:
- 端口不同:
HTTP
端口号一般是 80,HTTPS
端口号一般是 443。
- 消耗的资源不同:
HTTPS
因为是需要加密和解密的,所以一般消耗的CPU资源是大于HTTP
。
💐
👨💻面试官:
HTTPS
解决了HTTP
的哪些问题?
🙋♂️小宝:由于
HTTP
是明文传输,所以安全上面存在一下三个风险:
窃听
篡改
冒充
而
HTTPS
可以很好的解决上述描述的问题:
信息加密
效验机制
身份证书
💐
👨💻面试官:网络模型知道有哪几个吗?
🙋♂️小宝:计算机网络体模型的原理体系结构和
OSI
和TCP
(具体的层次我们可以看下图哦!)。
💐
👨💻面试官:那知道
OSI
和TCP
之间的区别吗?
🙋♂️小宝:知道的。
TCP/IP
与OSI
都是为了使网络中的两台计算机能够互相连接并实现通信与回应,但他们最大的不同在于,OSI
是一个理论上的网络通信模型,而TCP/IP
则是实际上的网络通信标准。
OSI补充:
物理层: 激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的物理媒体。
数据链路层:数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
网络层: 网络层负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能。
传输层: 第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。
会话层: 会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。
表示层: 表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。
应用层: 为操作系统或网络应用程序提供访问网络服务的接口。
💐
👨💻面试官:了解网络编程协议吗?客户端发送给服务器的请求,怎么确定具体的协议?
🙋♂️小宝: 了解,客户端发送给服务器端的请求,可以根据统一资源定位系统(uniform resource locator,URL)来确定具体使用的协议。
一个完整的URL包括–协议部分、网址、文件地址部分。协议部分以
//
为分隔符,在interner中,我们可以使用多种协议:
- HTTP——HyperText Transfer Protocol(超文本传输协议)
- FTP——File Transfer Protocol(文件传输协议)
- Gopher——The Internet Gopher Protocol(网际Gopher协议)
- File——本地文件传输协议
- HTTPS——安全套接字层超文本传输协议(http的安全版)
**例如**百度网址:[http://baidu.com]( ),可以看出使用的是http协议。
💐
👨💻面试官:什么是
TCP/IP
协议?
🙋♂️小宝:TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
💐
👨💻面试官:TCP/IP协议组成?
🙋♂️小宝:TCP/IP由 **应用层、传输层、网际层、网络接口层(链路层)**组成。
具体介绍:
- 应用层:其是 TCP/IP协议的第一层,目的是为了服务应用进程。
- 传输层: 作为 TCP/IP协议的第二层,且在 运输层中,起到了中流砥柱的作用。
- 网际层: 作为 TCP/IP的第三层,可以进行
网络连接的建立终止
和对IP地址的寻找
。
- 链路层: 作为 TCP/IP的第四层,既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路。
💐
👨💻面试官:TCP/IP协议特点是什么呢?
🙋♂️小宝:TCP/IP有一下几个特点:
- 协议标准开放、免费提供用户使用,并且独立于特定的 计算机硬件和 操作系统。
- 可以运行在 广域网,但更合适 互联网。
- 网络地址 统一分配,且网络中每一台设备都具有 唯一的地址。
- 高层协议标准话,可以提供多种多样的可靠网络服务。
💐
👨💻面试官:说一下 HTTP的请求基本流程吧。
🙋♂️小宝:首先是这样一个流程:
DNS域名解析—》发起 TCP的三次握手—》建立 TCP连接发起 HTTP请求—》服务器响应 HTTP请求,浏览器得到 html代码—》浏览器解析 html,并请求 html中的一些静态资源—》最后浏览器渲染前端页面给用户。
例子:
1、输入一个www.baidu.com 网址。
2、通过 DNS来解析该网址的 IP地址。
3、浏览器与服务器建立 TCP 连接(默认端口号:80)。
4、浏览器发送 HTTP请求,请求网站首页。
5、浏览器得到 html代码。
6、TCP连接释放。
7、最终浏览器通过对 HTML的解析,以 Web的形式展示给用户。
💐
👨💻面试官:那来聊一聊 TCP的三次握手吧。
🙋♂️小宝:
来通过下图进行对 TCP握手的三次分析。
漫画流程:
注:本漫画来源
流程:
1、服务端新建套接字,绑定地址信息后开始监听,进入
LISTEN
状态。客户端新建套接字绑定地址信息后调用connect
,发送连接请求SYN
,并进入SYN_SENT
状态,等待服务器的确认。
2、服务端一旦监听到连接请求,就会将连接放入内核等待队列中,并向客户端发送SYN和确认报文段
ACK
,进入SYN_RECD
状态。
3、客户端收到
SYN+ACK
报文后向服务端发送确认报文段ACK
,并进入ESTABLISHED
状态,开始读写数据。服务端一旦收到客户端的确认报文,就进入ESTABLISHED
状态,就可以进行读写数据了
💐
👨💻面试官:为什么握手是三次,而不是两次或者四次呢?
🙋♂️小宝:
两次不安全,四次没必要
。
首先来说一下 两次 的一些弊端。
客户端首先向服务器发送一个连接请求,但是可能这个连接请求走了远路,等了很长时间,服务器都没有收到,那么客户端可能会再次发送,此时服务器端收到并且回复
SYN、ACK
;在这个时候最先发送的那个连接请求到达服务器,那么服务器会回复一个SYN,ACK
;但是客户端表示自己已经收到确认了,并不搭理这个回复,那么服务器可能陷入等待,如果这种情况多了,那么会导致服务器瘫痪,所以要发送第三个确认。
漫画解释:
情况一:
情况二:
🙋♂️小宝:
OK,我们再来说说为什么不是四次握手。
因为三次握手后,
客户端
和服务器
至少可以确认之前的通信情况,但无法确认之后的情况。 所以如果四次还是五次或是更多次都是徒劳的。
💐
👨💻面试官:说的挺深呀,非常不错的,那么再来聊聊3次握手可以携带数据吗?
🙋♂️小宝:在三次握手中是 第一次和第二次是不能携带数据的,第三次握手是可以携带数据的。
假设第一次可以携带数据,如果有人恶意攻击服务器,每次都在第一次握手中的SYN报文放入大量数据,重复发送大量SYN报文,此时服务器会花费大量内存空间来缓冲这些报文,服务器就更容易被攻击了
💐
👨💻面试官:那如果三次握手失败服务器会怎么处理呢?
🙋♂️小宝:首先我们需要知道 三次握手失败的原因:
- 1、服务器没有收到
SYN
。
- 2、服务器回复
SYN 和ACK
后长时间没有收到ACK
相应。
服务器的处理方式:
服务器超时后就会发送
RST
重置连接报文,释放资源。
💐
👨💻面试官:那么三次握手聊过了,再来个挥手吧。什么是四次挥手?
🙋♂️小宝:还是通过下图来对 四次挥手进行分析。
流程:
1、客户端主动调用close时,向服务端发送结束报文段
FIN
报,同时进入FIN_WAIT1状态;
2、服务器会收到结束报文段
FIN
报,服务器返回确认报文段ACK
并进入CLOSE_WAIT状态,此时如果服务端有数据要发送的话,客户端依然需要接收。客户端收到服务器对结束报文段的确认,就会进入到FIN_WAIT2状态,开始等待服务器的结束报文段;
3、服务器端数据发送完毕后,当服务器真正调用close关闭连接时,会向客户端发送结束报文段
FIN
报,此时服务器进入LAST_ACK状态,等待最后一个ACK
的带来;
4、客户端收到服务器发来的结束报文段, 进入TIME_WAIT, 并发出送确认报文段
ACK
;服务器收到了对结束报文段确认的ACK
,进入CLOSED状态,断开连接。而客户端要等待2MSL的时间,才会进入到CLOSED状态
💐
👨💻面试官:那为什么要等待2MSL的时间呢?
🙋♂️小宝:
MSL
指的是报文在网络中最大生存时间。在客户端发送对服务端的FIN
确认包ACK
后,这个ACK
包有可能到达不了,服务器端如果接收不到ACK
包就会重新发送FIN
包。
所以客户端发送
ACK
后需要留出2MSL
时间(ACK
到达服务器器+服务器发送FIN
重传包,一来一回)等待确认服务器端缺失收到了ACK
包。也就是说客户端如果等待2MSL
时间也没收到服务器端重传的FIN
包,则就可以确认服务器已经收到客户端发送的ACK
包
做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。
别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。
我先来介绍一下这些东西怎么用,文末抱走。
(1)Python所有方向的学习路线(新版)
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
(4)200多本电子书
这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。
基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。
(5)Python知识点汇总
知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。
(6)其他资料
还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。
这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!