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加密算法是密码学中的高级标准

image-20230409143629119

DES是一种分组密码,以64位为分组对数据加密,密钥长度是56位。

image-20230409143820623

3DES是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高

image-20230409143909124

RSA非对称加密算法:

  1. 加密时使用公钥,解密时使用私钥
  2. 如果不是通过公钥加密,则无法通过私钥解密
  3. 被公钥加密过的内容,不是用私钥,无法解密

RSA是第一个能同时用于加密和数字签名的算法,被ISO推荐为公钥数据加密标准

image-20230409144156277

image-20230409144215353

BASE64编码:在HTTP环境下,传递较长的标识信息

image-20230409144313478

前端js调试

alert ,console log, js中增加断点

前提:开发者工具是打开状态,breakpoint是激活状态,在JS代码中增加断点。

找到注册绑定的函数。

image-20230409170822483

搜索函数,可以看到函数是加密的。普通加密方式,在解密网站上可以得到结果。

image-20230409170931164

进入console 输入函数,点击进入函数,设置断点。

image-20230409171122928

点击注册可以逐步看到函数的执行情况。

image-20230409170754053