目录
一.HTTP
1.关于HTTP经常精被问到的问题
- Http与Https的区别?
- URI和URL的区别?
- HTTP方法有哪些?
- 一次完整的HTTP请求所经历。
- 常见的HTTP相应状态码。
1.Http与Https的区别
- HTTP的URL以http://开头,而HTTPS 的URL 以https://开头
- HTTP是不安全的,而HTTPS是安全的
- HTTP标准端口是80,而HTTPS 的标准端口是443
- 在OSI网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层HTTP无法加密,而HTTPS 对传输的数据进行加密
- HTTPS 需要CA机构颁发的SSL证书,有这个globalsign,godaddy
- HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的
- HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题
2.URI和URL的区别
URI和URL都定义了资源是什么,但URL还定义了该如何访问资源。URL是一种具体的URI,它是URI的一个子集,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI 是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的。uri是理论或者说规范是抽象的,url是按照规范的具体实现。
3.HTTP方法有哪些
- GET:请求指定的页面信息,返回实体主体;
- HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于捕获报头;
- POST:向指定资源提交数据进行处理请求(比如表单提交或者上传文件),。数据被包含在请求体中。
- PUT:从客户端向服务端传送数据取代指定的文档的内容;
- DELETE:请求删除指定的页面;
- CONNNECT:HTTP1.1协议中预留给能够将连接方式改为管道方式的代理服务器;
- OPTIONS:允许客户端查看服务器的性能;
TRACE:回显服务器的请求,主要用于测试或者诊断。4.一次完整的HTTP请求所经历
- 域名解析
- 发起TCP的3次握手
- 建立TCP连接后发起http请求
- 服务器端响应http请求,浏览器得到html代码
- 浏览器解析html代码,并请求html代码中的资源
- 浏览器对页面进行渲染呈现给用户
5.常见的状态码:
- 200,201(成功请求并创建了新的资源)
- 202(已经接受请求,但未处理完成)
- 400 (客户端请求的语法错误,服务器无法理解)
- 401(Unauthorized)请求要求用户的身份认证
- 403(Forbidden)服务器理解请求客户端的请求,但是拒绝执行此请求
- 404(服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
- 500(服务器内部错误,无法完成请求)
2.什么是HTTP
http协议 即超文本传送协议,http是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应
3.Http的历史
早在 HTTP建立之初,主要就是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器
- Http0.9 ->1991
- Http1.0 ->1996
- Http1.1 ->1999
- Http2 ->2015
4.HTTP1.1
特点;
- 提供了更多选择的缓存头来控制缓存策略带宽优化及网络连接的使用
- Host头处理,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址
- 最重要的是长连接,有一个叫做Connection的信息,默认设置为keep-alive
- 错误通知的管理
缺点:
- 队头阻塞
- 流量控制
5.SPYD
为了解决HTTP1.X存在的问题google研发了SPYD(现在已经不再使用)
新特性:
- 降低延迟,针对HTTP高延迟的问题(多路复用的方式,共享一个TCP连接)
- 请求优先级
- Header压缩
- 基于HTTPS的加密协议传输服务端推送
6.HTTP2
HTTP推出HTTP2解决问题
优点:
多向请求与响应在HTTP 1.x中,如果客户端想发送多个并行的请求以及改进性能,那么必须使用多个TCP连接。这是HTTP 1.x交付模型的直接结果,该模型会保证每个连接每次只交付一个响应(多个响应必须排队)。更糟糕的是,这种模型也会导致队首阻塞,从而造成底层TCP连接的效率低下。HTTP 2.0中新的二进制分帧层突破了这些限制。客户端和服务器可以把HTTP消息分解为互不依赖的帧,然后乱序发送,最后再在另一端把它们重新组合起来。把HTTP消息分解为独立的帧,交错发送,然后在另一端重新组装是HTTP 2.0最重要的一项增强。事实上,这个机制在整个Web技术栈中引发了一系列连锁反应,从而带来巨大的性能提升。
HTTP2.0多路复用的好处:
HTTP性能优化的关键并不在于高带宽,而是低延迟。TCP连接会随着时间进行自我「调整」,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度(还记得TCP拥塞机制吗)。这种调整则被称为TCP慢启动。由于这种原因,让原本就具有突发性和短时性的HTTP连接变的十分低效。HTTP/2通过让所有数据流共用同一个连接,可以更有效地使用TCP连接,让高带宽也能真正的服务于HTTP的性能提升。
请求优先级和分帧:
帧是HTTP2的最小单位,把HTTP消息分解为很多独立的帧之后,就可以通过优化这些帧的交错和传输顺序,进一步提升性能。为了做到这一点,每个流都可以带有一个31比特的优先值:0表示最高优先级;2的31次方-1表示最低优先级。有了这个优先值,客户端和服务器就可以在处理不同的流时采取不同的策略,以最优的方式发送流,消息和帧。具体来讲,服务器可以根据流的优先级,控制资源分配(CPU、内存、带宽),而在响应数据准备好之后,优先将最高优先级的帧发送给客户端。
服务推送:
这是HTTP 2.0新增的一个强大的新功能,就是服务器可以对一个客户端请求发送多个响应。换句话说,除了对最初请求的响应外,服务器还可以额外向客户端推送资源而无需客户端明确地请求。为什么需要这样一个机制呢?通常的Web应用都由几十个资源组成,客户端需要分析服务器提供的文档才能逐个找到它们。那为什么不让服务器提前就把这些资源推送给客户端,从而减少额外的时间延迟呢?服务器已经知道客户端下一步要请求什么资源了,这时候服务器推送即可派上用场。
header压缩:
在HTTP/1中,我们使用文本的形式传输header,在header携带cookie的情况下,可能每次都需要重复传输几百到几千的字节。为了减少这块的资源消耗并提升性能,HTTP/2对这些首部采取了压缩策略。HTTP/2在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键一值对,对于相同的数据,不再通过每次请求和响应发送;首部表在 HTTP/2的连接存续期内始终存在,由客户端和服务器共同渐进地更新;每个新的首部键―值对要么被追加到当前表的末尾,要么替换表中之前的值。
存在的问题:
虽然HTTP/2解决了很多之前旧版本的问题,但是它还是存在一个巨大的问题主要是底层支撑的TCP协议造成的。前面提到 HTTP/2使用了多路复用,一般来说同一域名下只需要使用一个TCP连接。但当这个连接中出现了丢包的情况,那就会导致 HTTP2os的表现情况反倒不如HTTP/1了.
因为在出现丢包的情况下,整个TCP都要开始等待重传,也就导致了后面的所有数据都被阻塞了。但是对于HTTP/1.1来说,可以开启多个TCP连接,出现这种情况反到只会影响其中一个连接,剩余的TCP连接还可以正常传输数据。
二.HTTPS
1.什么是HTTPS
是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性.
2.Certificate Authorities
Certificate Authorities -证书颁发机构(CA)是HTTPS能够实现安全通信的必要的基本组成部分。这些颁发的证书要加载到网站中,以便客户可以安全地进行通信。
3.SSL
SSL的全称是Secure Sockets Layer也就是安全套接字层,它最初是由
Netscape于90年代初期构建的。版本1.0没有被外部使用,从版本2.0开始也就是1995年开始问世。这确实是我们第一次开始在网络浏览器中大规模使用安全传输层。随后是第二年的版本3.0。这是SSL的最后一个主要版本。
4.TLS
TLS全称是Transport Layer Security(传输安全层)。1999年作为SSL3.0的升级版现身,它原本打算成为SSL的继任者,这也是关于这两个术语的第一个真正重要的观点。自本世纪初以来,TLS一直是网络上实现HTTPS的标准。SSL停下了,TLS的时代开启了。版本1. 1于2006年问世,而版本1.2则在此后2年问世也就是2008。2018年TLS 1.3上线了。随着这些新版本的发布,我们可以看到安全性和速度等方面的进步。它们继续使安全通信变得更强大,更快和更高效。
TLS握手:
当客户端(例如浏览器)想要通过HTTPS连接到服务器时,它们会开始进行TLS握手。这是客户端和服务器需要相互协商并就如何安全通信达成一致的地方。此握手由客户端问候开始,并且在此请求中,客户端还会将例如它支持的最高级别的TLS和其他信息(比如受支持的密码套件)一起发送.