HTTP协议,一次完整的http请求的过程,http协议的特点,非持久连接和持久连接,http协议与TCP/IP协议的区别,TCP/IP协议的原理,http协议和https协议的区别,HTTP 1.0 1.1 2.0区别,https协议的不足之处,HTTPS协议的原理,Websocket协议,go websocket例子,
HTTP
https://zhuanlan.zhihu.com/p/452221091
HTTP介绍
超文本传输协议是一个简单的请求-响应协议,http协议在网络OSI模型中属于应用层协议,它是基于TCP协议的应用层传输协议。
http协议是用于从服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,网络传输更少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
http协议是一种无状态协议,本身不会对发过的请求、相应的通信状态持久化处理。这样做是为了保持http协议的简单性,从而能够处理大量的请求,提供效率。
一次完整的http请求的过程
- 对qq.com网址进行DNS域名解析,得到网址IP地址
- 根据IP找到相应的服务器,发起tcp三次握手
- 建立TCP连接后发起HTTP请求(TCP/IP五层模型经过物理硬件:路由器、网线、网卡等)
- 服务器响应HTTP请求,浏览器得到html代码
- 浏览器解析html代码,并请求html代码中的资源(如js、css图片等)(先得到html代码,才能去找这些资源)
- 浏览器对页面进行渲染呈现给用户
针对上面的过程,提出下面的几个问题。
第一,DNS如何进行域名解析的?
DNS域名解析采用的是递归查询的方式,过程是,先去找DNS缓存->缓存找不到就去找根域名服务器->根域名又会去找下一级,这样递归查找之后,找到了,给我们的web浏览器。
第二,为什么http协议要基于TCP来实现?
TCP是一个端到端的可靠的面向连接的协议,HTTP基于传输层TCP协议不用担心数据传输的各种问题(当发生错误时,会重传)。
第三,最后一步浏览器是如何对页面进行渲染的?
- 解析html文件构成 DOM树
- 解析CSS文件构成渲染树
- 边解析,边渲染
- JS 单线程运行,JS有可能修改DOM结构,意味着JS执行完成前,后续所有资源的下载是没有必要的,所以JS是单线程,会阻塞后续资源下载
http协议的特点
- 无连接。无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。早期这样做是因为请求资源少,追求快。后来可以通过
Connection:Keep-Alive
实现长连接。 - 独立灵活。意味着只要客户端和服务器知道如何处理数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type 来传输。
- 无状态。HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。如果服务器不需要先前信息,那么它的应答就比较快。但是缺少状态意味看如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,此时可以设置缓存。
- 支持客户端/服务端模式。
- 简单快速。客户端向服务器请求服务时,只需传送请求方法和路径。每一种请求方法规定了客户端与服务器联系类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
非持久连接和持久连接
在实际应用中,客户端往往会发出一系列请求,服务器就会对每个请求进行响应。对于这些请求/响应,如果每一次都经过一个单独的TCP连接发送,称为非持久连接。反之,如果每次都经过相同的TCP连接进行发送,称为持久连接。
非持久连接在每次处理完请求/响应之后都要断开连接,下一次再建立新的TCP连接,这样就造成了大量的通信开销。
非持久连接给服务器带来了沉重的负担,每台服务器可能非常多的请求。持久连接就是为了为了解决这个问题,其特点之一是一直保持TCP连接状态,直到遇到明确的中断请求后再终端连接。减少了通信开销,节省了通信量。
http协议与TCP/IP协议的区别
TCP/IP是传输层协议,主要解决数据如何在网络中传输(“搬运”);而HTTP是应用层协议,主要解决如何包装数据(“装配”)。我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。
web使用http协议做应用层协议,以封装http文本信息,然后使用TCP/IP做传输层协议,将其发到网络上。
TCP/IP协议的原理
TCP/IP协议是传输控制协议/网际协议,TCP/IP是现代互联网的核心技术,由IETF定义。所有的系统、终端、线路、用户、开发者,都必须遵守TCP/IP协议族所规定的法则!IP世界的根本法就是TCP/IP协议族。TCP/IP也就像一个组,协议族。其中还包括HTTP、Telnet、FTP、RIP、UDP等等。其名字来源于其中最主要的两个协议-------TCP与IP。它们分别在TCP/IP模型的第二层与第三层。
http协议和https协议的区别
http协议的不足之处:
- 通信使用明文,不加密(之前http设计是用来传输html的),内容容易背窃听;
- 不验证通信方的身份,因此有可能遇到伪装;
- 无法证明报文的完整性,所以有可能已遭篡改;
HTTP 1.0 1.1 2.0区别
谷歌浏览器按F12,Name点击右键即可显示使用的HTTP协议,现在大多数使用的都是HTTP2.0(h2)。
https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/232
https://juejin.cn/post/6963931777962344455
https://segmentfault.com/a/1190000015316332
http1.0:无状态,无连接,默认不支持长连接(需要设置keep-alive参数指定),连接无法复用,不支持断点续传。
- 协商缓存使用expires、last-modified来判断
- 不支持长链接
http1.1:默认支持长连接,连接可复用,支持断点续传、缓存处理。
- 现阶段使用范围最广的http协议
- 协商缓存控制使用date和last-modified判断
- 默认开启长链接(keep-alive),一个tcp可以复用发送多个http请求
- 支持管线化(pipelining),不再等上一个请求完成之后才开始发送下一个请求,可以连续发送多个http请求头,然后按照顺序响应
http2.0:在http1.1的基础上增加了多路复用、并行请求,管道化,报头压缩,二进制格式编码传输,服务器推送。
- 多路复用特性
- http2.0复用一个tcp连接完成所有请求
- 每个http请求报文会被切片成帧(iframe),用来传输http2.0的tcp通道称为流(stream); 不同的帧在流(stream)里面传播,每个帧会被压缩为二进制,所以http2.0是二进制格式
- 不同流的帧可以单独无序的传输,不用按照顺序产生阻塞问题,当所有帧发送完毕,按照顺序重新组合成完整报文
- 同时帧上面可以携带priority参数规定优先级,可以规定那些帧先被发送和组装
- 使用头部压缩算法,传输效率更高
- 服务器推送,服务器可以主动推送资源到客户端,以备后续使用
https协议的不足之处:
-
加密解密过程复杂,导致访问速度慢;
-
加密需要认向证机构付费
-
整个页面的请求都要使用HTTPS
https是http协议的安全版,就是在http下加入SSL层。由于https的安全基础是SSL,因此通过它传输的内容都是经过SSL加密的,即HTTP+加密+认证+完整性保护=HTTPS。
它的主要作用为:
- 建立一个信息安全通道,保证数据传输的安全;
- 确认网站的真实性。凡是使用了https的网站,都可以通过点击浏览器地址栏的锁头标志来查看网站认证之后的真实信息,也可以通过CA机构颁发的安全签章来查询。
HTTPS协议的原理
HTTPS采用了共享秘钥加密(对称)和公开密钥加密(非对称)两者并用的混合加密机制。如果秘钥能够实现安全交换,那么有可能会考虑仅使用公开密钥加密来通信。但是公开密钥加密和共享秘钥加密相比,处理速度会变慢。所以应充分利用两者各自的优势, 将多种方法组合起来用于通信。 在交换密钥阶段使用公开密钥加密方式,之后的建立通信交换报文阶段 则使用共享密钥加密方式。
HTTPS握手过程的简单描述:
- 浏览器将自己支持的一套加密规则发送给服务器——服务器获得浏览器公钥;
- 服务器从中选出一套加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址、加密公钥、以及证书的分发机构等基本信息。——浏览器获得服务器的公钥;
- 获得网站证书之后,浏览器要做以下的工作:
- 验证证书的合法性,即颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等。如果证书受信任,则浏览器地址栏会显示一个小锁头,否则会给出证书不受信任等提示;
- 如果证书受信任,或者客户端接受了不受信任的证书,浏览器会生成一串随机数的密码,这就是接下来通信的秘钥,并用证书中提供的公钥加密。这一步就是,共享秘钥加密。
- 使用约定好的HASH计算握手信息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站
- 简单整理一下这个步骤,浏览器验证 -> 随机密码 服务器的公钥加密 -> 通信的密钥 通信的密钥 -> 服务器
- 网站接收浏览器发来的数据之后要做以下的操作:
- 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
- 使用密码加密一段握手消息,发送给浏览器。
- 小结本步骤,服务器用自己的私钥解出随机密码 -> 用密码解密握手消息(共享密钥通信)-> 验证HASH与浏览器是否一致(验证浏览器)
Websocket
1.1 webSocket介绍
websocket是一种网络通信协议。RFC6455定义了它的通信标准。
websocket是HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议。
HTTP协议是一种无状态的、无连接的、单向的应用层协议。它采用了请求/响应模型。通信请求只能由客户端发起,服务端对请求做出应答处理。
这种通信模型有一个弊端:HTTP协议无法实现服务器主动向客户端发起消息.
这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获取就非常麻烦。大多数web应用程序将通过频繁的异步AJAX请求实现长轮询。轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP连接始终打开)。
http协议和Websocket协议:
1.2 websocket协议,两部分:握手、交互和关闭
协议分为三部分:握手、交互和关闭。
握手是基于http协议的。
1.3请求Header
请求Header如下:
GET ws://localhost/chat HTTP/1.1 Host: localhost Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Origin: localhost Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13
其中:
Host: server.example.com
:表示将要连接的WebSocket地址。Connection: Upgrade
:需要升级HTTP连接。Upgrade: websocket
:将HTTP连接升级至WebSocket连接。Sec-WebSocket-Key:dGhlIHNhbXBsZSBub25jZQ==
:客户端生成的WebSocket连接密钥。客户端采用base64编码的24位随机字符序列,服务器接受客户端HTTP协议升级的证明。要求服务端响应一个对应加密的sec-websocket-Accept头信息作为应答。Sec-WebSocket-Protocol: chat, superchat
:指定哪些协议是客户端可以接受的。Sec-WebSocket-Version: 13
:WebSocket版本号。
1.4响应Header
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Sec-WebSocket-Protocol: chat
其中:
Upgrade: websocket
:确认将HTTP连接升级至WebSocket连接。Connection: Upgrade
:确认升级HTTP连接。Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo
:服务端根据客户端的连接密钥生成的服务端密钥。Sec-WebSocket-Protocol: chat
:选择的WebSocket协议。
1.5 握手过程
- 客户端发起握手请求,升级连接,升级为websocket
Upgrade: websocket
Connection: Upgrade - 服务端响应状态码101,表示连接建立成功
- 服务端和客户端双向数据交互,接收或发送消息
- 断开连接
neuron获取视频流逻辑:
- rtsp(或rtmp)可以获取视频流
- 视频流通过websocket传输,客户端每个1分钟定时发送获取rtsp请求,服务端返回二进制的视频流给前端,前端加载到web界面
参考:
https://blog.csdn.net/qq_43751336/article/details/109546788
https://juejin.cn/post/6844903583222071304
1.6 go websocket例子
长连接,服务器
在线测试工具:http://www.jsons.cn/websocket/
go语言websocket
https://blog.csdn.net/swan_tang/article/details/103530311
多房间聊天室websocket(一)
https://blog.csdn.net/swan_tang/article/details/103533857
多房间聊天室websocket(二)
https://blog.csdn.net/swan_tang/article/details/103538543
Socket
在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程,“IP地址+端口号”就称为socket。
单工、全双工和半双工
单工:仅能单方向传输数据。
全双工:两台通讯设备之间,允许有双向的资料传输。
半双工:允许两台设备之间的双向资料传输,但不能同时进行。
僵尸进程
linux环境中,父进程fork出子进程,子进程先于父进程退出,父线程没有回收子进程的资源,子进程残留资源存放于内核中,变成僵尸进程。
查找僵尸进程
ps aux | grep Z
杀掉僵尸进程
kill -s SIGCHLD pid
将这里的 pid 替换成父进程的进程 id,这样父进程就会删除所有以及完成并死掉的子进程了。
Unbuntu20.04环境下一款开源翻译软件:goldendict的安装与配置(图文)
sudo apt install goldendict -y http://dict.youdao.com/search?q=%GDWORD%&ue=utf8 #有道翻译引擎 #快捷键 选中单词之后,Ctrl + C + C
https://blog.csdn.net/weixin_37926734/article/details/122923678
https://zhuanlan.zhihu.com/p/139711598
https://blog.csdn.net/networkhunter/article/details/117127021
ok
本文作者:凌易说-lingyisay
本文链接:https://www.cnblogs.com/ling11/p/16203829.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2019-04-28 jmeter安装使用教程