网络协议九:其他协议
WebSoclet
- HTTP与WebSoclet
- HTTP请求的特点:通信只能由客户端发起。所以,早期很多网站为了实现推送技术,所用的技术都是轮询
- 轮询是指由浏览器每隔一段时间(如每秒)向服务器发出HTTP请求,然后服务器返回最新的数据给客户端
- 为了能更好的节省服务器资源和带宽,并且能够更实时地进行通讯,HTML5规范中出现了WebSocket协议
- WebSocket
- HTTP与WebSoclet区别
- WebSocket和HTTP属于平级关系,都是应用层的协议
- 其实TCP本身就是支持全双工通信的(客户端、服务器均可主动发消息给对方)
- 只是HTTP的“请求-应答模式”限制了TCP的能力
- WebSocket使用80(ws://)、443(wss://)端口,可以绕过大多数防火墙的限制
- WebSocket协议头为
ws://
或者wss://
,wss是ws的安全版,跟http、https一样 - ws://example.com/wsapi
- wss://secure.example.com/wsapi
- WebSocket协议头为
- 与HTTP不同的是,WebSocket需要先建立连接
- 注意:这个建立连接是应用层的连接建立,不是TCP的连接建立
- 这就使得WebSocket成为一种有状态的协议,之后通信时可以省略部分状态信息
- 而HTTP请求可能需要在每个请求都额外携带状态信息(如身份认证Cookie等)
- WebSocket和HTTP属于平级关系,都是应用层的协议
WebSocket建立连接
- WebSocket需要借助HTTP协议来建立连接(也叫作握手,Handshake)
- 由客户端(浏览器)主动发出握手请求
- Connection必须设置Upgrade
- 表示客户端希望连接升级
- Upgrade必须设置websocket
- 表示希望升级到WebSocket协议
- Sec-WebSocket-Version
- 表示支持的Websocket版本
- RFC 6455要求使用的版本是13
- Sec-WebSocket-Key是客户端生成的随机字符串,比如例子中的:dGh1IHNhbXBsZSBub25jZQ==
- 服务器接收到客户端的Sec-WebSocket-Key后,会进行以下操作
- Sec-WebSocket-Key加上一个固定的GUID值(258EAFA5-E914-47DA-95CA-C5AB0DC85B11)
- dGh1IHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11
- 将①的结果进行SHA-1摘要计算
- b37a4f2cc0624f1690f64606cf385945b2bec4ea
- 将②的结果进行Hex To Base64编码
- s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
- 将③的结果做为Sec-WebSocket-Accept响应头的值,返回给客户端
- Sec-WebSocket-Key加上一个固定的GUID值(258EAFA5-E914-47DA-95CA-C5AB0DC85B11)
- 如此操作,可以尽量避免普通HTTP请求被误认为WebSocket协议
- WebSocket使用
- WebSocket体验和演示(官网)
- https://www.websocket.org/echo.html
- 可以简单实现,服务器与客户端的简单消息发送,只需要简历一次连接即可相互通信
-
W3C标准化了一套WebSocket API,可以直接使用JS调用
let websocket = new WebSocket(’wss://echo.websocket.org/‘);
- WebSocket体验和演示(官网)
WebService (已经淘汰)
- WebService,译为:Web服务,是一种跨编程语言和跨操作系统平台的远程调用技术标准
- WebService使用场景举例
- 天气预报、手机归属地查询、航班信息查询、物流信息查询等
- 比如天气预报,是气象局把自己的服务以WebService形式暴露出来,让第三方程序可以调用这些服务功能
- http://www.webxml.com.cn/zh_cn/index.aspx
- 事实上,WebService完全可以用普通的Web API取代(比如HTTP + JSON)
- 现在很多企业的开放平台都是直接采用Web API
- 核心概念
- SOAP(Simple Object Access Protocol),译为:简单对象访问协议
- 很多时候,SOAP = HTTP + XML
- 用HTTP协议发送请求,数据内容用XML文档来传递
- WebService使用SOAP协议来封装传递数据
- 很多时候,SOAP = HTTP + XML
- WSDL(Web Services Description Language),译为:Web服务描述语言
- 一个XML文档,用以描述WebService接口的细节(比如参数、返回值等)
- 一般在WebService的URL后面跟上?wsdl获取WSDL信息
- SOAP(Simple Object Access Protocol),译为:简单对象访问协议
- 总结:WebService就是某个公司将自己的数据进行开放出去共别人使用,但是别人使用的时候必须遵守WebService指定的协议来请求数据;即WebService就是一个对外开放的按一定协议来访问的服务器
- 现在已经淘汰,直接被公开的接口调用来替代。
其他知识点
RESTful(注意理解,重要!)
- 简介
- REST的全称是:REpresentational State Transfer
- 译为:“表现层状态转移”
- REST是一种互联网软件架构设计风格
- 定义了一组用于创建Web服务的约束
- 符合REST架构的Web服务,称为RESTful Web服务
- REST的全称是:REpresentational State Transfer
- 总结:就是一个规范标准用来规范后台接口的路径、请求方式
- 实践建议
- URL中使用名词(建议用复数形式),不使用动词
- 推荐:/users 、/users/6
- 不推荐:/listUsers、/getUser?id=6、/user/list、 /user/get?id=6
-
使用HTTP的请求方法来表达动作
- 一个资源连接到其他资源,使用子资源的形式
- GET /users/6/cars/88
- 查询id为6的用户的所有车的第88号车
- POST /user/8/cars
- 给id为8的用户添加一两车
- GET /users/6/cars/88
- API版本化
- zh.com/v1/users
- zh.com/v2/user/66
- 返回JSON格式的数据
- 发生错误时,不要返回200状态码
- URL中使用名词(建议用复数形式),不使用动词
HTTPDNS
- HTTPDNS是基于HTTP协议向DNS服务器发送域名解析请求
- 替代了基于DNS协议向运营商Local DNS发起解析请求的传统方式
- 可以避免Local DNS造成的域名劫持和跨网访问问题
- 常用在移动互联网中(比如在Android、iOS开发中)
- 本质:就是以前客户端输入一个域名要通过DNS协议访问DNS服务器获取到IP地址,现在有一个HTTP协议的服务器,通过发送http协议就可以到HTTP服务器中获取到对应的IP地址
- 使用
- 市面上已经有现成的解决方案
- 腾讯云:https://cloud.tencent.com/product/httpdns
- 阿里云:https://help.aliyun.com/product/30100.html
- 移动端集成相关的SDK即可使用HTTPDNS服务
- 市面上已经有现成的解决方案
FTP
- FTP(File Transport Protocol),译为:文件传输协议,RFC 959定义了此规范,是基于TCP的应用层协议
- 在RFC 1738中有定义,FTP的URL格式为:
ftp://[user[:password]@]host[:port]/url-path
- 在RFC 1738中有定义,FTP的URL格式为:
- 连接模式
- FTP有2种连接模式:主动(Active)和被动(Passive)
- 不管是哪种模式,都需要客户端和服务器建立2个连接
- 控制连接:用于传输状态信息(命令,cmd)
- 数据连接:用于传输文件和目录信息(data)
- 主动模式
- 客户端打开一个随机的命令端口
- 端口号大于1024,假设为N
- 同时连接至服务器的命令端口21
- 客户端开始监听N+1数据端口
- 同时向服务器发送一个Port命令给服务器的命令端口21
- 此命令告诉服务器
- 客户端正在监听的数据端口N+1s
- 并且已准备好从此端口接收数据
- 服务器打开20号数据端口,并且创建和客户端数据端口(N+1)的连接
- 客户端打开一个随机的命令端口
- 被动模式
- 客户端通过两个随机的端口与服务器建立连接
- 命令端口N
- 数据端口N+1
- 步骤
- 客户端的命令端口N用于连接服务器的命令端口21
- 客户端通过命令端口N发送PASV命令给服务器的命令端口21
- 服务器打开一个随机的数据端口P,并告知客户端该端口号P
- 客户端数据端口N+1发起与服务器数据端口P的连接
- 客户端通过两个随机的端口与服务器建立连接
邮件相关的协议
- 发邮件使用的协议
- SMTP(Simple Mail Transfer Protocol),译为:简单邮件传输协议
- 基于TCP,标准参考RFC 5321
- 服务器默认使用25端口,SSL/TLS使用465端口
- SMTP(Simple Mail Transfer Protocol),译为:简单邮件传输协议
- 收邮件使用的协议
- POP(Post Office Protocol),译为:邮局协议
- 基于TCP,最新版是POP3,标准参考RFC 1939
- 服务器默认使用110端口,SSL/TLS使用995端口
- IMAP(Internet Message Access Protocol),译为:因特网信息访问协议
- 基于TCP,最新版是IMAP4,标准参考RFC 3501
- 服务器默认使用143端口,SSL/TLS使用993端口
- POP(Post Office Protocol),译为:邮局协议
- POP vs IMAP
- POP的特点
- 客户端连接服务器时,将会从服务器下载所有邮件
- 可以设置下载完后,立即或一段时间后删除服务器邮件
- 客户端的操作(比如删除邮件、移动到文件夹)不会跟服务器同步
- 每个客户端都是独立的,都可以获得其自己的电子邮件副本
- 客户端连接服务器时,将会从服务器下载所有邮件
- IMAP的特点
- 客户端连接服务器时,获取的是服务器上邮件的基本信息,并不会下载邮件
- 等打开邮件时,才开始下载邮件
- 客户端的操作(比如删除邮件、移动到文件夹)会跟服务器同步
- 所有客户端始终会看到相同的邮件和相同的文件夹
- 客户端连接服务器时,获取的是服务器上邮件的基本信息,并不会下载邮件
- POP的特点
VPN
- VPN(Virtual Private Network),译为:虚拟私人网络
- 它可以在公共网络上建立专用网络,进行加密通讯
- 有个VPN服务器,VPN客户端,通过VPN客户端与VPN服务器进行数据传送(加密),VPN服务器(解密)再去查找目的资源
- 作用
- 提高上网的安全性
- 保护公司内部资料
- 隐藏上网者的身份
- 突破网站的地域限制
- 有些网站针对不同地区的用户展示不同的内容
- 突破网络封锁
- 因为有GFW的限制,有些网站在国内上不了
- Great Firewall of China
- 中国长城防火墙
- 与代理的区别
- 软件
- VPN一般需要安装VPN客户端软件
- 代理不需要安装额外的软件
- 安全性
- VPN默认会对数据进行加密
- 代理默认不会对数据进行加密(数据最终是否加密取决于使用的协议本身)
- 费用
- 一般情况下,VPN比代理贵
- 软件
- 实现原理
- VPN的实现原理是:使用了隧道协议(Tunneling Protocol)
- 常见的VPN隧道协议有
- PPTP(Point to Point Tunneling Protocol):点对点隧道协议
- L2TP(Layer Two Tunneling Protocol):第二层隧道协议
- IPsec(Internet Protocol Security):互联网安全协议
- SSL VPN(如OpenVPN)
tcpdump
- tcpdump是Linux平台(命令行)的抓包分析工具,Windows版本是WinDump
- 使用手册: https://www.tcpdump.org/manpages/tcpdump.1.html
- 不错的教程: https://danielmiessler.com/study/tcpdump/
网络爬虫
- 网络爬虫(Web Crawler),也叫做网络蜘蛛(Web Spider)
- 模拟人类使用浏览器操作页面的行为,对页面进行相关的操作
- 常用爬虫工具:Python的Scrapy框架
- 搜索引擎
- 简易实例
- 可以使用Java的一个小框架Jsoup爬一些简单的数据
- jar包
- https://jsoup.org/packages/jsoup-1.13.1.jar
- https://mirror.bit.edu.cn/apache//commons/io/binaries/commons-io-2.8.0-bin.zip
- jar包
- 可以使用Java的一个小框架Jsoup爬一些简单的数据
- robots.txt
- robots.txt是存放于网站根目录下的文本文件,比如https://www.baidu.com/robots.txt
- 官方用来告诉爬虫:哪些内容是不应被爬取的,哪些是可以被爬取的
- 因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写
- 它并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私
- 只能防君子,不能防小人
- 无法阻止不讲“武德”的年轻爬虫爬取隐私信息
-
robots.txt文件内容分析
- robots.txt是存放于网站根目录下的文本文件,比如https://www.baidu.com/robots.txt