HTTP
HTTP协议介绍
HTTP 协议,全称超文本传输协议(Hypertext Transfer Protocol)。顾名思义,HTTP 协议就是用来规范超文本的传输,超文本,也就是网络上的包括文本在内的各式各样的消息,具体来说,主要是来规范浏览器和服务器端的行为的。
常见字段
Host
客户端发送请求时,用来指定服务器的域名。
如:Host:www.xx.com。
Content—Length
服务器在返回数据时,会有 Content-Length 字段,表明本次回应的数据长度。
Connection
用于客户端要求服务器使用「HTTP 长连接」机制,以便其他请求复用。
Connect—Type
用于服务器回应时,告诉客户端,本次数据是什么格式。
Connect—Encoding
表示服务器返回的数据使用了什么压缩格式
常见状态码
1XX(信息性状态码)
1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。
2xx(成功状态码)
2xx 类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态
200OK是最常见的成功状态码,表示一切正常。如果是非 HEAD 请求,服务器返回的响应头都会有 body 数据。
3xx(重定向状态码)
3xx 类状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向。
- 302 Move temporarily : 临时重定向,请求的资源还在,但暂时需要用另一个 URL 来访问。
- 301 Moved Permanently:永久重定向,资源不在了,收到请求后自动将地址修改为新地址。
4xx(客户端错误码)
4xx 类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。
- 404 Not Found :请求的资源在服务器上不存在或未找到,所以无法提供给客户端。
- 403 Forbidden : 服务器禁止访问资源,并不是客户端的请求出错。
- 400 Bad Request : 客户端请求的报文有错误,但只是个笼统的错误。
- 405 Method Not Allowed :方法不被服务器允许。
5xx(服务端错误码)
5xx 类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。
- 500 Internal Server Error :服务器内部发生错误。
- 504 Gateway Timeout :服务器负载过大,暂时无法响应。
Get与Post
Get方法
Get是最常用的HTTP方法之一,常用于获取服务器的资源。在浏览器中直接输⼊ URL, 此时浏览器就会发送出⼀个 GET 请求。
Post方法
Post也是常见HTTP方法之一,常用于提交用户数据给服务器。
Get与Post的区别
- 语意的区别:Get常用于获取服务器资源,而Post常用语提交数据。
- Get的body一般为空,Post的body一般不为空。
- Get请求一般为幂等,Post请求一般不幂等
- Get可以被缓存,Post 不能被缓存. (这⼀点也是承接幂等性).
注:幂等性是一个数学和计算机科学中的基本概念,主要应用于抽象代数领域。在编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。这意味着无论一个操作被执行多少次,其结果始终保持不变
HTTPS
HTTPS协议介绍
HTTPS协议是HTTP的加强安全版本,是基于HTTP为基础,并额外使用了SSL和TLS协议作为加密和安全认证。
HTTPS 之所以能达到较高的安全性要求,就是结合了 SSL/TLS 和 TCP 协议,对通信数据进行加密,解决了 HTTP 数据透明的问题。接下来重点介绍一下 SSL/TLS 的工作原理。
SSL/TLS工作原理
在互联网上传输明文是比较危险的事情,很容易被不法分子给劫持,从而带来危害,所以我们需要将我们的“明文”加密过后成密文再传输给别人,当别人拿到密文进行解密后就拿到明文,得到信息。
在这个加密和解密的过程中, 往往需要⼀个或者多个中间的数据, 辅助进⾏这个过程, 这样的数据称为 密钥
对称加密
对称加密就是使用同一个密钥对信息进行加密和解密。
对称加密似乎看起来很完美,黑客似乎无法获取信息了。
但事实不非如此,服务器不可能每一个客户端都维护一个不同的公钥。所以服务器使用的都是一个公钥,因此黑客也很容易获取公钥。
所以我们引入非对称加密。
非对称加密
⾮对称加密要⽤到两个密钥, ⼀个叫做 “公钥”, ⼀个叫做 “私钥”。
公钥和私钥是配对的. 最⼤的缺点就是运算速度⾮常慢,⽐对称加密要慢很多。
整个流程为:用非对称加密保护对称加密的公钥传输。(非对称加密的速度非常慢)
客户端使用公钥将对称加密的公钥进行加密,而黑客没有私钥无法获取信息,服务器通过私钥解密密文得到对称加密的公钥。然后服务器使用对称加密的公钥进行回应。后续信息就都是用对称加密公钥传输信息。
中间人攻击
由于在上面过程,需要使用服务器的非对称加密公钥来进行加密,而获取公钥时,就会被中间人攻击,导致信息泄露。
攻击者假装自己是服务器,给客户端发送自己的公钥,而客户端收到“公钥”后,将会使用公钥进行加密,并在公共信道传输,被攻击捕获后,再使用自己的私钥进行解密,就能获取其中的内容。
为了公钥传输的信赖性问题,第三方机构应运而生——证书颁发机构(CA,Certificate Authority)。CA 默认是受信任的第三方。CA 会给各个服务器颁发证书,证书存储在服务器上,并附有 CA 的电子签名(见下节)。