【保姆级教程】 全网最强HTTP+Fiddler抓包实战超级全面图文教程 《HTTP请求报文 REQUEST基本结构》

简介: HTTP请求和响应的基本原理
前言

任何一个http请求都只会分为两个部分: 一个请求报文另外一个是响应报文

请求报文客户端按照一定的格式生成一段文本,然后发给我们的服务端, 而服务器接收到了这样一个请求报文就会解析里面的内容,然后做出回馈,也就是响应

响应报文也就是服务器端根据请求报文反馈给客户端的文本信息

HTTP请求报文 (request)基本结构

http请求(request)也叫请求报文一个基本的http请求报文结构分为如下几点:

  1. 请求行:就是请求方式和协议,也就是说用于描述客户端请求方式,例如post/get方式, 以及请求的资源名称和HTTP协议的版本号!
  2. 若干个请求头: 这些也叫消息头告诉服务器发送的是什么数据类型,编码类型、请求的是哪台主机、以及客户端浏览器的一些系统环境 等等, 这些消息头中有很多头部字段名对应的值它的格式为 name:value
  3. 空白行
  4. 请求正文内容

抓包了解一下

那么我们在学习http知识的时候 就可以先直接使用Fiddler来抓取一个http请求http响应来先看看到底是什么东西!

这样也有助于一些新手来理解http!

我们可以通过Fiddler抓取网络数据包的手段,就可以看到一个基本的http请求结构都包含哪些信息!

例如一个GET方式请求(Request)信息 如下:

GET https://www.baidu.com/?name=zhangsan HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9

例如一个POST方式请求(Request)信息 如下:

POST https://api.codelife.cc/stat/userHm HTTP/1.1
Host: api.codelife.cc
Connection: keep-alive
Content-Length: 48
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36
Content-Type: application/json
Accept: application/json, text/plain, */*
sec-ch-ua-platform: "Windows"
version: 1.2.27
Origin: chrome-extension://mhloojimgilafopcmlcikiidgbbnelip
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9

{"fp":"4c49c2fd79e1658546e4b8ad","tn":6}

怎么样 是不是看这一大堆脑壳都大了呢 ? 哈哈哈不要着急,我们慢慢来学!😁😁😁

我们先来看一张请求(Request)图解

如图

request_1.jpg

然后我们来逐一拆解上图中的各个部分!

1.请求方式 (Request method)

我们常见的一些请求方式也就是POST/GET,当然还有其他的一些请求方式, 如下表:

请求方法 描述
GET 请求资源 比如常见的就是输入一个URL去请求一个资源下来, 它也可以带上一定的参数一起请求
POST 提交资源 比如说我们想把用户名和密码 提交到服务器去,这个时候用POST比较好
HEAD 获取响应头
PUT 替换资源
DELETE 删除资源
OPTIONS 允许客户端查看服务器的性能
TRACE 显示服务器收到的请求 常见于测试和调试诊断!
2.URL (Uniform Resource Locator)

URL中文名为统一资源定位符 英文全称Uniform Resource Locator ,

我们网络中的每一信息资源都有统一的且在网上唯一的地址!

URL具体由4部分组成:协议、主机、域名、端口、路径文件、[附加资源]

URL的一般语法格式为:

protocol :// hostname[:port] / path / [?query-parameters]

1.协议 (protocol)

协议有http、ftp、https、等...

2.主机名 (hostname) + 域名

主机名+域名 例如: www.xsphp.com

3.端口 (port)

端口是一个数字, 端口是可选的 省略时使用方案是服务器默认配置的端口

例如 80、8080、..

各种传输协议都有默认的端口号,如http协议的默认端口为80

如果URL地址省略端口,则使用默认端口号

注意

有时候出于安全或其他考虑,可以在服务器配置上对端口进行重新定义,也就是采用非标准端口号,那么此时,URL地址中就不能省略端口号这一项。

4.路径文件 (path)

由零或多个/符号隔开的字符串,一般用来表示主机上的一个目录或文件地址

例如: /tpl/index.php

5.查询参数 附加资源 (query-parameters)

这一项在URL中也是可选的 用于给动态网页如 PHP/JSP/ASP/ASP.NET等后端页面 传递参数的一种方式,并且如果是GET请求方法, 那么可有多个参数, 它们彼此用&符号隔开,每个参数的名和值用=符号隔开

语法格式: ?参数=值&参数2=值 以此类推!

例如: ?id=33&age=25&name=zhangsan

举个例子

一个比较常见的url地址, 如下:

https://www.xxxx.net/xxxx/xxxx/xxxx/100?num=1001.2014.3001.5501
3.请消息求头 (Request Header)

请求消息头也叫消息头告诉服务器发送的是什么数据类型,编码类型、请求的是哪台主机、以及客户端浏览器的一些系统环境 等等前面已经说过了, 并且请求头是可以由开发人员根据需求去进行自定义

这些消息头中有很多头部字段名对应的值它的格式为 name:value

我们常见的一些请求头如下表:

请求头 描述
Host 主机IP地址或域名
User-Agent 提交一些客户端相关信息,例如: 操作系统、浏览器等一些版本信息给服务器, 而这些信息可能会让服务器按照一定的规则给客户端返回兼容性比较好的信息!
Accept 指定客户端接收的信息类型,
例如:image/jpg,text/html,application/json
也就是可以让客户端告诉服务器 之后客户端这一边想接收到什么样的数据格式
Accept-Charset 告诉服务器等一会这边客户端需要接收的字符集编码格式
例如:gb2312、iso-8859-1、utf-8
Accept-Encoding 告诉服务器, 客户端这边可接受的内容压缩编码,例如gzip 可以在一定程度上节省流量!
Accept-Language 告诉服务器, 客户端可接受的语言,例如Accept-Language:zh-cn
Authorization 客户端提供给服务端进行权限认证的信息, 也就是要告诉服务器端一些认证的信息,服务器才能返回响应的数据!
Cookie 携带的COOKIE信息, 普通情况下,当一个用户登录成功,就会在本地保存一份cookie,下次请求就会直接带上这个cookie信息,也就是这个用户的相关信息
Referer 当前文档的URL 也就是纪录下从哪个链接地址提交到服务器
Content-Type 服务器提交内容的格式
例如:Content-Type:application/x-www-form-urlencoded
总而言之,就是告诉服务器,客户端传递的内容属于什么格式 或 其他编码格式!
Content-Length 数据长度, 也就是客户端服务器端提交内容的数据长度有多少字节!
Cache-Control 缓存机制,例如:Cache-Control:no-cache
pragma 防止页面被缓存,与Cache-Control:no-cache作用一样
..............................................

我们可以用Fiddler截取一个请求头看看

如图

request_2.png

4.空行

空白行 也就是在消息头结束的下方,会存在一个空白行, 这是必须存在的, 是由HTTP标准规定的!

5.请求体

请求体它的出现是要根据请求的方式不同而不同, 也就是如果是POST那么就会以键与值的形式进行发送, 如果是GET请求那么这里就不会包含请求正文内容

相关文章
|
10月前
|
XML JSON 网络协议
利用HTTP POST协议实现简单的RPC协议:WireShark抓包分析
通过这种方式,我们可以使用HTTP POST实现简单的RPC协议,并使用WireShark进行抓包分析。这不仅可以帮助我们理解RPC协议的工作原理,也可以帮助我们调试和优化我们的代码。
536 30
|
10月前
|
JSON 数据格式
利用HTTP POST协议实现简单的RPC协议,并使用WireShark进行抓包分析
通过这种方式,我们可以利用HTTP POST实现简单的RPC协议,并使用WireShark进行抓包分析。这种方式简单易懂,实用性强,可以应用于各种网络编程场景。
421 16
|
网络协议 应用服务中间件 网络安全
免费泛域名https证书教程—无限免费续签
随着互联网安全意识提升,越来越多网站采用HTTPS协议。本文介绍如何通过JoySSL轻松获取并实现免费泛域名SSL证书的无限续签。JoySSL提供永久免费通配符SSL证书,支持无限制域名申请及自动续签,全中文界面适合国内用户。教程涵盖注册账号、选择证书类型、验证域名所有权、下载与安装证书以及设置自动续签等步骤,帮助网站简化SSL证书管理流程,确保长期安全性。
1270 20
|
前端开发 网络协议 安全
【网络原理】——HTTP协议、fiddler抓包
HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法
|
关系型数据库 MySQL Java
Servlet+MySQL增删改查 原文出自[易百教程] 转载请保留原文链接: https://www.yiibai.com/geek/1391
对于任何项目开发,创建,读取,更新和删除(CRUD)记录操作是应用程序的一个最重要部分。
320 20
|
Java 网络架构 Kotlin
kotlin+springboot入门级别教程,教你如何用kotlin和springboot搭建http
本文是一个入门级教程,介绍了如何使用Kotlin和Spring Boot搭建HTTP服务,并强调了Kotlin的空安全性特性。
420 8
kotlin+springboot入门级别教程,教你如何用kotlin和springboot搭建http
|
安全 数据安全/隐私保护
IP地址https证书免费申请教程
本教程详细介绍如何免费申请IP地址HTTPS证书,涵盖准备、申请、审核、下载与部署阶段。从确认IP地址、选择CA、注册账户到验证控制权,最后完成证书部署,确保数据传输安全。注意证书有效期较短,需及时续签。
|
安全 网络安全 数据安全/隐私保护
政务内网实现https访问教程
政务内网实现HTTPS访问需经过多个步骤:了解HTTPS原理,选择并申请适合的SSL证书,配置SSL证书至服务器,设置端口映射与访问控制,测试验证HTTPS访问功能,注意证书安全性和兼容性,定期备份与恢复。这些措施确保了数据传输的安全性,提升了政务服务的效率与安全性。
|
安全 网络安全 数据安全/隐私保护
内网IP地址实现HTTPS加密访问教程
在内网环境中,为确保数据传输的安全性,绑定SSL证书搭建HTTPS服务器至关重要。本文介绍了内网IP地址的前期准备、申请SSL证书的步骤以及客户端配置方法。具体包括选择合适的CA、注册账号、提交申请、下载证书,并在客户端导入根证书,确保通信数据的安全加密。推荐使用JoySSL提供的技术解决方案,确保内网设备通信安全。
内网IP地址实现HTTPS加密访问教程

热门文章

最新文章