http相关知识,tcp知识,web实时推送

http状态码:
1xx 指示信息-表示请求已经接受,继续处理 表示客户端需要提交下一步请求
2xx 成功 表示请求已被成功接受
304未修改,客户端的缓存是最新的
3xx 重定向 要完成请求需要进一步操作 302(重定向), 307 和 304(拿缓存)
4xx 客户端错误 请求有语法错误等
5xx 服务器端错误 服务器未能实现合法的请求

403 //对被请求的页面访问禁止 404 请求资源不存在 比如输入了错误的URL
post 向URL指定的资源提交数据
put 提交数据 put指定了在服务器上的位置 而post没有
head 只请求页面的首部
delete 方法:删除服务器上的某资源
options 方法:它用于获取当前 URL支持的方法,如果请求成功,会有一个 Allow 的头包含类似“GET,POST”这样的信息

持久连接:只要任意一端没有提出明确断开连接,则保持TCP的连接状态

https的工作原理:!!!
https在HTTP上建立了SSL加密层,对传输数据进行了加密,是http的安全版
主要作用:
1.对数据进行加密,并建立一个信息安全通道,来保证传输数据的过程中的数据安全
2.对网站服务器进行真实身份认证
http使用的是明文进行发送。
完成了数据隐私性传输,完整性的校验,身份认证
http先和SSL通信,再由SSL和tcp通信。
对称加密:加密和解密用同一个秘钥,将秘钥也需要发送给对方。
非对称加密:私有秘钥不能让任何人知道,公开秘钥可以随意发布
使用公开秘钥加密的方式:发送密文的一方使用对方的公开秘钥进行加密,
对方收到后,利用私钥进行解密。
非对称加密特点是信息一传输多,服务端只需要维护一个私钥就能和多个客户端进行通信

http使用的方式:在交换秘钥环节使用非对称加密方式,之后的建立通信交换报文阶段采用对称加密方式

发送密文的一方使用对方的公开秘钥加密处理对称的秘钥,然后对方利用自己的私钥进行解密拿到对称的秘钥,这样可以确保秘钥在安全的情况下,使用对称秘钥进行加密

解决报文是否可能遭到篡改 – 数字签名
确定消息是由发送方签名并且发过来的,因为别人假冒不了
数字签名保证消息的完整性,证明数据没有被篡改
文本用hash生成消息摘要 再由私钥生成数字签名,发送给接受者
接受者只有用发送者的公钥才能进行解密,然后用hash函数产生摘要信息。

解决通信双方身份可能被伪装的问题:数字证书
数字认证机构处于客户端和服务器双方都可信赖的第三方机构的立场上

https通信过程
1.client发送https请求 server的连接端口为443
2.server把事先配置好的公钥证书返回给客户端
3.client验证公钥证书
4.clent使用伪随机数产生对称秘钥,然后用证书的公钥加密,发送给server
5.server利用自己私钥进行解密,client和server拥有了相同的私钥
6.server使用对称秘钥加密明文内容,发送给client
7.client使用对称秘钥解密密文,得到明文内容
8.client再次发送http,使用对称秘钥加密请求B,然后server使用对称秘钥解密

tcp3次握手过程
client -> server发送
server 接收后 回复ack
client收到ack后回复ack

问:为什么建立连接需要3次
答:防止失效的连接请求报文段被服务端接收,从而产生报错 A是client,B是server
发送的失效报文到达时,A和B已经断开了,但是B又建立了连接,向A发送数据,所以造成资源浪费
tcp 4次挥手
客户端打算关闭连接
tcp停止释放报文,fin = 1
服务器接收到后确认,确认号是ack + 1
客户端到服务器这个连接已经释放,但是服务器到客户端还未释放,client不能发送,server不能接受,但是server可以发送,client可以接受
因为tcp是全双工的,两端可以同时发送和接收数据

服务器到客户端发送fin
客户端接收到后,必须发出请求,ack = 1
运输层中有传输控制协议tcp和用户数据协议udp
dns查看 浏览器缓存 -> 系统缓存 -> 路由器缓存

http/2相比于http/1,可以说大幅度提高了网页的性能,只需要升级到该协议就能减少很多之前需要做的性能优化工作,
当然兼容问题以及如何优雅降级应该是国内还不普遍使用的原因之一。
http/3相对于http/2又是一个提升
http协议:
处于计算机网络中的应用层,http是建立在tcp协议之上,所以http协议的瓶颈及其优化技巧都是基于tcp本身的特性,
例如tcp建立的3次握手和断开连接的4次挥手以及每次建立连接带来的RTT延迟时间

http/1.x缺陷
连接无法复用 每次都会导致3次握手和慢启动,慢启动对大量小文件请求影响较大。
head-of-line blocking(holb) 导致宽度无法被充分利用,以及后续请求被阻塞
http/1.x在传输数据时,所有传输内容都是明文,客户端和服务端都无法验证对方身份,这在一定程度上无法保证数据的安全性

http/2方法/状态码/语义都与http/1.x一样,http/2基于SPDY3协议,专注于性能,最大的目标是在用户和网站之间只用一个连接。

http/2采用二进制格式传输数据,而非http1.x的文本格式。
http/2采用了多路复用技术。
解决了同一个域名下的请求数量的问题。
同时也更容易实现全速传输。
http/2
同域名下所有通行都在单个连接上完成。
单个连接可以承载任意数量的双向数据流。
数据流以消息的形式发送,而消息又由一个或多个帧组成,多个帧之间可以乱序发送,因为根据帧首部的流标识可以重新组装。
同个域名只需要占用一个 TCP 连接,使用一个连接并行发送多个请求和响应,消除了因多个 TCP 连接而带来的延时和内存消耗。
并行交错地发送多个请求,请求之间互不影响。
并行交错地发送多个响应,响应之间互不干扰。
在HTTP/2中,每个请求都可以带一个31bit的优先值,0表示最高优先级, 数值越大优先级越低。有了这个优先值,客户端和服务器就可以在处理不同的流时采取不同的策略,以最优的方式发送流、消息和帧。
http/2只采用一个tcp协议,
http/2压缩了header
server-push也叫cache push
某些资源客户端一定会请求,可以采用服务端push方式,提前给客户端必要的资源。
http3协议是基于QUIC协议,QUIC协议是基于UDP协议。
QUIC新功能:
0-RTT 通过使用类似TCP快速打开的技术,缓存当前会话的上下文,在下次恢复会话的时候,只需要将之前的缓存传递给服务端验证通过就可以进行传输了。0-RTT建立连接可以说是QUIC相比HTTP2最大的性能优势。
https建立一次完全握手需要3个RTT,而QUIC建立在UDP基础上,同时又实现了0RTT的安全握手,所以在大部分情况下,只需要0个RTT就能实现数据传送。
同一条QUIC连接上可以创建多个stream,来发送多个http请求。
QUIC有向前纠错机制,每个数据包除了它本身的内容之外,还包括了部分其他数据包的数据,因此少量的丢包可以通过其他包的冗余数据直接组装而无需重传。
http/1.x有连接无法复用,队头阻塞,协议开销大和安全因素等多个缺陷。
http/2通过多路复用,二进制流,Header等压缩技术,极大的提高了性能。但是还是存在性能问题。
quic基于udp协议来实现,是http/3中的底层支撑协议,该协议基于UDP,又吸取了TCP中的精华,实现了既块又可靠的协议传输。

web实时推送机制 将后台发生的变化主动的,实时的传送到浏览器端。而不需要用户端主动刷新页面
轮询是客户端和服务器之间会一直进行连接,每隔一段时间就询问一次,缺点:连接数会非常多,一个接受,一个发送,
而且每次发送请求都会有http的header,会很耗流量,也会消耗cpu的利用率。 长轮询客户端发送http给服务器后,看有没有新消息,如果没有新消息,就一直等待,当有新消息的时候,才会返回给客户端。在某种程度上减小了网络带宽和CPU利用率等问题。由于http数据包的头部数据量往往很大(通常有400多个字节),但是真正被服务器用到的数据却很少,
这样的数据在网络上周期性的传输,
难免对网络带宽是一种浪费 iframe流方式是在页面中插入一个隐藏的iframe,利用其src属性在服务器和客户端之间建立一条长连接,服务器想iframe传输数据,来实时更新页面。
优点:消息能够实时到达;浏览器兼容好
缺点:服务器维护一个长连接会增加开销;IE、chrome、Firefox会显示加载没有完成,图标会不停旋转。
web socket机制,web服务器和客户端之间建立连接后,之后所有的通信都依靠这个专用协议进行。任意一方可直接向对方发送报文。
http是半双工协议,web socket是全双工协议。
tcp和udp的比较
tcp/ip是互联网相关的各类协议族的总称,例如tcp,udp,ip,ftp,http,icmp,smtp等
是互联网的基础,一系列网络协议的总称,
这些协议可以划分为四层,分别为链路层、网络层、传输层和应用层。
tcp/ip的4层模型
链路层 -> 网络层 -> 传输层 -> 应用层
udp协议全称是用户数据报协议,在网络中它与 TCP 协议一样用于处理数据包,是一种
无连接的协议
面向无连接,不需要和tcp一样在发送数据前建立3次握手。
有单播,多播,广播的功能。
支持一对一,一对多,多对多,多对一的方式。
udp是面向报文的,是不可靠的。
头部开销小,传播数据报文是很高效的
两台计算机通信时,需要畅通并且可靠。
当你想查看网页或查看电子邮件时,希望完整且按顺序查看网页,而不丢失任何内容。当你下载文件时,希望获得的是完整的文件,而不仅仅是文件的一部分,因为如果数据丢失或乱序,都不是你希望得到的结果,于是就用到了 TCP。
tcp协议全称是传输控制协议,是一种面向连接的,可靠的,基于字节流的传输层通信协议.
3次握手和4次挥手
tcp仅支持单播传输
ajax是一种
异步请求数据的web开发技术**,在不需要重新刷新页面的情况下,ajax通过异步请求加载后台数据,并在前端显示。
ajax目的是提高用户体验,减少网络数据传输量
基于浏览器提供的xmlhttprequest对象,使得浏览器可以发出http请求和接收到http响应。
浏览器接着干自己的事情