当前位置: 首页 > news >正文

网络原理(一)—— http

什么是 http

http 是一个应用层协议,全称为“超文本传输协议”。

在这里插入图片描述

http 自 1991 年诞生,目前已经发展为最主流使用的一种应用层协议。

HTTP 往往基于传输层的 TCP 协议实现的,例如 http1.0,http1.0,http2.0

http3 是基于UDP 协议实现的,目前还在完善中,我们目前主要使用的还是 http1.1 和 http2.0 版本,本文章将以 http1.1 来进行展开。


http 的 工作流程:
在这里插入图片描述

抓包工具 Fiddler

Fiddler 主要用来抓取 http 和 https 的数据包,我们可以通过 fiddler 来进行抓包学习 http 和 https

使用也很简单,按住 ALT + A,全选然后可以使用 删除键来进行删除所有抓到的包

在这里插入图片描述

简单介绍一下,不同颜色对应的是什么数据报,红色说明发生了错误,蓝色表明一个包含 html 的数据包,绿色说明是包涵 js 的数据报,紫色则是包含 css 的数据包。

我们点击一下蓝色的数据包,会发现右边出现了两个面板,右上的面板是http 的 请求内容,右下的是 http 的响应内容。

选择 Raw ,然后点击 View in Notepad ,就可以在记事本查看请求的内容。

在这里插入图片描述

查看响应:先点击 Raw,然后点击上面的黄色的条进行解析,最后点击 View in Notepad 就可以查看响应的内容。

在这里插入图片描述

抓包工作原理:实际上 fiddler 相当于一个 “代理”,类似于中间商,浏览器的 http 请求的数据本来是发送给服务器的,因为我们开启了 fiddler ,在中间会多加一个停留点,也就是浏览器和服务器之间多了 fiddler,二者传输的数据都要通过 fiddler ,所以 fiddler 才能抓取 http 的数据包。
在这里插入图片描述

http 协议格式

请求包含:首行,请求头,空行和正文

请求的数据包不一定包含正文的:
在这里插入图片描述
在这里插入图片描述


响应包含:首行,响应头,空行和正文
在这里插入图片描述


协议格式总结:
在这里插入图片描述
右边的 Response 的请求正文是响应正文,打错字了。


http 请求的分析

在http 的请求的首行里,包含 请求方法 + url + http 的版本号
在这里插入图片描述

url

url 就是我们平时说的网址,URL(Uniform Resource Locator 唯一资源定位符

互联网上的每一个文件都有一个唯一的 URL,它包含的信息置出了文件的位置以及浏览器应该怎么处理它。

在这里插入图片描述

http 是我们使用的协议,现在大多数你看到的是 https 协议,这是后话了。url 不是只用 http 能使用,url 可以给各种协议提供支持的。

之后会跟上 IP 地址和端口号,一般来说这里的位置信息为了用户方便记忆,使用域名来充当,域名和 ip 是可以通过 DNS 域名解析系统来实现的(DNS 既是一套服务器系统,也是一种应用层协议)

在IP后面可能会跟上带层次的文件路径

?后面跟的是查询字符串(Query String) 对要访问的资源进行补充说明,使用的是键值对结构,键值对与键值对之间使用 & 来进行分割,键和值之间使用等号 = 来进行分割。

键值对是由程序员自主定义的。

片段标识符一般用于文档的阅读,就是你在网站访问官方网站,阅读官方手册的时候,会使用片段标识符说明你此时阅读的是哪一页的内容。

urlencode

由于 url 本身就携带特殊字符例如 / ? : & =

如果查询字符串 query string 的内容如果包含上面的特殊字符,就会导致 url 解析错误,为了防止这一现象的出现,这里使用了 urlencode 来进行转码,把每一个字节转为 16进制的数据,并且在前面使用 % 来进行分割

举个例子:在百度搜索 C++,会得到下面的 url
https://www.baidu.com/s?ie=UTF-8&wd=C%2B%2B&tn=15007414_dg

%2B 就是 + 转码而来的。


在百度搜索 “你好”,会发现 url 没有转码,但是我们通过 fiddler 抓包的时候确确实实是发生了转码的,为了方便用户观看,浏览器 url 显示的是没有进行转码的 “你好”,但是实际传输给服务器的 url 是发生过转码的

https://www.baidu.com/s?ie=UTF-8&wd=%E4%BD%A0%E5%A5%BD&tn=15007414_dg
在这里插入图片描述

但是在我们Java服务器写的时候,我们不需要进行转码的代码书写,因为 Spring 帮我们自动转码好了。

请求的方法

在这里插入图片描述

在开发中我们最常用的是 GET 和 POST 方法。其次是 PUT 和 DELETE 方法

GET 与 POST (重点)

GET 方法一般是向服务器发送请求使用的,一般使用 query string 来向服务器传输数据,GET 方法一般 body 部分为空(也可以不为空),GET 也不是完全不能带 body (有些客户端/浏览器不支持)。

POST 方法一般是服务器向客户端发送的响应数据包使用的方法,通过 body 来传输响应内容。

GET 和 POST 可以混用

GET请求通常建议设计成 幂等,POST 则没有要求,这是 HTTP 标准文档给出的建议,不是强制要求,幂等是指请求一定的等到的响应也是一定的,例如支付环节中,你付了多少钱,就会相应地扣除多少钱

GET 设计成 幂等,就可以 允许 GET 请求的结果被缓存,POST 由于不要求幂等,所以结果不能被缓存,但是现在开发中 GET 不幂等的情况很常见,GET 和 POST 方法也经常被混着用。


网上的一些错误的说法:
POST 比 GET 更安全,在登录场景中输入用户名和密码,使用 GET 方法,用户名和密码就会放到 url 的 query string 里面,也就是显示在浏览器的地址栏上。

POST 方法也就是把 用户名和密码放到了 body 里面,我随便抓个包不都看到了吗?安不安全这个问题考虑的是“加密传输”。如果POST 传输数据没有加密,这就不安全了。

GET 传输的数据是有长度限制的,在上古时期的 IE 浏览器时代,对 url 的长度是有限制的,但是限制主流的浏览器已经不存在这个问题了,比较长的 url 很多时候我们也能见到。

GET 只能传输文本,POST 可以传输二进制:GET 确实 url 只能放文本,但是可以将二进制 通过 base64 转码成文本。

请求报头(header)

header 的状体的格式是 “键值对” 结构,每个键值对占一行,键和值之间使用分号分割,报头的种类有很多,这里只介绍常见的几种。

Host

Host 表示服务器主机的地址和端口

在这里插入图片描述

Content-Length 与 Content-Type

Content-Length 表示 body 的数据长度,Content-Type 表示 body 的数据格式,这两个要么同时存在要么都不存在。如果 http 请求没有包含 body 就不会有这两个。如果有 body ,但是没有这两个 header (哪怕只有其中一个 header),都是错误的 / 非法的 http 报文。

在这里插入图片描述

在这里插入图片描述

User-Agent (UA)

UA 表示的是浏览器 / 操作系统的属性

在这里插入图片描述
在互联网发展早期的时候,有些浏览器只能显示文本,不支持更多的功能,后来网页引入了图片、样式、js…

在同一时间段内,有些用户的浏览器版本比较低,很多页面的功能不能支持,也有一些用户的浏览器更新过了,能支持更多的功能,因此为了区分不同用户使用的设备,通过 UA 就可以知道用户的设备最多支持哪些特性,到了今年浏览器已经大差不差了,现在 UA 的用途主要是区分用户使用的是 手机还是 PC 端,然后服务器根据不同的设备返回不同的网页。

Referer

表示这个页面是从哪个页面跳转过来的

如果直接咋爱浏览器输入 URL 或者通过收藏夹访问页面时是没有 Referer 的。

在这里插入图片描述

Cookie

Cookie 中存储了一个字符串,这个数据可能是客户端 (网页) 自行通过 JS 写入的,也可能来自于服务器
(服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据)

在这里插入图片描述

Cookie 的数据都是程序员自定义的内容。

Cookie 有一个经典的应用场景是登录和用户认证

http 响应解析

在 http 首行里包括了 http 版本号,状态码,以及状态码描述
在这里插入图片描述

状态码

状态码表示访问一个页面的结果. (是访问成功,还是失败,还是其他的一些情况…)

在这里插入图片描述

下面我们只介绍几种常见的状态码:

200 OK

表示访问正常。
在这里插入图片描述

404 Not Found

表示访问的资源没找到

在这里插入图片描述

403 Forbidden

访问被拒绝了(没有权限)
在这里插入图片描述

405 Method Not Allowed

说明客户端的请求的方法和服务器这边声明的注解不匹配。

在JavaEE部分 会给大家演示

500 Internal Server Error

服务器出现错误。

504 Gateway Timeout

Gateway 是网关的意思(也就是网络的入口)

当服务器负载比较大的时候,服务器处理单条请求的时候消耗的时间就会很长,就可能会导致出现超时的情况.

302 Move Temporarily

临时重定向

永久重定向. 当浏览器收到这种响应时,后续的请求都会被自动改成新的地址.
302 也是通过 Location 字段来表示要重定向到的新地址.

301 Moved Permanently

永久重定向

永久重定向. 当浏览器收到这种响应时, 后续的请求都会被自动改成新的地址.
301 也是通过 Location 字段来表示要重定向到的新地址.

小结

2xx 表示成功
3xx 表示重定向
4xx 表示客户端出错,用户构造的请求有问题
5xx 表示服务器出错,Java程序员主要关注这个错误,修 bug

相关文章:

网络原理(一)—— http

什么是 http http 是一个应用层协议,全称为“超文本传输协议”。 http 自 1991 年诞生,目前已经发展为最主流使用的一种应用层协议。 HTTP 往往基于传输层的 TCP 协议实现的,例如 http1.0,http1.0,http2.0 http3 是…...

【实体配置】.NET开源 ORM 框架 SqlSugar 系列

.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列 &#x1f…...

【Zookeeper】四,Zookeeper节点类型、通知、仲裁、会话

文章目录 Zookeeper的架构znode的版本Zookeeper的节点类型层级树状结构znode的不同类型 Zookeeper监视与通知通知的类型 Zookeeper的仲裁Zk的会话会话的生命周期 Zookeeper的架构 Zookeeper的服务器端运行两种模式:独立模式(standalone)和仲…...

【二分查找】力扣 34. 在排序数组中查找元素的第一个和最后一个位置

一、题目 二、思路 将题目转化为求解 target 和 target 1 的查找。分别采用最基础的二分查找即可。 三、题解 class Solution {public int[] searchRange(int[] nums, int target) {int n nums.length;int start lowerBound(nums, target);if (start n || nums[start] !…...

以达梦为数据库底座时部署的微服务页面报乱码,调整兼容模式

1.问题描述 部署微服务,文件、代码是延用的mysql类型的,部署前做了部分适配,但是在使用dm数据库进行安装的服务在页面上查询出的数据却都是乱码 2.查询官网,注意到一个参数COMPATIBLE_MODE兼容模式的配置 考虑是延用mysql&…...

Java设计模式 —— 【创建型模式】工厂模式(简单工厂、工厂方法模式、抽象工厂)详解

文章目录 前言一、简单工厂(静态工厂)1、概述2、代码实现3、优缺点 二、工厂方法模式1、概述2、代码实现3、优缺点 三、抽象工厂模式1、概述2、代码实现3、优缺点 四、总结 前言 先看个案例:【手机和手机店】在没有工厂的时候,手…...

KST-3D01型胎儿超声仿真体模、吸声材料以及超声骨密度仪用定量试件介绍

一、KST-3D01型胎儿超声仿真体模 KST—3D01型胎儿超声体模,采用仿羊水环境中内置胎龄为7个月大仿胎儿设计。用于超声影像系统3D扫描演示装置表面轮廓呈现和3D重建。仿羊水超声影像呈暗回声(无回波)特性,仿胎儿超声影像呈对比明显…...

网络原理->DNS协议和NAT协议解

前言 大家好我是小帅,今天我们来了解应用层的DNS协议和NAT技术 个人主页:再无B~U~G 文章目录 1.重要应⽤层协议DNS(Domain Name System)1.1 DNS背景 2. NAT技术3. 总结 1.重要应⽤层协议DNS(Domain Name System) DNS是⼀整套从域…...

基于yolov8、yolov5的100种中药材检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下: 算法模型:     yolov8、yolov8 SE注意力机制 或 yolov5、yolov5 SE注意力机制 , 直接提供最少两个训练好的模型。模型十分重要,因为有些同学的电脑没有 GPU&#xff0…...

RuoYi排序

RuoYi框架提供了多种实现排序的方法,以满足不同场景下的需求。这里简要介绍几种常见的排序实现方式: 1. 后端排序 1.1 使用startPagePlus方法 RuoYi框架中,可以通过对BaseController进行扩展来实现更灵活的分页与排序功能。例如&#xff0…...

Python+Pytest+Yaml+Allure数据参数化(DDT)数据驱动(一)

我们在做数据之前要知道几个问题 1、在代码层面怎么来数据驱动 2、yaml文件是什么 3、怎么用yaml文件实现对应的数据驱动 我们用的是pytest框架所以相对来说是简单的,我们通过pytest框架来实现,而框架中要数据驱动用到我们装饰器就好啦pytest.mark.p…...

BASLER工业相机维修不能触发拍照如何处理解决这个问题

BASLER工业相机维修不能触发拍照如何处理解决这个问题?最近遇到挺多工业相机维修咨询这个不能触发拍照的案例,所以今天优米佳维修的技术就抽空整理了这篇关于BASLER相机不能触发拍照的处理方法分享给大家。 当碰到巴斯勒工业相机不能触发拍照的问题&…...

Could not locate device support files.

报错信息:Failure Reason: The device may be running a version of iOS (13.6.1 17G80) that is not supported by this version of Xcode.[missing string: 869a8e318f07f3e2f42e11d435502286094f76de] 问题:xcode15升级到xcode16之后,13.…...

linux系统中常用文件日常使用命令记录

我们办公机是Ubuntu系统; 记录下工作中经常使用的几个文件或命令或一些零碎的知识点: (该文档会持续更新) 查看系统信息: uname -a cat /etc/product-info cat /etc/os-version 存放系统启停脚本 /etc/init.d/ 存放源…...

【C++打怪之路Lv16】-- map set

🌈 个人主页:白子寰 🔥 分类专栏:重生之我在学Linux,C打怪之路,python从入门到精通,数据结构,C语言,C语言题集👈 希望得到您的订阅和支持~ 💡 坚持…...

TPU-MLIR 项目源码结构分析

TPU-MLIR 项目源码结构分析 本文用作学习记录和交流分享,主要内容为 TPU-MLIR 的源码框架分析和构建流程分析。源码地址:https://github.com/sophgo/tpu-mlir 文件结构 从最外层开始分析 envsetup.sh 该脚本用于配置和初始化开发环境,其中…...

IDEA Maven 打包找不到程序包错误或找不到符号,报错“程序包不存在“

参考文章:https://blog.csdn.net/yueeryuanyi/article/details/14211090 问题:IDEA Maven 打包找不到程序包错误或找不到符号,报错“程序包不存在“编译都没问题 解决思路 – >【清除缓存】 1. 强制刷新Maven缓存 选择 Maven 标签,Exe…...

Sourcetree:一款强大的Git客户端

Sourcetree:一款强大的Git客户端 Sourcetree是一款由Atlassian开发的免费Git客户端,它提供了一个直观的图形界面,让用户能够轻松地管理他们的版本控制系统。无论是初学者还是有经验的开发者,Sourcetree都能提供方便快捷的Git操作…...

Linux环境变量与本地变量

文章目录 Linux环境变量与本地变量什么是环境变量查看环境变量设置环境变量本地变量命令行参数 Linux环境变量与本地变量 什么是环境变量 操作系统或运行时环境中存储的一些变量,用来存储与进程或系统相关的配置信息。这些变量在进程启动时由操作系统或Shell读取&…...

ChatGPT的应用场景:开启无限可能的大门

ChatGPT的应用场景:开启无限可能的大门 随着人工智能技术的快速发展,自然语言处理领域迎来了前所未有的突破。其中,ChatGPT作为一款基于Transformer架构的语言模型,凭借其强大的语言理解和生成能力,在多个行业和场景中展现出了广泛的应用潜力。以下是ChatGPT八个最具代表…...

A-29P深度解析:100dB回音消除与AI降噪的硬件设计实战

摘要:在可视门禁、车载蓝牙、远程会议等设备中,结构空间狭小与高音量需求往往导致严重的回声和啸叫问题。本文基于A-29P纯模拟回音消除模块,深入解析其100dB消回音能力、AI降噪特性及7种硬件应用模式,为工程师提供一套无需代码的快…...

Taotoken模型广场选型功能在实际开发中的使用感受

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken模型广场选型功能在实际开发中的使用感受 1. 选型起点:从分散查询到集中浏览 在接入大模型进行功能开发时&am…...

TVA智能体范式的工业视觉革命(3)

重磅预告:本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容,该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...

告别重复劳动:用这个Maya Mel脚本插件,5分钟搞定Arnold材质批量调节

告别重复劳动:Maya Mel脚本插件在Arnold材质批量调节中的高效应用 在三维动画和视觉特效制作中,材质调节往往是项目后期最耗时的环节之一。当导演皱着眉头说"这个场景的金属感太强了"或者客户反馈"整体色调需要更暖一些"时&#xf…...

办公Agent从0到1落地指南,5个步骤 + 6个避坑

大家好,我是小悟。 一、核心逻辑:Agent不是“对话机器人”,而是“数字执行者” 很多团队误以为采购了某个AI助手(如会议纪要工具、代码生成插件)就是引进了Agent。真正的办公Agent具备“感知-决策-执行”闭环&#xff…...

实验室新到Franka机器人?保姆级Ubuntu20.04+ROS Noetic配置避坑指南

Franka机器人开箱配置全攻略:Ubuntu 20.04与ROS Noetic深度适配指南 当实验室那台崭新的Franka Emika机械臂拆箱时,整个团队都围了上来——这台价值不菲的协作机器人即将成为我们最重要的研究伙伴。但很快我们就发现,从开箱到真正让机械臂流畅…...

从沙子到车辙(1.3):图灵的答案

1.3 图灵的答案 那个跑步穿过剑桥的人 1935 年,剑桥大学国王学院。一个 23 岁的研究生躺在草地上,望着天空,想着一件事: 什么是"计算"? 他叫艾伦图灵(Alan Turing)。 这个年轻人…...

FigmaCN:打破语言壁垒,让Figma设计更高效的中文界面解决方案

FigmaCN:打破语言壁垒,让Figma设计更高效的中文界面解决方案 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的英文界面而烦恼吗?你是否曾…...

Cursor Pro终极破解教程:三步免费解锁AI编程助手完整指南

Cursor Pro终极破解教程:三步免费解锁AI编程助手完整指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your …...

白盒测试覆盖题

先贴完整逻辑代码java运行if (温度 < 高温值 && 温度 > 低温值) {显示正常温度; // 分支1 } else {if (温度 > 高温值) {高温报警; // 分支2} else {低温报警; // 分支3}蜂鸣警报; // 分支4 }先定义 3 个条件A&#xff1a;温度&#xff1c;高温值B&am…...