HTTP 协议格式

参考:https://www.cnblogs.com/breka/articles/9791664.html

一、URI结构

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

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

1.协议部分

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

2.域名部分

域名是www.fishbay.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>: www.fishbay.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 00:00:00 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 www.taohui.pub 80
  • HTTP请求实例:
GET /wp-content/plugins/Pure-Highlightjs_1.0/assets/pure-highlight.css?ver=0.1.0 HTTP/1.1
Host:www.taohui.pub

ABNF对应的格式

ABNF对应的格式

在这里插入图片描述

使用 wireshark

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

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

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

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

在这里插入图片描述

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

在这里插入图片描述

比如说中的32 30 30 就200

端口80

host

本文分享自微信公众号 - 毛利学Python(sen13717378202)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 两种HTTP请求方法:GET和POST的区别

    之前在一些开发者平台使用网页调用API时,一再提到两种请求方法GET和POST,所以就去了解了下。那么这又不得不提到HTTP了!

    测试开发社区
  • Django篇(四)

    # 这个设置已经给与静态文件的目录,所以上面的STATIC_URL与我们自己创建的

    不断折腾
  • Dart-Aqueduct框架开发(四)

    这篇文章将详细介绍URL、路由,前几篇有小伙伴私信留言说讲得有点快,感觉跟不上,所以,接下来的文章中,将详细介绍Aqueduct的相关内容.

    rhyme_lph
  • Django项目(二)

    注册模块属于用户,所以我们在xm_user下的views.py中编写代码,以下的代码都在xm_user的应用下

    不断折腾
  • 揭开神秘的面纱

    打开f12检查页面后,刷新一下页面,点击Network,再点击下面的XHR,查看动态数据,会发现如下图所示,有两行数据。

    公众号guangcity
  • web服务器进阶

    可见,我们是可以给一个程序传递参数的。我们用这个功能,来给我们的web服务器指定端口和框架。

    不断折腾
  • Django简单实例

    可以点击我们的web开发一班,进入之后连接变为127.0.0.1:8000/calssinfo/1

    不断折腾
  • Django篇(三)

    url(r'^admin/', include(admin.site.urls)),

    不断折腾
  • scrapy爬虫框架教程(二)-- 爬取豆瓣电影

    经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo。这次我会以爬取豆瓣电影TOP250为例进一步为大家讲解一个完整爬虫的流程。

    测试开发社区
  • scrapy实战之爬取表情包

    通过上图我们可以发现我们想要的url全在class名为col-sm-9的div下,

    不断折腾

扫码关注云+社区

领取腾讯云代金券