http - 通信协议是半双工还是全双工?
问题描述
我知道有很多不同的,comminucation protocals
比如:http, tcp, ssh, socks5, SMTP, POP,
等等。
我也知道要实现通信,我们需要连接localhost:localport
到remotehost:remoteport
. 例如,如果我们用谷歌搜索某些东西,我们会将随机本地连接port
到www.google.com: 80
. 如果我们ssh
是远程主机,我们将随机连接本地port
到remotehost: 22
.
我的问题是:通信协议是半双工还是全双工?
我想答案是Half-duplex
。因为我认为在http
连接中,首先我们从localhost:localport
to发送请求remotehost:80
,然后远程服务器从remotehost:80
to发送响应localhost:localport
。同样,在ssh
连接中,我们首先将ssh
命令发送给远程主机,远程主机接收到命令后,执行一些操作并将结果发送回本地主机。
localhost:localport
所以我认为在and之间的一个连接中remotehost:remoteport
,消息要么从localhost:localport
to发送remotehost:remoteport
,要么从remotehost:remoteport
to发送localhost:localport
。
我对吗?
解决方案
如本文所述:
SSH 是一种双向全双工协议,这意味着它不像 HTTP 那样同步,您需要发送消息才能发生响应。
使用 SSH,即使您保持沉默,远程主机也可能想告诉您一些事情。此连接器使用回调流方法将“发送”操作与“接收”操作分离。
如本 IETF 草案中所述,大多数实现都允许全双工 HTTP(用于 2xx 响应)。
全双工 HTTP 遵循基本的 HTTP 请求-响应语义,但也允许服务器在客户端向服务器发送请求正文的同时向客户端发送响应正文。
全双工 HTTP 的要求在现有的 HTTP(超文本传输协议——HTTP/1.1)规范中没有明确规定,本备忘录旨在在基本 HTTP 协议语义之上阐明全双工 HTTP 的要求。
推荐阅读
- php - 在 PHP 7.3.4 中调用获取资源间歇性地返回 nullptr
- python - Webscraping:如何检查属性是否存在以及它是否在没有结束程序的情况下继续
- java - 在 map reduce word count 程序中,需要获取单词所在的文件
- python - Python 点击选项卡失败并出现 Python AttributeError:模块 'readline' 没有属性 'redisplay'
- module - 在模块中增加数组
- javascript - 如何使用 google chome 开发工具解决 javascript 问题?解决这个问题的通常过程是什么?
- javascript - 打字稿如何动态导入?
- javascript - 从后端到前端的 DateTime 值
- python - 使用行的值在 pandas 中创建一个新列
- php - 使用 slugs 而不是 id