TCP/IP详解——HTTP 协议

news2024/9/21 16:30:56

文章目录

    • 1. HTTP 协议
      • 1.1 URL 的格式
      • 1.2 请求报文分析
        • 1.2.1 请求行
        • 1.2.2 请求头
      • 1.3 响应报文分析
        • 1.3.1 状态行
        • 1.3.2 响应报头
      • 1.4 HTTP 工作原理
      • 1.5 Request 消息
      • 1.6 Request 包解码
      • 1.7 Response 消息
      • 1.8 HTTP 协议抓包分析
        • 1.8.1 CSNAS 抓包查看
        • 1.8.2 Wireshark 抓包查看
        • 1.8.3 OmniPeek 抓包查看
        • 1.8.4 Burp Suite 抓包查看
        • 1.8.5 Yakit 抓包查看
      • 1.9 思考

1. HTTP 协议

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。HTTP工作在TCP协议的80端口上。

HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等),HTTP协议是基于TCP的80端口进行工作。

超文本传输协议(HTTP,Hyper Text Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。RFC2616定义了HTTP1.1,最新为HTTP2.0。

HTTP协议特点

  • 基于TCP协议:面向连接,安全。

  • TCP是一种面向连接的(建立连接之前是需要经过三次握手)、可靠的、基于字节流的传输层通信协议,在数据传输方面更安全。

  • 基于请求-响应模型的:一次请求对应一次响应。

  • 请求和响应是一一对应关系。

  • HTTP协议是无状态协议:对于事务处理没有记忆能力。每次请求响应都是独立的。

  • 特点是哑服务器

1.1 URL 的格式

image-20231114172842295

1.2 请求报文分析

HTTP 请求由请求行、请求头、请求体/请求正文三个部分组成。

1.2.1 请求行

HTTP 报文的第⼀行,由空格字符分成三部分。

image-20230814192230404

  • 请求方法:GET / POST / PUT / DELETE /…

    • 最常用的方法也就是 GET 方法和 POST 方法,其他方法暂时了解即可。
  • 资源路径/请求的URL:HTTP 协议使用 URI 定位互联网上的资源。

    • 例如:http://www.baidu.com/path/to/myfile.html?key1=value1&key2=value2
  • 协议/版本:表示报文使用的 HTTP 协议版本。

    • 例如:HTTP/1.1
1.2.2 请求头

从请求报文第⼆行开始到第⼀个空行为止之间的内容。

字段含义
Host主要用于指定被请求资源的服务器地址和端口号。
User-Agent客户端浏览器信息,表示浏览器或者操作系统的属性。(如果是恶意流量,在UA的头的位置会有nmap等字样)
Referer包含一个URL,代表当前URL的上一个URL。表示这个页面是从哪个页面跳转过来的。
Cookie记录请求者的身份认证信息
Accept-Charset用于指定浏览器接收的字符集
Content-Type用于向接收方(浏览器或服务器)指示实体的介质类型(数据类型格式,MME)
Content-Length用于指明实体正文的长度,以字节方式存储的十进制数字来表示
Last-Modified用于指示资源的最后修改时间

GET和POST两个请求之间的区别

  • GET请求的请求参数在请求行中,没有请求体,POST请求的参数在请求体中。

  • GET请求的请求参数大小有限制,POST没有。

1.3 响应报文分析

响应报文由状态行、响应报头、响应正文三部分组成。

响应报文从第⼀个空行开始到最后的所有内容。 服务器返回资源的内容,即浏览器接收到的HTML代码。

1.3.1 状态行

响应报文的第⼀行

响应码

状态代码类型
1XX信息性状态码
2XX200:成功状态码
3XX301:永久重定向状态码
302:暂时重定向状态码
4XX客户端错误状态码
401:客户端错误状态响应代码
403:服务器理解请求但拒绝授权
404:服务器找不到请求的资源
405:服务器已知请求方法,但已被禁用且无法使用。
5XX服务器错误状态码
500:服务器错误

状态 | Status - HTTP 中文开发手册。

1.3.2 响应报头

响应报文第二行开始到第⼀个空行为止的所有内容,其中包含了关于HTTP响应的重要字段。

字段含义
Data时间和日期
Server服务器标头包含有关原始服务器用来处理请求的软件的信息。
Last-Modified服务器通过这个头信息告诉浏览器,资源的最后修改时间
Content-Length响应正文的长度
Content-Type响应正文的类型
Set-Cookie向浏览器端写入Cookie信息
Location用于重定向,指示新的资源位置。
Refresh服务器通过Refresh头告诉浏览器定时刷新浏览器

1.4 HTTP 工作原理

HTTP 协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。

HTTP 协议采用了请求/响应模型:

  1. 客户端向服务器发送一个请求报文,请求报文包含请求方法,URL,协议版本,请求头部和请求数据。
  2. 服务器以一个状态行作为响应,响应的内容包括协议的版本,成功或者错误的代码,服务器信息,响应头部和响应数据。

image-20231114173857081

1.5 Request 消息

image-20231114173937252

  1. 第一部分:请求行,用来说明请求类型,要访问的资源,以及所使用的HTTP版本。
    • POST说明请求类型为POST,“/” 为要访问的资源,最后一部分说明使用的是HTTP1.1版本。
  2. 第二部分:请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息。
    • 从第二行起为请求头部,HOST将指出请求的目的地。User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型测逻辑的重要基础。该信息由你的浏览器来定义,并且在每个请求中自动发送等等。
  3. 第三部分:空行,请求头部后面的空行是必须的。
    • 即使第四部分的请求数据为空,也必须有空行
  4. 第四部分:请求数据也是主体,可以添加任意的其他数据。

1.6 Request 包解码

image-20231114180548379

image-20231114180720668

注意:请求报头会由于使用的HTTP客户端浏览器或者客户端浏览器配置选择的不同而不同。

1.7 Response 消息

image-20231114174915200

  1. 第一部分:状态行,由HTTP协议版本号、状态码、状态消息三部分组成。
    • (HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)
  2. 第二部分:消息报头,用来说明客户端要使用的一些附加信息
    • Date:生成响应的日期和时间;
    • Content-Type:指定了MIME类型的HTML(text/html)编码类型是UTF-8
  3. 第三部分:空行,消息报头后面的空行是必须的。
  4. 第四部分:响应正文,服务器返回给客户端的文本信息。
    • 空行后面的html部分为响应正文。

1.8 HTTP 协议抓包分析

1.8.1 CSNAS 抓包查看

Request数据包

image-20231202200715499

Response数据包

image-20231202200740297

1.8.2 Wireshark 抓包查看

Request数据包

image-20231114182147593

Response数据包

image-20231202201639595

1.8.3 OmniPeek 抓包查看

image-20231124150404200

1.8.4 Burp Suite 抓包查看

Request请求包

image-20231114181355220

Response响应包

image-20231114182207143

1.8.5 Yakit 抓包查看

image-20231124151609001

1.9 思考

为什么在浏览器输入t.cn会转向访问到weibo.com

  • t.cn是新浪微博(weibo.com)使用的短链接服务。当在浏览器中输入 t.cn时,这个请求会被发送到新浪微博的服务器,服务器会解析这个短链接并将其重定向到对应的网页,最终访问到 weibo.com。

因为在访问t.cn的时候是GET请求方式,服务器响应了一个301状态码,而301状态码是永久重定向状态响应代码,指示所请求的资源已被重定向到Location标题给定的URL 。

image-20231114182836079

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1316533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于枚举的简单理解

1. 枚举的简单认识 1.1 枚举的引入 枚举是在JDK1.5以后引入的。主要用途是:将一组常量组织起来,在这之前表示一组常量通常使用定义常量的方式如下面的代码所示: public static final int RED 1; public static final int GREEN 2; public…

git代码管理学习文档

1.版本控制 每一版本都会发生变化 更新版本,回退版本 版本控制实际就是控制文件的变化 服务器端和每个人的电脑上都会记录版本的变化,也就是说整个团队都记录了版本的变化。 不需要连网,他是分布式的,在自己电脑上也可以操作。 …

Easy Excel生成复杂下Excel模板(下拉框)给用户下载

引言 文件的下载是一个非常常见的功能,也有一些非常好的框架可以使用,这里我们就介绍一种比较常见的场景,下载Excel模版,导入功能通常会配有一个模版下载的功能,根据下载的模版,填充数据然后再上传。 需求…

【MATLAB第82期】基于MATLAB的季节性差分自回归滑动平均模型SARIMA时间序列预测模型含预测未来

【MATLAB第82期】基于MATLAB的季节性差分自回归滑动平均模型SARIMA时间序列预测模型含预测未来 一、模型介绍 1、模型简介 季节性差分自回归移动平均模型(Seasonal Autoregressive Integrated Moving Average Model, SARIMA),又称为周期性…

指针进阶篇

指针的基本概念: 指针是一个变量,对应内存中唯一的一个地址指针在32位平台下的大小是4字节,在64位平台下是8字节指针是有类型的,指针类型决定该指针的步长,即走一步是多长指针运算:指针-指针表示的是两个指…

SQL注入学习(配合SQLi-lab靶场)

前提条件: 在进行sql注入时,首先要确定网页有注入点,一般在URL地址栏中,或者含有输入框的地方会有 SQL注入步骤: 1、判断注入类型 首先判断是什么类型的注入,用id1 and 11 和id1 and 12 判断是数字类型注…

Redis设计与实现之整数集合

目录 一、内存映射数据结构 二、整数集合 1、整数集合的应用 2、数据结构和主要操作 3、intset运行实例 创建新intset 添加新元素到 intset 添加新元素到 intset(不需要升级) 添加新元素到 intset (需要升级) 4、升级 升级实例 5、关于升级 …

25.Java程序设计-基于SSM框架的微信小程序校园求职系统的设计与实现

1. 引言 1.1 背景 介绍校园求职系统的背景,说明为什么设计这个系统以及系统的重要性。 1.2 研究目的 阐述设计基于SSM框架的微信小程序校园求职系统的目标和意义。 2. 需求分析 2.1 行业背景 分析校园求职行业的特点和需求,以及目前市场上同类系统…

Spring Boot SOAP Web 服务端和客户端

一. 服务端 1. 技术栈 JDK 1.8,Eclipse,Maven – 开发环境SpringBoot – 基础应用程序框架wsdl4j – 为我们的服务发布 WSDLSOAP-UI – 用于测试我们的服务JAXB maven 插件 – 用于代码生成 2.创建 Spring Boot 项目 添加 Wsdl4j 依赖关系 编辑pom…

化学方程式小程序

brief introduction 相信大家上中学时都会被化学方程式折腾得死去活来,尤其是配平,怎么也算不对数字。于是我写出了这款近200行的自动配平程序,这是不是你们黑暗化学中的一丝光亮呢? usage 正常化学式输入,每一种物…

智慧农业大数据可视化UI,数据展示平台(免费可视化大屏模版PS资料)

大屏幕展示方式可以实现信息的直观呈现与交互操作,使农业生产者能够一目了然地掌握有关农情、天气、土壤等数据信息,从而科学决策。智慧农业大数据可视化大屏是提升农业生产效益的一种重要工具。 现分享亩产效益指标、农业大数据可视化、农业数据展示平…

基于EasyExcel的数据导入导出

前言: 代码复制粘贴即可用,主要包含的功能有Excel模板下载、基于Excel数据导入、Excel数据导出。 根据实际情况修改一些细节即可,最后有结果展示,可以先看下结果,是否是您想要的。 台上一分钟,台下60秒&a…

QT Widget - 随便画个圆

简介 实现在界面中画一个圆, 其实目的是想画一个LED效果的圆。代码 #include <QApplication> #include <QWidget> #include <QPainter> #include <QColor> #include <QPen>class LEDWidget : public QWidget { public:LEDWidget(QWidget *pare…

前端传递参数,后端如何接收

目录 简单参数 传递方式 获取方式一 获取方式二 相关注解 实体参数 数组集合参数 传递方式 相关注解 获取方式一 获取方式二 日期参数 传递方式 相关注解 获取方式 json参数 传递方式 相关注解 获取方式 路径参数 传递方式 相关注解 获取方式 传递多个…

【Java系列】详解多线程(三)—— 线程安全(上篇)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Java系列专栏】【JaveEE学习专栏】 本专栏旨在分享学习Java的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 一…

心理测试网站源码,知己心理React心理健康测试

源码介绍 React心理健康测试网站源码&#xff0c;帮助需要的人更好地了解自已的心理健康状态和人格特征。 React可以在Vite中启用HMR&#xff0c;并且包含了几人EsLint规则。只需要使用react antd-mobile即可 轻松部署完成。

【JAVA日志框架】JUL,JDK原生日志框架详解。

前言 Java日志体系混乱&#xff1f;Java日志框架系列&#xff0c;清晰简洁整理好整个Java的日志框架体系。第一篇&#xff0c;JDK原生日志框架——JUL。 目录 1.概述 2.日志级别 3.配置 4.继承关系 1.概述 日志框架的核心问题&#xff1a; 日志是用来记录应用的一些运行…

C++ Qt开发:Tab与Tree组件实现分页菜单

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍tabWidget选择夹组件与TreeWidget树形选择组件…

Swift 响应式编程:简化 KVO 观察与 UI 事件处理 | 开源日报 No.110

ReactiveX/RxSwift Stars: 23.8k License: MIT RxSwift 是 Reactive Extensions 标准的 Swift 特定实现&#xff0c;它提供了 Observable 接口来表达计算的通用抽象。该项目旨在为 Rx API 提供真正以 Swift 为先的 API&#xff0c;并允许轻松地组合异步操作和数据流。其主要功…

K8s投射数据卷

目录 一.Secret 1.secret介绍 2.secret的类型 3.创建secret 4.使用secret 环境变量的形式 volume数据卷挂载 二ConfigMap 1.创建ConfigMap的方式 2.使用ConfigMap 2.1作为volume挂载使用 2.2.作为环境变量 三.Downward API 1.以环境变量的方式实现 2.Volume挂载 一.S…