在网络原理中,现在我们更多的是掌握这些理论,等到真正设计网站的时候要用到的,而且这个面试与工作也是经常接触,应该细致的掌握他们。
上节课我们讲了这些内容,接下来我们继续。

在描述了响应结果之后,要判断是正确还是错误,当出错时,还要探究他的原因。
状态码就能完成这样的功能。
状态码
状态码都是HTTP标准的大佬们定义好的,具体如下表:

这些当然不用全部掌握,掌握几个常见的就可以了。
200
是最常见的状态码,表示成功。在fiddler可以看到这些。

404------Not Found
访问的资源没找到。
URL从IP定位到主机,再从port端口号定位到程序,然后从path定位到程序管理的资源。
然后path访问的资源在服务器上没有。
这些是不同程序的404:

当GetMapping这些配置路由,请求的路径与路由描述的路径不一致时,就会404,上面(百度、搜狗、哔哩哔哩)对404的包装。
403 Forbidden
访问被拒绝(没有权限)。比如在gitee中你的私人仓库,别人无法访问。

405 Method Not Allowed
虽然在网上找别人的网站出现405是很难找到的,但是在咱们自己开发的过程中,很容易出现405的,当请求的方法与服务器这边声明的注解不匹配,就会出现405。
500 Method Server Error
服务器出现了错误,服务器处理逻辑的代码中抛出异常,但是你没有catch到,就会出现这个。
504 Gateway Timeout
这是"网关",即网络的入口,在服务器资源紧张的时候就会触发,比如你在选课系统上,直接卡住了进不去。

302 Move temporary
重定向。
当你访问服务器A时,服务器A让你找B。
状态码整体有很多,结论就是:

当然,除此之外,418是彩蛋(不建议使用)

通过Java socket 构造HTTP请求
HTTP请求,本质上就是ICP请求,只需要构造字符串,符合HTTP协议的格式,写入到TCP socket中。

Postman这样的工具构造HTTP请求
这个程序能把你手动构造的请求全部自动转化为代码。

当然,这个在国内外都很常用的,是外国人研发的。
那么国内有没有呢?当然有,而且也很常用,我自己还下载了一个。
apifox
目前apifox在国内使用越来越多了,是国内团队搞的。
apifox可以直接写接口文档,也很方便进行测试与团队管理。

上述HTTP报文格式的内容,要重点掌握(面试高频考题),fiddler、Postman与apifox这些工具也要掌握。
https
https就是HTTP的基础上加密。

为了防止出现"运营商劫持"这种情况,之所以运营商能劫持,因为数据传输都是明文的加密,通过密文来传输的------明文加密得到密文,密文解密得到明文。
并且https还为防止黑客入侵作出了努力。
https用密钥来进行加密和解密
加密的方式有很多种,今天先介绍两种,一种叫"对称加密",另一种叫"非对称加密"。

对称加密
HTTPS之前是用明文传输的(就是HTTP),此时黑客很容易获取到传输的数据内容,也很容易进行篡改。

于是引入了对称加密。
对称密钥
客户端发送请求时,将数据使用key密钥(一段很长的字符串)进行加密(参考图中的密文),在到达右边的服务器之前,先到达黑客入侵的路由器,黑客如果不知道key是什么,就无法对数据进行解密,无法理解数据的含义,更不用说篡改了,到达服务器后,服务器使用key解密请求,构造响应(响应也需要key加密),然后又到达黑客入侵的路由器,黑客仍无法破解,最后密文响应返回到客户端。

但密钥本身是明文传输的,很可能会被黑客获取到,当黑客拿到了密钥,后续的加密操作就没有意义了。

于是就需要对密钥进行加密。
但如果仍然使用对称加密的方式,生成一个key2对称密钥,使用key2对key进行加密,key就可以密文传输给服务器了,但key2还是得传输给服务器,难道还要搞一个key3对key2加密吗?无论套多少层,总有一层需要明文传输,黑客入侵只是时间问题。
于是,就需要"非对称加密"
非对称加密
引入非对称加密就是为了解决密钥传输的安全性问题。
总体分为"公钥"和"私钥"。
如果说,公钥是一把锁(加密),那么私钥就是这把锁的钥匙(解密)。
这里,客户端持有公钥,服务器持有私钥,客户端发出请求时,在对称加密的基础上,密文请求用公钥加密,先到达被黑客入侵的路由器上,由于是公钥,可以公开,黑客很容易获取到,但他由于没有私钥,所以黑客不能对888888加密后的数据进行解密,此时数据到达服务器,服务器使用自己的私钥解密,就知道了对称密钥是多少了,然后再进行对称加密的过程。

那么直接使用非对称加密不行吗?
实际情况下:
对称加密,运算速度快,开销小,适合针对大量数据进行加密;非对称加密,运算速度慢,开销大,适合加密少量数据,加密大量数据十分耗时。
当然,上述方案仍然存在严重漏洞,我们下期继续探讨。