如果在 macOS 系统下运行 telnet 命令,会与 Xshell 下略有不同。
先输入:
telnet www.taohui.pub 80
复制代码
按回车键后会出现:
Trying 116.62.160.193... Connected to www.taohui.pub. Escape character is '^]'.
复制代码
然后再输入:
GET /wp-content/plugins/Pure-Highlightjs_1.0/assets/pure-highlight.css?ver=0.1.0 HTTP/1.1
复制代码
回车后继续输入:
Host:www.taohui.pub
复制代码
输入完毕后,按两次回车即可。
https://www.ietf.org/rfc/rfc5234.txt
巴科斯范式的英文缩写为 BNF,它是以美国人巴科斯 (Backus) 和丹麦人诺尔 (Naur) 的名字命名的一种形式化的语法表示方法,用来描述语法的一种形式体系,是一种典型的元语言。又称巴科斯 - 诺尔形式 (Backus-Naur form)。它不仅能严格地表示语法规则,而且所描述的语法是与上下文无关的。它具有语法简单,表示明确,便于语法分析和编译的特点。
https://github.com/geektime-geekbang/geektime-webprotocol
https://www.netsarang.com/zh/xshell/
打开终端,先通过以下命令安装 homebrew :
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
复制代码
安装完 homebrew 之后,运行 brew install telnet
https://www.wireshark.org/download.html
作者回复: 用MAC的同学可以参考雷锋兄的分享哈:-)
作者回复: 这是因为你需要在请求行下输入:
Host: www.taohui.pub
RFC规定,如果请求中没有携带Host头部,一律返回400 Bad Request,目前基本Web服务器都遵循这一规则
作者回复: 是的,中间件、容器都是照着ABNF对协议的定义来实现功能的
作者回复: 是的,telnet只是建立了TCP连接
作者回复: 这是正常的,继续敲HTTP请求行GET / HTTP/1.1...就可以了
作者回复: 不是,是指服务器端提供80端口,客户端向服务器80端口建立连接,而客户端本地端口由操作系统随机生成,之后在这条连接上收发消息
作者回复: 非常详尽,谢谢分享!
作者回复: 因为服务器有设超时时间,通常如果1分钟内还没有接收到完整的HTTP请求(主要指请求行和头部),服务器会关连接
作者回复: 1、容器肯定需要从你的网卡出流量的,所以可能只是更换了IP,你可以用端口等捕获过滤器来抓包,目前端口是不会变的,用http.request.host等显示过滤器来找报文。
2、还是要在wireshark上,找到出流量的那个网卡,在那个接口上抓包。
作者回复: HTTP协议也是一种TCP协议。所以没有明白你的问题。
BTW:你是用wireshark抓包吗?wireshark上显示为tcp协议通常是因为不知道怎么解析到具体的应用层协议,如果知道是什么协议可以右键点击decode as选择一个协议就可以显示
作者回复: 谢谢
作者回复: 1、只是默认端口,可以更改的。
2、不是,可以对应多个进程,可以参见我的《Nginx核心知识100讲》里的Nginx架构课程。
3、可以,mysql通常会开3306端口,因此如果你购买云服务器,3306等端口默认都是被防火墙关闭的
作者回复: 这是我的服务器配置错误了,今天下午我在www.taohui.pub上的Nginx上配置http2,80端口服务没配置好,现在已经改好了,你再试试看
作者回复: 都是这个系列的规范
作者回复: 捕获语法不对,应该输入port 80才行。第2部分第1课会详细介绍BPF捕获语法。
作者回复: 是的,现在只是建立起了TCP连接,必须向服务器发送HTTP请求,才能得到HTTP响应