作者回复: 笔记部分:
优秀,说得太棒了。做一点小小的说明:文中说的客户端和服务端的概念完全是从网络和协议的角度来进行的,和我们平时提到的选择 C/S 还是 B/S 的“应用模式”有所区别。HTTP 本身和选用 C/S(Client/Server)还是 B/S(Browser/Server)并没有必然关系。也就是说,无论你使用客户端还是浏览器,都可以使用 HTTP 方式和服务端交流。
思考题部分:
1. 分块传输和 Ajax 并没有直接联系,也就是说,分块传输可以使用、也可以不使用 Ajax 来完成。Ajax 的要点是使用异步 JavaScript 的方式来请求和处理网页上的数据。因此,这个问题,你可以再想想。:) (顺便预告一下,我们在 03 篇就会介绍其中的一个使用场景)
2. 正确。当然,还有其他的原则,比如数据传输的效率,可靠性,协议本身的向后兼容性,等等等等。
抓包的问题:正确,其它的基本都是 TCP 层的报文(当然,不只有连接建立握手的报文)。
作者回复: 嗯,了解。很好的建议。
作者回复: 专栏几乎所有的例子都可以使用别的 HTTPS 网站来完成。这一篇里面除了 HTTP/0.9 那个小部分不能以外,其它全部都可以使用百度或者 Bing 完成。:)
作者回复: 感谢你的回答,同时也感谢指出 Python3 下的方法。
关于你的问题,开始的部分是 TCP 的 handshake,后面还有数据传输,以及 teardown。
作者回复: 1. 对,“一次传不完”是其中一个应用场景。它和 TCP 或 UDP 的 packet 的概念有些像,但是他们是在不同的层次,一个是在应用层,一个是在传输层。
2. 嗯,这些都是很好的方面。
选修课堂问题:正确
作者回复: 你可以使用其它的 HTTPS 网站,原理是一样的。你也可以看其它的回复,有朋友给出了其它办法。
作者回复: 好问题。
这两个是不一样的,keep-alive 是不关闭 TCP 连接,也就是长连接,但是在不使用管道机制的情况下,交互是单工的,即客户端必须要等前一个请求的响应返回之后,新的请求才能发过去。而在使用管道机制的情况下,请求发送可以非阻塞,但是响应返回必须依然严格按照请求的顺序。
而多路复用则是基于流的,那么在传输的时候,无论请求还是响应,只要逻辑上允许就可以传输,如果两个请求没有依赖关系可以不必等待前一个返回而直接发送,虽说用的是同一条连接。
长连接需要客户端和服务端都要支持,同时 HTTP/1.1 的 keep-alive 要打开,对于这个 TCP 连接的维护,大多数 web 服务器都支持。
作者回复: 这个协议里面并未规定具体时间:在没有数据传输的时候,保持一定的时间,之后服务端和客户端都可以主动结束长连接。
作者回复: 关于 Google 那个,不清楚你的网络环境是否有特别的限制,否则应该是能够使用 telnet 的。你可以试试别的服务,看看telnet是否能访问。另外,telnet 只是建立了 tcp 连接,你需要发送消息才能得到响应。比如,在我的Mac上如下:telnet www.google.com 80
Trying 2607:f8b0:400a:809::2004...
Connected to www.google.com.
Escape character is '^]'.
GET /
...
netcat 的话,那个例子不是使用交互模式,而是直接运行:netcat www.google.com 80 < 文件路径
作者回复: 你要是能贴出问题来大家可能能一起看一下。另外,你看看是不是这个原因:由于某些原因我的文章中没有使用 python 3,如果你用的是 python3,命令是 python3 -m http.server 8080 (当然,如果你默认的 python 版本就是 3.xx 的,那么使用 python 替换 python3)
当然,你也完全可以抓访问其他网站的包,tcpdump 的命令需要稍微改一改(不是抓本机的 loopback 的包了)。
作者回复: 感谢你的认可!
作者回复: 其实流媒体有使用 HTTP 也有不使用 HTTP 的,其它方面理解正确。对于协议的问题,理解挺不错的,当然,这两个都 是开放的问题,你也可以看看其他人的回答 :)
作者回复: 在和网络、Web 接口、性能等问题打交道的时候,很常用。
作者回复: 你好 xcoder,别害怕,每个人不同领域的知识储备都不同。你要是能具体谈谈那些不懂,我可以想想办法帮你
作者回复: 你可以安装 Homebrew https://brew.sh/ 这个包管理工具,这样以后这些工具大多可以用它来安装,包括 netcat:
brew install netcat
作者回复: 既然你特别说到第二个问题,你的回答中“内外网的隔离”其实是它下层的协议,例如第三层的网络层中的 IP 协议关心的,而不是第七层应用层的 HTTP 所关心的。建议你阅读以下扩展阅读 OSI 相关的内容。
设计方面,本专栏中不会详细解读协议设计,但会有很多应用层协议的使用,以及特别强化 Web 接口的设计的介绍。:)
作者回复: 感谢。后面的文章也会尽量保持层次,每篇都有扩展阅读,争取让不同的人都有收获。当然,这篇是第一篇相对来说比较简单。
作者回复: 加油。特别是抓包这项技能,还是很实用的。当然,我只是给了个最简单例子。专栏后面我们还会使用抓包来分析问题。