HTTP协议回顾
HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,响应的内容包括消息协议的版本,成功或者错误编码加上服务器信息、实体元信息以及可能的实体内容。
更多可查看Web基础与HTTP协议 - 掘金 (juejin.cn)
HTTP 状态码
HTTP 状态码是用以表示网页服务器HTTP响应状态的3位数字代码,当浏览器请求某一URL时,服务器根据处理情况返回相应的处理状态。
状态码首位 | 已定义范围 | 分类 |
---|---|---|
1xx | 100-101 | 信息提示 |
2xx | 200-206 | 成功 |
3xx | 300-305 | 重定向 |
4xx | 400-415 | 客户端错误 |
5xx | 500-505 | 服务端错误 |
HTTP常见状态码
状态码 | 功能描述 |
---|---|
200 | 一切正常 |
301 | 永久重定向 |
302 | 临时重定向 |
401 | 用户名或密码错误 |
403 | 禁止访问(客户端IP地址被拒绝) |
404 | 请求的文件不存在 |
414 | 请求URI头部过长 |
500 | 服务器内部错误 |
502 | 无效网关 |
503 | 当前服务不可用 |
504 | 网关请求超时 |
HTTP请求流程分析
用户在浏览器输入URL访问时,发起HTTP请求报文,请求中包括请求行、请求头、请求体,服务器收到请求后返回响应报文,包括状态行、响应头、响应体。
- 客户端通过域名进行访问,先进行DNS域名解析。
- 之后客户端请求与web服务器建立TCP连接(三次握手)。
- 建立连接后,客户端向web服务器发送一个HTTP请求。
- 服务器响应HTTP请求,客户端的浏览器得到HTML代码。
- 浏览器解析HTML代码,并请求HTML代码中的资源。(浏览器拿到HTML文件后,开始解析HTML代码,遇到静态资源时,就向服务器去请求下载。)
- 断开TCP连接(四次挥手),浏览器对页面进行渲染呈现给用户。
HTTPS协议
HTTPS 是在 HTTP 和 TCP 之间建立了一个安全层,HTTP 与 TCP 通信的时候,必须先进过一个安全层,对数据包进行加密,然后将加密后的数据包传送给 TCP,相应的 TCP 必须将数据包解密,才能传给上面的 HTTP。
HTTPS是通过SSL和TLS进行加密。
SSL和TLS的区别?
SSL和TLS都是加密协议,有网络请求的地方就可以使用这两种协议在传输层进行加密,确保数据传输的安全,SSL是TLS的前身。
我们现在应该使用TLS协议,在2011年和2015年的时候SSL2.0和SSL3.0就已经分别被弃用了,而且由于漏洞的缘故,如果你的服务器配置了SSL的协议,还得手动将他们禁用掉。所以我们只给服务器配置TLS协议就好了,有的服务对TLS版本有要求,你可以在SSL Server Test查看服务器的证书及协议等配置。
HTTPS工作流程
- 客户端发起HTTPS请求,连接到服务器的443端口。
- 服务器必须要先申请好一套数字证书(证书内容有公钥、证书颁发机构、失效日期等)。
- 服务器将自己的数字证书发送给客户端(公钥在证书里面,私钥由服务器持有)。
- 客户端收到数字证书之后,会先验证证书的合法性。如果证书验证通过,就会使用伪随机数生成器(/dev/random)随机生成一个对称密钥,使用证书的公钥加密这个对称密钥。
- 客户端将公钥加密后的对称密钥发送到服务器。
- 服务器接收到客户端发来的密文密钥之后,用自己之前保留的私钥对其进行非对称解密,解密之后就得到客户端的对称密钥,然后用客户端的对称密钥对返回数据进行加密,这样传输的数据都是密文了。
- 服务器将加密后的密文数据返回到客户端。
- 客户端收到后,用自己的对称密钥对其进行对称解密,得到服务器返回的数据。
HTTP 与 HTTPS 的区别
- HTTP 是明文传输协议,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全
- HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,谷歌、百度优先索引HTTPS网页
- HTTPS需要用到SSL证书,而HTTP不用(HTTPS是安装SSL的服务器,HTTP是未安装SSL的服务器)
- HTTPS标准端口443,HTTP标准端口80
- HTTPS基于传输层,HTTP基于应用层
- HTTPS在浏览器显示绿色安全锁,HTTP没有显示
HTTPS那么安全可靠,为何不所有的Web网站都使用HTTPS
- 首先,很多人还是会觉得HTTPS实施有门槛,这个门槛在于需要权威CA颁发的SSL证书。从证书的选择、购买到部署,传统的模式下都会比较耗时耗力。
- 其次,HTTPS普遍认为性能消耗要大于HTTP,因为与纯文本通信相比,加密通信会消耗更多的CPU及内存资源。如果每次通信都加密,会消耗相当多的资源,平摊到一台计算机上时,能够处理的请求数量必定也会随之减少。但事实并非如此,用户可以通过性能优化、把证书部署在SLB或CDN,来解决此问题。举个实际的例子,“双十一”期间,全站HTTPS的淘宝、天猫依然保证了网站和移动端的访问、浏览、交易等操作的顺畅、平滑。通过测试发现,经过优化后的许多页面性能与HTTP持平甚至还有小幅提升,因此HTTPS经过优化之后其实并不慢。
- 除此之外,想要节约购买证书的开销也是原因之一。要进行HTTPS通信,证书是必不可少的。而使用的证书必须向认证机构(CA)购买。
- 最后是安全意识。相比国内,国外互联网行业的安全意识和技术应用相对成熟,HTTPS部署趋势是由社会、企业、政府共同去推动的。
总结
HTTP工作流程
- 客户端通过域名进行访问,先进行DNS域名解析。
- 之后客户端请求与web服务器建立TCP连接(三次握手)。
- 建立连接后,客户端向web服务器发送一个HTTP请求。
- 服务器响应HTTP请求,客户端的浏览器得到HTML代码。
- 浏览器解析HTML代码,并请求HTML代码中的资源。(浏览器拿到HTML文件后,开始解析HTML代码,遇到静态资源时,就向服务器去请求下载。)
- 断开TCP连接(四次挥手),浏览器对页面进行渲染呈现给用户。
HTTPS工作流程
- 客户端发起https请求到服务端的443端口(DNS解析、tcp连接)
- 服务端会先发送服务端证书文件给客户端
- 客户端会先验证服务端证书文件有效性
- 客户端验证通过后会使用服务端证书文件里的公钥加密自己使用伪随机数生成的绘画密钥,并发送给服务端
- 服务端会使用私钥对加密的会话密钥进行解密获取会话密钥
- 之后服务端和客户端的通信数据都会使用会话密钥传输和解密获取