计算机网络 - 应用层http协议 - http报文格式介绍(1)

news2024/11/17 3:36:47

前言

本篇认识和理解应用层中的http协议,了解抓包工具并进行使用,认识请求报文与响应报文,了解报文中基本键值对意思例如:Set-Cookie, 状态码等,如有错误,请在评论区指正,让我们一起交流,共同进步!


文章目录

  • 前言
    • 1. 了解http协议 - 应用层
      • 1.1 ***什么是http协议?***
      • 1.2 ***http协议如何与服务器交互?***
    • 2. 认识http协议的报文格式
      • 2.1 ***如何认识http协议的报文格式?***
      • 2.2 fiddler使用介绍
      • 2.3 认识请求和响应
        • 1)请求报文格式 - 4部分
        • 了解URL
          • Cookie:
        • 2) 响应报文格式 - 4部分
        • 状态码
      • 2.4 get 与 post 有区别?
  • 总结

本文开始

1. 了解http协议 - 应用层

1.1 什么是http协议?

http协议是一个超文本协议,所谓超文本就是传输的不只是文本,还包括html, css, 图片等;在应用层中使用广泛用于,给传输数据规定格式;

1.2 http协议如何与服务器交互?

以 “一问一答” 的形式,浏览器相当于客户端,一般是浏览器主动发起请求,服务器返回一个响应;

2. 认识http协议的报文格式

2.1 如何认识http协议的报文格式?

使用抓包工具:http协议的报文格式不像tcp,udp 那样有固定的报文格式,而http协议的报文格式需要通过抓包工具实现;

抓包工具:能够看到协议格式的详细情况,一般chrome有内置的z抓包工具,这里使用 fiddler 这个工具;(直接在官网上下载 fiddler,s首次使用安装根证书)

2.2 fiddler使用介绍

左侧是抓包的数据,右侧上部分是请求,右侧下部分是响应;
请求或响应在右侧点击 Raw 查看具体的报文格式;

在这里插入图片描述

2.3 认识请求和响应

1)请求报文格式 - 4部分

在这里插入图片描述

i) 首行 包含:方法 URL 版本号

在这里插入图片描述

【注】

  • 请求可以是get, 也可以是post,二者可以相互替换;
    http方法:常用post:从服务器获取资源, get:往服务器提交数据等等;
    post请求的出现:一般登录出现,上传文件时出现;

了解URL

URL:唯一资源定位符;(找到网络上唯一的一个资源)

URL基本组成如图:
URL:协议名称://ip:端口号/带层次的路径?查询字符串

在这里插入图片描述

【注】
1)域名后还有一个默认端口号,可以省略;例 : http 默认端口:80,https默认端口:443;
2)查询字符串:键值之间使用 = 分隔,键值对之间使用 & 分隔;=》对请求的资源细节补充说明;

ii) 请求头header : 键值对结构,每个键值对占一行;键和值之间使用 冒号+空格分隔;
Host: 描述浏览器这个请求访问的服务器是什么;
如下图:

在这里插入图片描述

【注】一般情况下URL中的域名与Host中的值一致,但也有可能不一致;

Content-Type : 描述body中的数据格式;
请求的Content-Type:
使用json格式:Content-Type:application/json;charset=UTF-8
使用form表单格式(body的数据类型是查询字符串):Content-Type:application/x-www-form-urlencoded
响应的 Content-Type: 数据类型比较多,是页面可显示
Content-Type: text/html
Content-Type: text/css
Content-Type: application/javascript

Content-Length:描述 body的长度;

User-Agent: 主要描述浏览器的版本,系统的版本;
UA区分浏览器的不同,区分用户的硬件设备手机/平板等

在这里插入图片描述

⑤ Referer: 描述当前页面是由哪个页面跳转而来
如图:由cn.bing.com跳转而来;

在这里插入图片描述

Cookie:

Cookie : 浏览器在本地存储用户自定义数据的一种关键机制;
Cookie数据格式:键值对,键值对之间 ; 分隔,键和值之间 = 分隔;

1.获取Cookie的地方:从浏览器获取,浏览器访问服务器的,服务器会在HTTP响应中,通过 Set-Cookie 字段,把Cookie的键值对,返回给浏览器;浏览器得到响应中的Cookie会本地存储;
2.Cookie去的地方:在浏览器下次请求时,把Cookie带给服务器;
【注】Cookie在浏览器是暂存,真正使用是在服务器中;
3.Cookie的作用:浏览器本地存储的机制;Cookie典型应用是存储用户的身份信息,服务器通过Cookie字段进行身份识别,把响应返回给对应浏览器客户端;
【注】Cookie中存储的数据都得是字符串;


2) 响应报文格式 - 4部分

在这里插入图片描述

i)首行包含:版本号 状态码 状态码描述
状态码 数字:状态码通过一个或一组单纯,描述状态码的含义;数字表示请求执行成功还是失败;

状态码

常见的状态码:
① 200 OK :表示请求成功
② 404 Not Fount : 表示要访问的资源不存在
③ 403 Forbidden : 访问被拒绝 / 访问没有权限
④ 500 Internal Server Error :服务器内部错误
⑤ 504 Gateway Timeout : 服务器访问超时
⑥ 302 Move temporarily : 临时重定向
⑦ 301 Moved Permanently 永久重定向
【注】重定向:访问旧的地址,被自动引导到新的地址上;

状态码分类

ii)响应报头 - 与请求报头中的类似

2.4 get 与 post 有区别?

get与post本质没有区别,二者可以相互替换,但在使用习惯上post 与 get 是不同的;
get 与 post 使用习惯上的区别:
1)习惯 get 用于表示 “获取的一个数据”, post 用于表示 ”提交一个数据“
2)get 一般没有body, 需要携带数据放在URL中, post一般有body
3)get 请求一般设计为幂等的,post无要求;
何为幂等:
幂等:输入一定,输出一定,每次输入与上一次输入一样,输出也与上一次一样;
【注】输入 != 输出
4)get在幂等条件下可缓存,post 不能;
【注】缓存:将已经计算过的数据放入客户端或者服务器,当下次再次遇到一样的请求时,直接使用已保存的值;
5)get 请求可以被浏览器收藏,post不能;


总结

✨✨✨各位读友,本篇分享到内容如果对你有帮助给个👍赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

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

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

相关文章

segement and remove-SAM一键清除物体(代码安装实战项目)

结果展示 去除图片中前景物体的步骤: 1.框选 2.分割 3.分离 4.去除 项目介绍 一键帮你剔除视频内的物体,现在只需要一句话。使用Meta的SAM技术,你现在可以让视频内任意物体消失! 特点 按照提示进行分割:只需输入“黑色狗”,您就可以将您的黑色狗分割出来; 修复图…

JAVA 初识序列化与反序列化

JAVA 初识序列化与反序列化 目录 JAVA 初识序列化与反序列化初识序列化与反序列化1 概述2 特点/应用场景3 涉及到的流对象4 代码实现序列化与反序列化4.1 步骤1:创建学生类Student4.2 步骤2:创建序列化测试类 5 测试报错NotSerializableException:6 测试…

yarn与npm的区别(yarn的安装报错问题)

一、yarn 是什么,yarn 与 npm 的区别是什么? yarn 是一个软件包管理系统,Yarn 和 npm 都是包管理工具,用于管理用 JavaScript 编写的软件包,yarn的出现是为了弥补 npm的一些缺陷。yarn 与 npm 的区别 : 性能…

Matplotlib---3D图

1. 3D图 # 3D引擎 from mpl_toolkits.mplot3d.axes3d import Axes3D fig plt.figure(figsize(8, 5)) x np.linspace(0, 100, 400) y np.sin(x) z np.cos(x)# 三维折线图 axes Axes3D(fig, auto_add_to_figureFalse) fig.add_axes(axes) axes.plot(x,y,z) plt.savefi…

arduino uno r3 机械臂

1、硬件 arduino uno r3 改进板、sg90舵机(180度 x 4)、JoyStick Shield PS2游戏摇杆扩展板(或者按键 遥杆模块)、3D打印件、M3螺丝螺母(10mm 15mm 25mm )以及M2螺丝螺母。 2、接线 开发版使用DC口7V-12V 供…

AI 绘画风格迁移之青铜模型训练

前情提要 2023-07-01 周六 杭州 阴 小记: mmp,上周吃烤面筋,不小心牙签扎到口腔,结果这几天吃什么都不舒服,可是计划还是要做的,下半年要把当下 AI 的应用梳理下,自己还是喜欢那种先使用再学习相关原理&a…

C语言之数组初阶(1-4)

目录 1. 一维数组的创建和初始化 2. 一维数组的使用 3. 一维数组在内存中的存储 4. 二维数组的创建和初始化 5. 二维数组的使用 6. 二维数组在内存中的存储 7. 数组越界 8. 数组作为函数参数 数组概念:数组是一组相同类型元素的集合 1.一维数组的创建和初始化 在C语言中…

【已解决】nacos新增配置报错: 发布失败。请检查参数是否正确

解决方法: sql文件直接采取容器默认自带的创建表,复制出来即可 非容器自带sql,有多余encrypted_data_key字段 1.删掉config_info 和 his_config_info 表中的encrypted_data_key字段 2.config_info 和 his_config_info 表中非空encrypted_data…

Android12之ServiceManager::addService注册服务的本质(一百五十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

如何用smardaten90天快速开发并上线智慧空间loT物联平台?

前言 大家好,我是小白白,前段时间一位好友接手了一个“烫手山芋”开发任务,77万㎡的科技园区需要打造智慧空间物联平台。要求接入600园区设备,处理15000日数据量,在打造整体IOT物联底座之上,构建起整个园区…

三电阻采样的劣势分析

最近控制过程中,被下三桥采样小坑了一下。 如下图所示为下桥臂三电阻采样方式,该方法的采样器件是高精度电阻,电阻两端电压经过采样调理电路输出至单片机ADC,三电阻采样成本低、结构简单,并且采样信号和输出强电之间是…

【Unity3D】素描特效

1 非真实渲染 法线贴图和凹凸映射中讲述了普通光照的渲染原理,实现的效果比较贴近真实世界(照相写实主义,Photorealism),非真实渲染(Non-Photorealism Rendering,NPR)在照相写实主义…

7-数组创建函数还有哪些?【视频版】

目录 问题视频解答 问题 视频解答 点击观看: 7-数组创建函数还有哪些?

基于IDEA操作springboot项目构建docker镜像部署到云服务器并在idea把镜像推送到harbor仓库

云服务器系统环境: 华为云 Ubuntu 9.3.0-17ubuntu1~20.04 1.ECS准备docker相关环境 1.1ECS安装docker 一行一行执行 都是从官网找的命令 sudo -i apt update apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common curl -fsSL htt…

Linux学习之screen和系统日志

screen yum install -y screen安装screen。 输入screen就可以进入screen环境。 在screen环境中执行tail -f /var/log/messages。 可以先按Ctrla,这时没有反应,需要紧接着迅速按d才能退出screen环境。 使用screen -r 11326还可以进入到刚刚挂起的s…

【Rust】基本语法

文章目录 变量与可变性变量与常量Shadowing(隐藏)数据类型标量类型1.整数类型2.浮点类型3.布尔类型4.字符类型 复合类型1.Tuple2.数组 函数if表达式循环1.loop2.while3.for 变量与可变性 声明变量使用let关键字,默认情况下,变量是…

Android 开发环境搭建

系列文章 MySQL安装教程(详细) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/126037520 MySQL卸载教程(详细) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129279265 …

【C++】类型转换和IO流

C完结 文章目录 前言一、C的四种类型转换二、IO流总结 前言 首先我们看看C语言中的类型转换: 在 C 语言中,如果 赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与 接收返回值类型不一致时,就需…

tmux-解决ssh长时间不操作便会话结束的问题

Tmux 是一个终端复用器(terminal multiplexer),非常有用,属于常用的开发工具。 如果电脑死机会话中断的话会导致服务器上基于bash的所有进程都被强制关闭。tmux确实是解决这个问题的好办法,而且很容易上手&#xff0c…

帝国CMS自动刷新首页和自定义列表页:实现网站内容的自动更新

本文将介绍一种实现帝国CMS自动刷新首页和自定义列表页的方法。 以下是具体的实现步骤: 1、设置自定义key 添加网站 设置发布网站 发布成功 首先,在您的帝国CMS根目录下创建一个名为"htmlindex"的文件夹(您可以自行命名&#xff…