好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

HTTP 协议格式

学习一时爽,一直学习一直爽

??Hello,大家好,我是 もうり,一个从无到有的技术小白。

开车!开车!

車を運転する

運転手さんがまた転覆しました。

参考:https://HdhCmsTestcnblogs测试数据/breka/articles/9791664.html

一、URI结构

,而一个完整的 URL 包含下面几部分:

http://HdhCmsTestfishbay.cn:80/mix/76.html?name=kelvin&password=123456#first

1.协议部分

该 URL 的协议部分为 http: ,表示网页用的是 HTTP 协议,后面的 // 为分隔符

2.域名部分

域名是 HdhCmsTestfishbay.cn ,发送请求时,需要向 DNS 服务器解析 IP 。如果为了优化请求,可以直接用 IP 作为域名部分使用

3.端口部分

域名后面的 80 表示端口,和域名之间用 : 分隔,端口不是一个 URL 的必须的部分。如果端口是 80 ,也可以省略不写

4.虚拟目录部分

从域名的第一个 / 开始到最后一个 / 为止,是虚拟目录的部分。其中,虚拟目录也不是 URL 必须的部分,本例中的虚拟目录是 /mix/

5.文件名部分

从域名最后一个 / 开始到 ? 为止,是文件名部分;如果没有 ? ,则是从域名最后一个 / 开始到 # 为止,是文件名部分;如果没有 ? 和 # ,那么就从域名的最后一个 / 从开始到结束,都是文件名部分。本例中的文件名是 76.html ,文件名也不是一个 URL 的必须部分,如果没有文件名,则使用默认文件名

6.锚部分

从 # 开始到最后,都是锚部分。本部分的锚部分是 first ,锚也不是一个 URL 必须的部分

7.参数部分

从 ? 开始到 # 为止之间的部分是参数部分,又称为搜索部分、查询部分。本例中的参数是 name=kelvin&password=123456 ,如果有多个参数,各个参数之间用 & 作为分隔符。

二、Request

HTTP的请求包括:请求行(request line)、请求头部(header)、空行 和 请求数据 四个部分组成。

?

Http请求消息结构

抓包的 request 结构如下:

 <span?class="hljs-keyword">GET</span>?<span?class="hljs-string">/mix/76.html?name=kelvin&amp;password=123456</span>?HTTP/1.1 <span?class="hljs-attribute">Host</span>:?HdhCmsTestfishbay.cn <span?class="hljs-attribute">Upgrade-Insecure-Requests</span>:?1 <span?class="hljs-attribute">User-Agent</span>:?Mozilla/5.0?(Macintosh;?Intel?Mac?OS?X?10_11_5)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/56.0.2924.87?Safari/537.36 <span?class="hljs-attribute">Accept</span>:?text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 <span?class="hljs-attribute">Accept-Encoding</span>:?gzip,?deflate,?sdch <span?class="hljs-attribute">Accept-Language</span>:?zh-CN,zh;q=0.8,en;q=0.6  
1.请求行

GET 为请求类型, /mix/76.html?name=kelvin&password=123456 为要访问的资源, HTTP/1.1 是协议版本

2.请求头部

从第二行起为请求头部, Host 指出请求的目的地(主机域名); User-Agent 是客户端的信息,它是检测浏览器类型的重要信息,由浏览器定义,并且在每个请求中自动发送。

3.空行

请求头后面必须有一个空行

4.请求数据

请求的数据也叫请求体,可以添加任意的其它数据。这个例子的请求体为空。

Response

一般情况下,服务器收到客户端的请求后,就会有一个 HTTP 的响应消息,HTTP响应也由 4 部分组成,分别是:状态行、响应头、空行 和 响应体。

?

http响应消息格式

抓包的数据如下:

 HTTP/1.1?200?OK Server:?nginx 20?Feb?2017?09:13:59?GMT Content-Type:?text/plain;charset=UTF-8 Vary:?Accept-Encoding Cache-Control:?no-store Pragrma:?no-cache Expires:?Thu,?01?Jan?1970?0?GMT Cache-Control:?no-cache Content-Encoding:?gzip Transfer-Encoding:?chunked  

ABNF

BNF ? ?

巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集。

ABNF ?是(扩充巴科斯-瑙尔范式)操作符。近年来在Internet的定义中 ABNF 被广泛使用。ABNF 做了更多的改进。扩充巴科斯-瑙尔范式(ABNF)基于了巴科斯-瑙尔范式(BNF),但由它自己的语法和推导规则构成。

在这里插入图片描述

核心规则 实战抓报文

环境

telnet

在windows功能打开Telnet

在这里插入图片描述

cmd 下输入telnet,表示启动成功

在这里插入图片描述

这里使用的xshell,在cmd下一样可以

输入 域名和端口

telnet?HdhCmsTesttaohui.pub?80

HTTP请求实例:

 GET?/wp-content/plugins/Pure-Highlightjs_1.0/assets/pure-highlight.css?ver=0.1.0?HTTP/1.1 Host:HdhCmsTesttaohui.pub  

ABNF对应的格式

ABNF对应的格式

在这里插入图片描述 使用 wireshark

Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。

之前遇到win10 wireshark不显示网卡问题

先附上解决方法:http://HdhCmsTestwin10pcap.org/download/ win10pcap下载。

兼容性的问题。装了这个之后就可以出现网卡了。

在这里插入图片描述

同理在xshell 访问报文,让这里wireshark抓取,找到那个http,就是访问的请求,点击

在这里插入图片描述

比如说中的32 30 30 就200

端口80

host

?

好了,这就是今天的内容了,今天最后我有一句话要说:

查看更多关于HTTP 协议格式的详细内容...

  阅读:30次