《图解 HTTP 》阅读笔记(二)

书接上文《图解 HTTP 》阅读笔记(一),我们继续探索总结http的相关知识点。

我们还是先把问题摆到台面,带着问题读文章。

《图解 HTTP 》阅读笔记(二)_第1张图片

4.第三章到第六章 知识点

《图解 HTTP 》阅读笔记(二)_第2张图片

4.1 状态码含义

《图解 HTTP 》阅读笔记(二)_第3张图片

4.1.1 2xx

2XX的响应结果表明请求被正常处理了。
200:请求ok
204:请求处理成功,但是没有资源返回,例如服务端资源没有更新
206:range请求

4.1.2 3xx

3XX响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。
301:永久重定向
302/303:临时重定向
304:资源已找到,但是未符合条件查询

4.1.3 4xx

4XX的响应结果表明客户端是发生错误的原因所在。
400:请求错误,服务端无法理解
401:需要认证
403:不允许访问
404:资源未找到

4.1.4 5xx

5XX的响应结果表明服务器本身发生错误。
500:服务端内部错误了
503:服务端正在忙

4.2 HTTP首部字段

请求报文首部包含:请求行、请求首部字段、通用首部字段、实体首部字段
《图解 HTTP 》阅读笔记(二)_第4张图片
响应报文首部包含:响应行、响应首部字段、通用首部字段、实体首部字段
《图解 HTTP 》阅读笔记(二)_第5张图片

4.2.1 通用首部字段含义

《图解 HTTP 》阅读笔记(二)_第6张图片

4.2.2 请求首部字段含义

《图解 HTTP 》阅读笔记(二)_第7张图片

4.2.3 响应首部字段含义

《图解 HTTP 》阅读笔记(二)_第8张图片

4.2.4 实体首部字段含义

《图解 HTTP 》阅读笔记(二)_第9张图片

小知识点:
1)若HTTP首部字段重复了会如何?
这种情况在规范内尚未明确,根据浏览器内部处理逻辑的不同,结果可能并不一致。有些浏览器会优先处理第一次出现的首部字段,而有些则会优先处理最后出现的首部字段。
2)no-cache/no-store区别
no-cache 和 no-store 用作控制缓存,被服务器通过响应头 Cache-Control 传递给客户端

  • no-store 禁止缓存和协商
    永远都不要在客户端存储资源,永远都去原始服务器去获取资源。
  • no-cache 允许缓存,但每次都要协商
    可以在客户端存储资源,每次都必须去服务端做新鲜度校验,来决定从服务端获取新的资源(200)还是使用客户端缓存(304)。也就是所谓的协商缓存。

5.第七章&第八章 知识点

《图解 HTTP 》阅读笔记(二)_第10张图片

5.1 Http优缺点

http的优点

  • http的灵活性高,可扩展性强,从http1.0到http1.1再到http2.x,http协议一直在进行扩展新的属性。
  • 可靠传输,因为http协议是基于tcp协议的一种应用层协议,tcp协议就是可靠传输协议。
  • 请求应答,有来有回。
  • 无状态的,每一个请求都是相互独立的,默认不需要保存上下文的信息。

http的缺点

  • 明文传输不安全,可能被窃听
  • 身份无法验证
  • 无法验证报文的完整性,可能被篡改

为了有效防止这些弊端,有必要使用HTTPS。SSL提供认证和加密处理及摘要功能。仅靠HTTP确保完整性是非常困难的,因此通过和其他协议组合使用来实现这个目标。下节我们介绍HTTPS的相关内容。

5.2 https与http的区别与联系

《图解 HTTP 》阅读笔记(二)_第11张图片

HTTP+加密+认证+完整性保护=HTTPS

从TCP/IP协议族上体现的话,SSL属于表示层。
《图解 HTTP 》阅读笔记(二)_第12张图片

小知识点总结:
1)从这里也可以看出,https并非是应用层的一种新协议,只是http+ssl的封装而已,就像okio基于io的封装,相当于与tcp通信之前,有了一层ssl。
2)为什么不一直使用HTTPS?
既然HTTPS安全可靠,为什么不直接强制使用HTTPS呢?其中一个原因是,因为与纯文本通信相比,加密通信会消耗更多的CPU及内存资源。如果每次通信都加密,会消耗相当多的资源,平摊到一台计算机上时,能够处理的请求数量必定也会随之减少。因此,如果是非敏感信息则使用HTTP通信,只有在包含个人信息等敏感数据时,才利用HTTPS加密通信。除此之外,想要节约购买证书的开销也是原因之一。

5.3 https中对称与非对称的应用

对称加密:共享的密钥
不好的地方:以共享密钥方式加密时必须将密钥也发给对方。可究竟怎样才能安全地转交?在互联网上转发密钥时,如果通信被监听那么密钥就可会落入攻击者之手,同时也就失去了加密的意义。另外还得设法安全地保管接收到的密钥。
《图解 HTTP 》阅读笔记(二)_第13张图片

非对称加密:公钥加密,私钥解密
使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走。
《图解 HTTP 》阅读笔记(二)_第14张图片
HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。
《图解 HTTP 》阅读笔记(二)_第15张图片

5.4 公开密钥证书的出现

5.4.1 服务端的公开密钥证书

认真阅读的小伙伴,肯定也发现了一个问题,那就是客户端想要获取服务端的公开密钥,那么如何证明收到的公开密钥就是原本预想的那台服务器发行的公开密钥。或许在公开密钥传输途中,真正的公开密钥已经被攻击者替换掉了。
为了解决上述问题,可以使用由数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书
《图解 HTTP 》阅读笔记(二)_第16张图片
证书的一个作用是用来证明作为通信一方的服务器是否规范,另外一个作用是可确认对方服务器背后运营的企业是否真实存在。

5.4.2 客户端的公开密钥证书

既然有服务端证书,也就是客户端访问服务端之前,要验证服务端真实存在。那么可能有人会问,正常场景下,服务端不需要验证客户端,因为客户端是任意的,服务嘛,本来就是提供给所有人使用的,不必要对客户端做验证。

但是有些场景下,服务端也需要验证客户端的真实,·例如:银行以及特殊的政府网站,为了防止其他人恶意攻击,银行的网上银行就采用了客户端证书。在登录网银时不仅要求用户确认输入ID和密码,还会要求用户的客户端证书,以确认用户是否从特定的终端访问网银。

客户端证书存在的另一个问题点是,客户端证书毕竟只能用来证明客户端实际存在,而不能用来证明用户本人的真实有效性。也就是说,只要获得了安装有客户端证书的计算机的使用权限,也就意味着同时拥有了客户端证书的使用权限。

5.5 SSL和TLS

HTTPS使用SSL(Secure Socket Layer)和TLS(Transport Layer Security)这两个协议。TSL是以SSL为原型开发的协议,有时会统一称该协议为SSL。当前主流的版本是SSL3.0和TLS1.0。

5.6 身份认证的不同方式

计算机本身无法判断坐在显示器前的使用者的身份。进一步说,也无法确认网络的那头究竟有谁。可见,为了弄清究竟是谁在访问服务器,就得让对方的客户端自报家门。
HTTP/1.1使用的认证方式如下所示。

  • BASIC认证(基本认证)
  • DIGEST认证(摘要认证),
  • SSL客户端认证
  • FormBase认证(基于表单认证)

小结

篇幅所限,本文先写到这里,讲到这里,我们对文章开头的问题做个简单回顾,看哪些问题已经解决。建议大家,看着思维导图,先不要去翻文章,去回想,最好可以自我表达出来,看这些问题,是否已学到?《图解HTTP》后面三个章节的内容和知识点总结,请看后续《图解 HTTP 》阅读笔记(三)。
《图解 HTTP 》阅读笔记(二)_第17张图片

你可能感兴趣的:(Java,web,http,网络,状态码,加密,SSL)