一、HTTP
1.构造HTTP请求
1.为什么要构造HTTP请求?
自己构造http请求,可以完全控制请求报文,不依赖浏览器的默认行为,用来测试服务器收到不同的请求后怎么响应。
例如:发送请求参数为空、超长、特殊符号、中文,看服务器会不会崩溃、报错。
少填某个必要选项,看服务器返回的错误提示。
2.构造http请求的方法:1.通过form表单构造HTTP请求(写HTML)
2.通过Ajax构造HTTP请求(写JavaScript)
3.通过Java Socket构造HTTP请求(Java)
4.通过调用Java标准库的方法构造HTTP请求(Java)
5.通过postman构造HTTP请求
2.通过调用Java标准库的方法构造HTTP请求(Java)
new客户端
java
HttpClient httpClient=HttpClient.newHttpClient();
工厂方法
上述new客户端的方法是调用静态 工厂方法。
静态工厂方法:在产品接口本身写静态方法,直接生成产品。不需要单独的工厂接口。
构造请求
java
HttpRequest httpRequest=HttpRequest.newBuilder()
.uri(URI.creat("https://www.baidu.com"))
.GET()
.header("User-Agent","122q")
.build();
链式调用法:这几个方法返回的都是同一个HttpRequest对象
发送请求,接收响应
java
HttpResponse httpResponse=httpClient.send(httpRequest,HttpResponse.BodyHandlers.ofString());
同步异步
上述send就是同步。
同步:发送请求后,当前线程卡在原地等结果。等不到结果就一直阻塞。
异步:发送请求后,立刻返回,线程不会卡住,马上执行后续代码。
2.手动测试构造HTTP请求
Postman构造HTTP请求

二、 HTTPS
1.明文
明文:传输的原始数据
2.密文
密文:加密后的数据
3.加密
把明文加密变为密文
4.解密
把密文解密得到明文
5.密钥
加密解密过程中,用到的一个特殊的数据。
密钥本质是一个二进制数据,在传输时会基于Base64编码为字符串。
6.对称加密
网络传输时,数据必须要进行加密传输。先引入了对称加密。
对称加密:客户端/服务器生成一个密钥,双方确认密钥之后,通信的加密解密都用这个密钥。
加密过程:
问题:如果路由器被黑客入侵,那么黑客获取到密钥,传输的数据就会被黑客获取!
所以我们要给密钥加密!
但是用一个对称密钥k1给另一个对称密钥k2加密,K1仍需要网络传输,K1一旦被窃听,整个加密体系崩溃,无法解决 密钥传递时的安全问题。
因此,引入了非对称加密!
7.非对称加密
1.加密过程
加密过程:
非对称加密就是把对称加密和非对称加密结合起来进行密文传输
2.为什么要把对称和非对称结合起来进行密文传输?
对称加密:传输效率高,占用的系统资源少;
非对称加密:传输效率低,占用的系统资源多。所以在非对称加密得到对称密钥后,之后的传输使用对称传输。
8.非对称传输的漏洞-中间人攻击
客户端不知道对方是服务器还是黑客
服务器不知道对方是客户端还是黑客
这里的问题是对称密钥key已泄露!后续的密文传输全都失效!
所以,引入证书来解决中间人攻击问题!
9.证书
证书本质上是一个字符串(结构化数据)
1.证书的结构
证书由5部分组成:
1.服务器公钥
2.网站域名
3.CA(certificate authority证书颁发机构)机构名称
4.证书有效期
5.CA用CA自己的私钥做的数字签名
2.签名
签名的本质是一个"加密过的校验和".
CA有一对自己的私钥和公钥。
签名的构成:把证书的前四个部分通过计算得到一个校验和,
然后CA由自己的私钥,把校验和加密,就得到了签名。
10.引入证书解决中间人攻击问题

CA的pub和pri不会被中间人攻击
因为CA的pub不在网络传输,预先存在客户端的操作系统中;
CA的pri绝对不能泄露。
11.结语
"永远不要失去发芽的心"




