- Published on
爬虫-HTTP基础、加密、js调试
HTTP网络基础
HTTP
1. HTTP 0.9
版本 第一代的HTTP发布于1991年,最开始的版本号是0.9版本,支持内容如下:
仅支持GET请求,不支持POST请求,且客户端给服务器发送的内容有限。 服务器返回给客户端的内容,也仅仅局限于HTML内容。不过在1991年,还算满足当时的使用要求。 不支持请求头,没有请求头和响应头的概念。 服务端收到请求,然后返回HTML响应,随后立即关闭TCP连接。
通常在协议、框架、技术的发行版本号上,V1.0一般都是正式版本,0.x都是属于测试版本,所以HTTP0.9内容支持有限。
2. HTTP 1.0
1996年,发布了HTTP 1.0正式版,协议内容也更新了很多,新特性如下:
请求方式,新增了POST、DELETE、PUT、HEAD等方式。 增加了请求头和响应头的概念。 在请求头中,可以指定HTTP协议版本信息,以及请求字段信息。 增了加了响应内容类型,音频、视频、文件、二进制都可以进行传输。
但是HTTP1.0版本也有一些明显的缺陷内容,如下:
- TCP重 重 复 复 连 连 接 接 : 每 次 发 起 请 求 , 都 需 要 先 建 立 TC P 连 接 , 再 得 到 响 应 后 , 关 闭 TC P 连 接 。 TC P 连 接 是 需 要 三 次 握 手 的 , 但是一个网页的加载,需要几十或者上百次的链接,所以要消耗很多次重复链接开支。
- 无状态无连接:1.0版本依旧是无状态无连接,服务器不会跟踪、不会记录请求过的状态,每次请求都需要建立TCP链接 且不能复用。
- 丢包和堵塞问题:1.0版本规定,在请求响应达到之后,下一个请求才能发送,所以前一个请求阻塞后面的所有请求, 都会被堵塞,很容易造成丢包。
3. HTTP 1.1版本
1.0版本发布的一年后,就发布了HTTP 1.1版本,1.1版本就是对1.0版本的优化和完善,主要更新的特性有:
新增长连接:新增Connection字段,可以设置keep-alive值保持连接不断开,即 TCP 连接默认不关闭,可以被多个请求复 用,这也是1.1版本很重要的优化。 新 增 P ATC H、 O P TI O N S 、 DELETE等 方 法 。
host字段 :Host字段用来指定服务器的域名,这样就可以将多种请求发往同一台服务器上的不同网站,提高了机器的复 用,这个也是重要的优化。
HTTP的1.1版本,是目前用的最多的版本。虽然问题也有,但是后面更新的是2和3版本,跨版本和特性的更改太大,所以大家 都没怎么用上。
3. HTTP2.0
由于HTTP 1版本的各种问题不方便解决,HTTP 2.0版本的设定,主要是在兼容 1 版本的基础之上,高效的利用当前的网络带
宽,给用户带来更快捷、简单、安全的体验。 主要特性如下:
-
二进制格式:HTTP 1版本是文本协议,HTTP 2版本是二进制协议。以二进制帧为基础单位,将所有传输的信息分割为消息和帧,并采用二进制格式的编码,一帧中包含数据和标识符,得以网络传输变得高效而灵活。
-
多路复用:这是一个非常重要的优化,1.1版本中存在效率低下和高效过大的问题,在2.0中,多个请求可以共用一个 TCP连接,并借助于二进制帧中的标识进行区分实现链路的复用。
-
头部压缩:在2.0版本中,使用HPACK算法对请求响应头部header数据进行压缩,从而减少请求的大小,并提高效率。对 于头部信息的逐步增加,压缩算法可以有效减少头部数据的传输。
-
服务端推送:在2.0版本允许服务器主动向客户端发送资源,这样在客户端可以起到加速作用
-
请求优先级设置:客户端可以为请求设置优先级,服务器可以根据优先级优先处理
HTTPS
HTTPS:
- TCP三次同步握手
- 客户端验证服务器数字证书
- DH算法协商对称加密算法的密钥,hash算法的密钥(客户端 服务端)
- SSL安全加密隧道协商完成
- 网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性,用协商的hash算法进行数据完整性保护,保证数据不被篡改。
(1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
(2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。(公钥加密的内容私钥可以解密)
(3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
(5)Web服务器利用自己的私钥解密出会话密钥。
(6)Web服务器利用会话密钥加密与客户端之间的通信。
为什么不采用非对称加密?
首先,非对称加密的加解密效率是非常低的,而 HTTP 的应用场景中通常端与端之间存在大量的交互,非对称加密的效率是无法接受的。
另外,在 HTTPS 的场景中只有服务端保存了私钥,一对公私钥只能实现单向的加解密,所以 HTTPS 中内容传输加密采取的是对称加密,而不是非对称加密。
HTTPS协议多次握手,导致页面的加载时间延长50%
申请SSL需要钱
SSL设计的安全算法会消耗CPU资源
对于数据和身份不敏感的网站,直接使用HTTP即可。
Squid 搭建代理服务
Squid是一个高性能的代理缓存服务器,支持FTP,HTTPS,HTTP等协议
# 拉取镜像
docker pull sameersbn/squid
# 准备配置文件
> squid.conf
acl all src 0.0.0.0/0.0.0.0
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 443 # https
acl CONNECT method CONNECT
http_access allow all
http_port 3128
visible_hostname proxy
# 启动镜像
docker run -d --name squid -p 3128:3128 -v /本机目录:/etc/squid/squid/conf 镜像
本机配置
export http_proxy=http://*.*.*.*:3128
# 测试
wget http://baidu.com
代理的安全问题
-
加密和身份认证
-
绑定系统不同的端口
-
云服务器的安全组配置
# 加密配置
`生成密码`:htpasswd -c 文件名称 账号名称
export http_proxy=http://账号:密码@IP:prot
百万IP 成本计算
ADSL服务器,短效代理IP,五分钟一个,一天是288
一百万 需要 3473台服务器,一台服务器成本,60元/月。
成本就是20w一个月。(排除IP丢失率,和ADSL IP重复 已经重启网络或服务器时间。)
加密
不需要密钥:
- MD5
- SHA-1
需要密钥【加密、解密都需要密钥】
- 对称加密【加密,解密用同一个密钥】
- DES
- 3DES
- AES
- 非对称加密【两个密钥,公钥加密可以通过私钥解密】
- RSA
- DSA
URLencode编码:将中文替换为 包含% 的URL编码
MD5摘要算法:对一段信息产生摘要信息。不论多长的输入,都会输出长度为128bit的字符串。
AES加密算法是密码学中的高级标准
DES是一种分组密码,以64位为分组对数据加密,密钥长度是56位。
3DES是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高
RSA非对称加密算法:
- 加密时使用公钥,解密时使用私钥
- 如果不是通过公钥加密,则无法通过私钥解密
- 被公钥加密过的内容,不是用私钥,无法解密
RSA是第一个能同时用于加密和数字签名的算法,被ISO推荐为公钥数据加密标准
BASE64编码:在HTTP环境下,传递较长的标识信息
前端js调试
alert ,console log, js中增加断点
前提:开发者工具是打开状态,breakpoint是激活状态,在JS代码中增加断点。
找到注册绑定的函数。
搜索函数,可以看到函数是加密的。普通加密方式,在解密网站上可以得到结果。
进入console 输入函数,点击进入函数,设置断点。
点击注册可以逐步看到函数的执行情况。