网络协议概述
? 网络协议是连接客户端和服务器端的桥梁。学习与网络协议相关的知识,能够让我们对网络通信过程以及通信所需条件有一个全面的认识,可以帮助我们提升爬虫技术或者设计出更有效的反爬虫方案。
? 常见的网络协议有HTTP协议、web socket协议、FTP协议、SSH协议和View-Source协议等
一、认识HTTP
? 当客户端与Web服务器进行交互时,就存在Web请求,这种请求都基于统一的应用层协议交互数据。
? HTTP即超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,它是万维网交换信息的基础。它允许将HTML文档从Web服务器传送到Web浏览器
1.1HTTP协议的特点
- 简单快速:客户向服务器请求服务时,只需传输请求方法和路径。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快
- 灵活:HTTP允许传输任意类型的数据对象,正则传输的类型由Content-Type加以标记
- 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间
- 无状态:无状态是指协议对于事务处理没有记忆能力。后续如果需要前面的信息,则必须重新传送,这样就导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答比较快。
1.2请求和响应
? HTTP请求分成三个部分,分别是请求行(请求方法)、请求头(消息报头)和请求正文。请求头和请求正文之间是一个空行,这个空行表示请求头已经结束。
? 与HTTP请求对应的HTTP响应也是由三部分内容组成:响应行、响应头和响应正文。
? HTTP的请求方式非常多,其中POST和GET最常见
- GET:用于获取请求页面的指定信息(以实体格式)
- POST:与GET类似,但是GET没有请求内容而POST有请求内容。POSY请求最多用于向服务器发送大量数据,且POST的安全性相对高一些
- HEAD:服务器不能在响应里返回消息主体,此方法常被用来测试超文本连接的有效性、可访问性和最近的改变。攻击者在编写扫描工具时,常用HEAD,因为之测试资源是否存在,而不用返回消息主题,所以速度是最快的。
- PUT:用于请求服务器把请求中的实体存储在请求资源下,如果请求资源已经在服务器中存在,那么将会用此请求中的数据替换原先的数据,作为指导资源的最新修改版。如果请求指定资源不存在,将会创建这个资源,且数据位请求正文
- DELETE:删除文件
- TRACE:回显服务器收到的请求,主要用于测试或者诊断
- CONNECT:通常用于SSL加密服务器的链接
- OPTIONS:用于请求获得URI标识的资源在请求/响应的通信过程中可以使用的功能选项,通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。
1.3GET和POST的区别
- GET的 提交的数据包放置url之后,POST放置在HTTP包中的body中
- GET提交的数据大小有限制;而POST方法提交的数据没有限制
- GET方式需要使用REquest.Querystring来取得变量的值;POST通过Request.From来获取变量的值
- GET方式提交的数据会带来安全问题,比如一个登录页面用户名和密码会出现在URL上
1.4响应状态码
响应状态共有五种
- 1xx代表信息响应类,表示接收到请求并且继续处理,这类响应是临时响应
- 2xx代表处理成功响应类,表示动作被成功接收、理解和接受
- 3xx表示重定向响应类,为了完成指定的动作,必须接受进一步处理
- 4xx表示客户端错误,表示客户请求包含语法错误或者不能正确执行的请求
- 5xx代表服务器端错误,服务器不能正确执行一个正确的请求
爬虫工程师通常根据响应状态码判断本次请求的状态,并决定后续的处理逻辑。常见的状态码有:
200:服务请求成功
301:请求的网页永久移动到新位置,永久重定向
302:临时重定向
404:请求资源不存在
400:客户端请求有语法错误,不能被服务器所理解
401:请求未经授权
403:服务器接收到请求,但是拒绝服务
500:服务器内部错误
503:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
1.5发起HTTP请求
? HTTP协议遵循传统的客户端-服务端模型,客户端打开链接以发出请求,等待服务器端响应。
? 借助浏览器可以快速发起一次HTTP请求,如果不借助浏览器也可以借助其他工具发起请求,例如:Linux系统中的curl命令,在Windows中也可以使用curl.exe工具发起请求,通过curl+URL命令即可简单的发起一个HTTP请求。(但是Windows不自带工具,需要下载)
? 此时脱离了浏览器来获取服务器的响应和HTML数据,可以发现,浏览器在HTTP协议方面只不过多了HTML渲染功能,让用户看到更为直观的页面。
1.6Cookie
? 是HTTP是无状态特性促进了cookie的产生,HTTP协议对于事物处理没有记忆能力,缺少状态意味着如果服务器需要和客户端进行多次交互,那么客户端必须在每一次交互时都主动提交身份信息。面对这个问题,人们想出来俩种能够保持HTTP链接状态的技术:cookie和session。
? cookie可以理解为在HTTP协议下,服务器或其他脚本语言维护客户端信息的一种方式,是保存在客户端的文本文件,cookie中往往包含客户端或者用户的相关信息。
产生过程
? 在正常情况下,Cookie可以由服务器端或者JS代码设定。在客户端第一次向服务器端发起请求之前,客户端,或者客户端工具在渲染页面时,由页面中的JS代码生成Cookie值。
? 服务器生成cookie值并将其添加到响应头返回给浏览器,浏览器检测到响应头中的Set-Cookie头后将对应的cookie值保存起来,而后每一次请求都会带对应的cookie,除非cookie过期或被清除。
二、HTTPS
? HTTPS协议的以安全为目标的HTTP通道,HTTPS的安全基础是SSL,即在HTTP下加入SSL层。也就是HTTPS通过安全传输机制进行传送数据,这种机制可保护网络传送的所有数据的隐秘性和完整性,可以降低非入侵性拦截攻击的可能性。
? SSL协议依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。SSL协议提供的服务主要有:
- 认证客户端和服务器端,确保数据发送到正确的地方
- 加密数据,防止数据中途被窃取
- 维护数据的完整性,确保数据在传输过程中不被改变
2.1HTTP和HTTPS的区别主要有:
- HTTP协议不需要证书,而HTTPS需要CA申请证书,大部分证书不免费
- HTTP是超文本传输协议,信息以明文方式传输;HTTPS则是具有安全性的SSL加密传输协议
- HTTP和HTTPS协议使用的是完全不同的连接方式,所用端口也不一样,HTTP是80端口,HTTPS是443端口
- HTTP协议的连接很简单而且是无状态的;HTTPS协议是由SSL协议构建的可进行加密传输、身份认证的网络协议,也是无状态的
|