如果在 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://gitee.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对协议的定义来实现功能的
作者回复: 因为服务器有设超时时间,通常如果1分钟内还没有接收到完整的HTTP请求(主要指请求行和头部),服务器会关连接
作者回复: 1、容器肯定需要从你的网卡出流量的,所以可能只是更换了IP,你可以用端口等捕获过滤器来抓包,目前端口是不会变的,用http.request.host等显示过滤器来找报文。 2、还是要在wireshark上,找到出流量的那个网卡,在那个接口上抓包。
作者回复: 是的,telnet只是建立了TCP连接
作者回复: 浏览器会自动把你输入的URL,混合GET方法和HTTP协议,组装成HTTP请求,再从URL中取出域名,用DNS找出IP地址,建立TCP连接,再发送请求。 而xshell是直接建立TCP连接,发送请求,省去了前面的步骤。
作者回复: 我的网络重构啦,现在使用hexo静态站点,不再用wordpress了
作者回复: RFC其实是给实现协议的开发者参考用的,非常难读懂。这个ABNF作为元语言确实很晦涩,不过使用场景到是特别多,在Grpc等应用层协议中也能看到它的身影