HTTP是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
HTTP通常跑在TCP/IP协议栈之上,依靠IP协议实现寻址和路由、TCP协议实现可靠数据传输、DNS协议实现域名查找、SSL/TLS协议实现安全通信。当然,WebSocket、HTTPDNS依赖于HTTP。
- HTTP 有什么缺点
- 通信使用明文(不加密),内容可能会被窃听
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,所以有可能已遭篡改
- HTTP2 有什么好处
- 多路复用 (Multiplexing):多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。也就是说一个TCP连接可以一次发送和接受多个请求拉。
- 二进制分帧
- 首部压缩
- 服务推送
- 为什么说HTTPS是安全的
- 服务器用非对称加密算法RSA生成公钥和私钥,把公钥放在证书里发送给客户端,私钥自己保存(证书也可以是在本地电脑,总之客户端持有公钥,服务器持有私钥)
- 客户端首先向一个权威的服务器检查证书的合法性,如果证书合法,客户端产生一段随机数,这个随机数就作为通信的密钥,我们称之为对称密钥,用公钥加密这段随机数,然后发送到服务器
- 服务器用密钥解密获取对称密钥,然后,双方就已对称密钥进行加密解密通信了
- HTTPS的优缺点
- 使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器
- 由SSL+HTTP协议构建的可进行加密传输
- 增加消耗:HTTPS协议会使页面的加载时间延长近50%,增加10%到20%的耗电。此外,HTTPS协议还会影响缓存,增加数据开销和功耗。
- HTTPS协议的安全是有范围的:在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用
- SSL证书的信用链体系并不安全:特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。
- SSL的专业证书需要购买:功能越强大的证书费用越高,且SSL证书通常需要绑定固定IP
- HTTPS 连接服务器端资源占用高较高多,相同负载下会增加带宽和服务器投入成本
- TCP, UDP 的区别
- TCP和UDP都是传输层协议,但是两者具有不同的特性和应用场景
- TCP(Transmission Control Protocol传输控制协议)是一种面向连接的(在客户端和服务器之间传输数据之前要先建立连接),可靠的,基于字节流的传输通信协议,连接需要建立三次握手,四次挥手,效率低,全双工
- UDP(User Datagram Protocol用户数据报协议)是一种面向无连接(发送数据之前不需要先建立连接),不可靠的,面向报文的传输通信协议,效率高,支持一对一,一对多和多对多的交互通信
- 三次握手的过程,为什么握手三次, 为什么挥手四次
- TCP连接建立(三次握手):
- 客户端发送请求【寻址请求】
- 服务器端收到报文请求,回应客户端【确认请求】
- 客户端收到服务端的报文进行回应。【连接请求】
- 三次握手完成,TCP客户端和服务端成功地建立连接,可以传输数据。
- TCP终止一个连接(四次握手):
- 数据验证请求码
- 传输结束标记
- 确认结束标记
- 连接断开标记
- TCP连接建立(三次握手):
总结:
建立连接时,如果只有两次握手,服务器的返回丢失时,客户端无法得知服务器已经准备好,而服务器以为客户端将随时发送请求,造成资源浪费,因此只有客户端返回第三次握手,连接才算真正建立;
终止连接时,服务端在收到终止命令和真正终止之间会有时间延迟,因此先告诉客户端已收到消息,等彻底终止以后再告诉客户端一次,客户端再次返回告知服务端已收到终止的消息,连接才算终止。
http8种请求方法
- Get 向特定资源发出请求(请求指定页面信息,并返回实体主体)
- Post 向指定资源提交数据进行处理请求(提交表单、上传文件),又可能导致新的资源的建立或原有资源的修改
- opions 返回服务器针对特定资源所支持的HTML请求方法 或web服务器发送测试服务器功能(允许客户端查看服务器性能)
- Head 与服务器索与get请求一致的相应,响应体不会返回,获取包含在小消息头中的原信息(与get请求类似,返回的响应中没有具体内容,用于获取报头)
- Delete 请求服务器删除request-URL所标示的资源(请求服务器删除页面)
- Trace 回显服务器收到的请求,用于测试和诊断
- Connect HTTP/1.1协议中能够将连接改为管道方式的代理服务器
- Put 向指定资源位置上上传其最新内容(从客户端向服务器传送的数据取代指定文档的内容)
- PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新。
HTTP的请求头标签
-
Expires :提供一个日期和时间,响应在该日期和时间后被认为失效
-
Cache-control: private/no-cache
-
If-Modified-Since:Fri, 12 May 2006 18:53:33 GMT
- 后面跟的时间是本地浏览器存储的文件修改时间
- 客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 报头,询问该时间之后文件是否有被修改过
- 如果服务器端的资源没有变化,则时间一致,自动返回HTTP状态码304(Not Changed.)状态码,
内容为空,客户端接到之后,就直接把本地缓存文件显示到浏览器中,这样就节省了传输数据量。
如果服务器端资源发生改变或者重启服务器时,时间不一致,就返回HTTP状态码200和新的文件内容,客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示到浏览器中。
-
Last-Modified: Fri, 12 May 2006 18:53:33 GMT
在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间
网友评论