简介
之前我通过王道的考研课进行了计算机网络的学习,但是在秋招准备过程中发现之前的笔记很多不足,学习的知识不够深入和巩固,所以再重新对《图解HTTP》&《图解TCP/IP》进行深度学习后,总结出了此篇博客,由于内容都是据我而定的,对于我来说以及牢牢记住的知识点就没有进行笔记记录,所以如需深入学习还需要自己独立阅读相关书籍。书籍内容胜过一切八股文和笔记,由浅入深有体系的学习,胜于一切死记硬背。同时在学习协议或者一些专有名词时,和英文原文一起记忆,对我们的学习更有帮助。
HTTP
以下内容是对HTTP的一些学习笔记:
首先我们需要了解到的是HTTP是在应用层使用的一种传输协议,和FTP,DNS应用的位置是一样的,关于计算机网络的分层结构我们在后续TCP/IP协议处在进行解释,这里简单了解即可。
URI和URL
URI:统一资源标志符(Uniform Resource Identifier)
URL:统一资源定位符(Uniform Resource Locater)
即:URI使用字符串标识某一互联网资源,二URL表示资源的地点(互联网上的位置)所以我们说URL是URI的子集。
HTTP定义
- HTTP协议用于客户端与服务端之间的通信。
- 通过请求和响应的交换达成通信。
- HTTP是不保存状态的协议(即:HTTP是无状态协议)
思考:这里对于1,2点,其实没有什么过多的解释了。但是对于第三点,我们需要自己的独立思考参与进来,为什么HTTP是无状态协议呢?HTTP被用于传输,那么我们需要的就是在传递消息的同时尽量减少过程损耗,如果携带状态,那么一定会增加报文长度,所以我们再来参考书籍上的定义就很好理解了:目的是为了更快的处理大量事务,确保协议的可伸缩性。
告知服务器意图的HTTP方法
- GET:用来请求已经被URI识别的资源,指定的资源服务器解析后返回响应内容。
- POST:用来传输实体的主体。
- PUT:传输文件。
- HEAD:获得报文首部,用于确认URI的有效性及资源更新的日期时间等。
- DELETE:删除文件,与PUT相反,按照请求的URI删除指定的资源。
- OPTIONS:询问支持的方法,用来查询针对请求URI指定资源支持的方法。
- TRACE:追踪路径,让服务器端将之前的请求通过请求通信返回给客户端。
- CONNECT:要求在于代理服务器建立通信时建立隧道,实现用隧道协议进行TCO通信。(主要用于SSL/TLS协议把通信内容加密后经网络隧道传输。)
注意:有时候面试官会问GET和POST的区别,我们可以由浅入深的进行解答:
- GET的参数附加在URL中,传递数据可见,并作为URL的一部分发送。
- POST请求参数放置在请求主体(body)中,不通过URL,而是作为请求的一部分发送到服务器。
- GET由于数据存储在URL中,所以长度受到限制,通常不超过2048字符。
- POST理论上不受数据大小限制,因为其在请求体中发送。
- 多次执行同一个GET请求应该得到同样的结果,并且不会改变服务器的状态。
- POST请求则是对服务器内容进行修改,多次执行一个POST请求可能会导致不同的结果,甚至改变服务器状态。
但是本质上的区别:
GET产生一个TCP数据包,而POST产生两个TCP数据包。GET请求浏览器会将header和data一起发送给服务器,而POST会先发送header,服务器响应100后,客户端发送data。
HTTP报文
用于HTTP协议交互的信息被称为HTTP报文。(客户端:请求报文。服务端:响应报文)
一般有四种首部:通用首部,请求首部,响应首部,实体首部
对于报文主体我们可以采用编码来提升效率,但是编码过程需要客户端或者服务端计算机完成,会消耗更多的cpu资源。
返回状态码
1xx Informational 接收的请求正在处理
2xx Success 请求正常处理完毕
- 200 ok 表示从客户端发来的请求在服务器端被正常处理了
- 204 No Content 表示服务器接收的请求已经成功处理但在返回报文中不含实体部分
- 206 Partial Content 表示客户端进行了范围请求,而服务器成功只想了这部分的请求
3xx Redirection 需要进行的附加操作以完成请求
- 301 Moved Dermanenty 永久重定向,表示请求的资源已经被分配了新的URI,以后使用资源现在所指的URI
- 302 Found 临时重定向 ,该状态码表示请求的资源已经被分配了新的RI,(本次)使用资源现在所指的URI
- 303 See Other 表示由于请求对应资源存在着一个URI,应使用GET方法定向获取请求资源
- 304 Not Modified 表示客户端发送附带条件的请求时,服务器允许请求访问资源,但因为发生请求未满足条件情况。
4xx Client Error 服务器无法处理请求
- 400 Bad Request 表示请求请求报文中存在语法错误
- 401 Unauthorized 表示发送的请求需要有通过 HTTP BASIC DIGEST 的认证信息
- 403 Forbiden 表示对请求资源的访问被服务器拒绝了
- 404 Not Found 表明服务器上无法找到请求的资源
5xx Server Error 服务器处理请求出错
- 500 Internal Server Error 表明服务器端在执行请求时发生了错误
- 503 Service Unavailable 表明服务器暂时处于超负载或者正在停机维护,现在无法处理请求
HTTP缺点 --> HTTPS
- 通信使用明文(不加密),内容可能会被窃听。
- 不验证通信方身份,因此可能遭遇伪装。
- 无法验证报文的完整性,所以报文内容可能被篡改。
因此 HTTP+加密+认证+完整性保护 = HTTPS
HTTP并非是一种新的协议,知识HTTP通信接口部分使用SLL(Secure Socket Layer) 和 TLS(Transprot Layer Security) 协议代替而已。
HTTPS混合加密机制
如若想要了解HTTPS如何进行加密,我们就需要了解什么是对称加密和非对称加密。
对称加密
对称加密,或者称之为共享密钥加密。即加密和解密使用同一把钥匙,发送方将信息使用密钥加密后发送到公网中,接收方获取后使用同样的密钥进行解密。
其问题显而易见,就是如何将密钥安全传给对方。但是其优点也很明显,相较于非对称加密而言,他的效率会高出很多。
非对称加密
非对称加密,或者称为公开密钥加密。即每个用户都有一个公钥一个私钥,公钥会放在公网中,发送方使用目标用户的公钥进行加密,然后发送信息,接收方获取到加密信息后使用私钥进行解密。
HTTPS采用的是两者结合的方法:
- 首先先使用非对称加密,在客户端和服务端间传递对称加密的公钥
- 然后使用对称加密进行信息传递
但是在非对称加密获取公钥的过程,公钥可能是攻击者伪造的假公钥。于是我们引出了第三方机构的概念。当一个用户注册了私钥和公钥,需要将其公钥交给可信第三方进行证明。然后当另一用户发送消息给当前用户时,另一用户需要将获取的私钥的认证通过非对称加密与第三方机构进行校验,如果为真就会继续使用。