【Java网络编程05】网络原理进阶(三)

1. HTTP协议概述

HTTP协议:又被称为"超文本传输协议",是一种使用非常广泛的应用层协议,我们之前在文件章节介绍过文本文件与二进制文件的区别,文本可以看做字符串(能在utf8/gbk等编码表中查找到合法字符),我们有必要区分文本、超文本、富文本之间的区别。

  1. 文本:能在码表中查找到对应的合法字符,可以使用记事本打开查看的内容
  2. 超文本:在文本的基础上,还可以携带一些图片等特殊格式内容,如HTML文件
  3. 富文本:比超文本的内容更加全面,可以调整行间距等等具体格式,例如word等文件

HTTP版本:HTTP协议诞生于1991年,较常见的版本有HTTP1.0、HTTP1.1、HTTP2.0、HTTP3.0,但是目前主流使用的仍然是HTTP1.1与HTTP2.0版本,本篇文章主要围绕的也是HTTP1.1版本。

HTTP往往是基于传输层的TCP实现的,只有HTTP3.0是基于UDP实现的

HTTP应用领域:HTTP协议最常见的应用领域就是"网站开发",即实现浏览器与服务器之间的数据传输,后端(服务器端)通常是HTTP服务器,前端(浏览器端)通常是浏览器
image.png
HTTP协议的交互方式是如图所示"一问一答型",对于基本的网站开发来说是够用的,但是网站开发中我们经常能看到如下的情景:
image.png
这种类似于"QQ"对话框的实现就不是HTTP协议所能做到的了,其通信模型可以简化如下:
image.png
可以看出,这不是"一问一答型",这个场景需要服务器主动给浏览器发送消息,这个功能业界也叫做消息推送,所以应用层除了HTTP协议之外,还有一个与之搭配的协议称为"websocket",可以补充HTTP协议所办不到的功能

2. HTTP报文格式

2.1 抓包工具

Fiddler:是一款专注于HTTP、HTTPS协议的抓包工具,本质上是一个"代理程序",可以获取到网络上传输的数据包并展示给程序员用以分析调试程序
注:我知道很多小伙伴在计算机网络课堂上使用过WireShark等工具,但是相比于这种"高大全"的工具,fiddler专注于HTTP协议数据包,且使用更加简单方便,也是我们后端开发程序员经常使用的工具!因此我推荐这款工具

安装地址:https://www.telerik.com/fiddler/)

代理程序:再来谈谈有关代理的概念,代理本身也是一种程序,可以实现数据包的转发效果,市面上所谓的"翻墙"很多也是通过代理实现的,Fiddler等工具就是通过获取到浏览器向服务器发送的HTTP请求数据包,然后由Fiddler转发给服务器,服务器返回HTTP响应数据包后也是由Fiddler获取到,然后再转发给浏览器,此时Fiddler就能够非常了解数据的传送过程以及具体的格式内容
image.png
代理也有正向代理、反向代理之分,感兴趣的小伙伴可以自行查阅资料!

2.2 HTTP报文格式

下面我们就通过访问www.baidu.com网站为例进行抓包分析

  1. 在Fiddler工具中使用快捷键ctrl + A + DEL 删除所有数据包
  2. 打开浏览器输入www.baidu.com,按下回车
  3. 打开Fiddler呈现如下数据包

image.png
其中显示蓝色的部分表示返回的是一个HTML格式数据,通常是访问一个网站的入口

  1. 选中数据包双击显示明细,右上角呈现请求报文格式,右下角显示响应报文格式,点击Raw可以显示原始数据样式

image.png

2.2.1 HTTP请求报文格式

image.png
HTTP请求报文一共有以下四部分组成:

  1. 首行:如GET https://www.baidu.com/ HTTP/1.1,表明请求方法为GET,访问URL为https://www.baidu.com/ ,HTTP版本号为1.1,三者之间用空格来分隔
  2. 请求头(header):如Host: www.baidu.com等等键值对格式都是请求头中的内容,每个键值对用换行分隔,键和值之间使用:空格分隔,图中第二行到最后一行都是请求头的内容
  3. 空行:请求头最下方有一个空行,这个空行可以用作结束标记
  4. 正文(body):HTTP请求报文的载荷部分,可以有也可以没有

2.2.2 HTTP响应报文格式

image.png
HTTP响应报文一共有以下四部分组成:

  1. 首行:如HTTP/1.1 200 OK,表明HTTP协议版本为1.1,响应状态码为200,响应描述信息是OK,三者之间用空格来分隔
  2. 响应头(header):如Content-Type: text/html; charset=utf-8等等键值对格式都是相应头中的内容,每个键值对用换行分隔,键和值之间使用:空格分隔
  3. 空行:响应头最下方有一个空行,这个空行可以用作结束标记
  4. 正文(body):HTTP响应报文的载荷部分,通常来说会携带

2.3 报文详细字段

2.3.1 认识URL

URL与URI:URL全程统一资源定位符,URI全程统一资源标识符,严格的来说URI的表示范围大于URL,上述我们看到的https://www.baidu.com/就是最简单的URL,描述了网络资源所处的位置,一个完整的URL结构如下:
image.png

  • 协议方案名:表示协议名称
  • 登录信息(认证):因为不够安全,已经逐渐淘汰
  • 服务器地址:表示服务器所在位置,域名也可以使用IP地址
  • 服务器端口号:表示访问的服务器的应用程序所处端口号,如果不带端口号则使用默认的协议端口号,如HTTP协议的80端口号,HTTPS协议的443端口号
  • 带层次的文件路径:访问资源在服务器指定应用程序的文件目录
  • 查询字符串:浏览器传递给服务器信息的重要途径,是请求内容的补充说明(很重要,后续单独讨论)
  • 片段标识符:用来标识当前页面的哪个部分,可以实现页面内部跳转(如Vue官网就使用到了)

URL encode:我们谈论到有关查询字符串中带有一些字符如**&有具体含义,此时如果我们想要携带的信息也带有&符号该怎么办呢?又或者如果我们携带的数据中带有中文字符怎么办呢?此时我们就需要使用URL encode**进行编码传输,我们可以使用十六进制表示并在前面加上%的形式进行转义

例如:我们在百度上搜索"米饭"二字,对应的URL就变为[https://www.baidu.com/s?wd=%E7%B1%B3%E9%A5%AD](https://www.baidu.com/s?wd=%E7%B1%B3%E9%A5%AD),其中%E7%B1%B3%E9%A5%AD就是对应中文的url encode码

注意:在查询字符串中带有中文或者需要转义的内容时,一定要设置url encode!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【并发编程】原子累加器

📝个人主页:五敷有你 🔥系列专栏:并发编程 ⛺️稳重求进,晒太阳 JDK8之后有专门做累加的类,效率比自己做快数倍以上 累加器性能比较 参数是方法 // supplier 提供者 无中生有 ()->结果// func…

Springboot 整合 Quartz(定时任务框架)

一、java 定时任务调度的实现方式 1、Timer 特点是:简单易用,但由于所有任务都是由同一个线程来调度,因此所有任务都是串行执行的,同一时间只能有一个任务在执行,前一个任务的延迟或异常都将会影响到之后的任务&#…

SpringBoot 集成 WebSocket,实现后台向前端推送信息

SpringBoot 集成 WebSocket,实现后台向前端推送信息 在一次项目开发中,使用到了Netty网络应用框架,以及MQTT进行消息数据的收发,这其中需要后台来将获取到 的消息主动推送给前端,于是就使用到了MQTT,特此…

spring-authorization-server 公共客户端方式获取授权码和Token的流程

spring-authorization-serve【版本1.2.1】官方文档中提及了关于RegisteredClient中所涉及的客户端身份验证方法,也就是RegisteredClient中提及的clientAuthenticationMethods属性对应的“none”值,目前clientAuthenticationMethods属性支持的值包含&…

SpringBoot 登录检验JWT令牌 生成与校验

JWT官网 https://jwt.io/ 引入依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version> </dependency>设置过期时间 LocalDateTime localDateTime LocalDateTime.now().…

《低功耗方法学》翻译——附录B:UPF命令语法

附录B&#xff1a;UPF命令语法 本章介绍了文本中引用的所选UPF命令的语法。 节选自“统一电源格式&#xff08;UPF&#xff09;标准&#xff0c;1.0版”&#xff0c;经该Accellera许可复制。版权所有&#xff1a;(c)2006-2007。Accellera不声明或代表摘录材料的准确性或内容&…

【经典项目】Java小游戏 —— 会说话的汤姆猫

一、游戏回顾 【预期效果】 【玩法介绍】 1、 和它说话&#xff0c;它将用有趣的声音重复你的话。 2、打它的头&#xff0c;它会装成被打的样子&#xff0c;连续打还会晕倒&#xff1b;抚摸肚子&#xff0c;它会打呼噜&#xff1b;打肚子&#xff0c;它会装肚子疼&#xff1b…

WhisperFusion:与 AI 无缝语音对话(超低延迟),深入理解用户每句话背后的含义

演示视频里面&#xff0c;那老哥问它问题之后&#xff0c;后面更改问题&#xff0c;依然能很好的记录问题变化的过程并给出答案。 WhisperFusion 是基于 WhisperLive 和 WhisperSpeech 的强大工具&#xff0c;将声音转文字和文字理解融为一体&#xff0c;让你与AI机器人无缝语…

双非本科准备秋招(10.2)—— JVM3:垃圾收集器

垃圾收集器 分为七种&#xff0c;如下&#xff1a; 从功能的角度分为 1、串行&#xff1a;Serial、Serial Old 2、吞吐量优先&#xff1a;Parallel Scavenge、Parallel Old 3、响应时间优先&#xff1a;CMS 吞吐量优先VS响应时间优先 吞吐量运行用户代码时间/(运行用户代码…

开源软件全景解析:驱动技术创新与行业革新的力量

目录 什么是开源 开源的核心 开源软件的特点 为什么程序员应该拥抱开源 1.学习机会&#xff1a; 2.社区支持&#xff1a; 3.提高职业竞争力&#xff1a; 4.加速开发过程&#xff1a; 5.贡献和回馈&#xff1a; 开源软件的影响力 开源软件多元分析&#xff1a; 开源…

Java实现婚恋交友网站 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 会员管理模块2.3 新闻管理模块2.4 相亲大会管理模块2.5 留言管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 会员信息表3.2.2 新闻表3.2.3 相亲大会表3.2.4 留言表 四、系统展示五、核心代码5.…

【Java EE初阶十】多线程进阶二(CAS等)

1. 关于CAS CAS: 全称Compare and swap&#xff0c;字面意思:”比较并交换“&#xff0c;且比较交换的是寄存器和内存&#xff1b; 一个 CAS 涉及到以下操作&#xff1a; 下面通过语法来进一步进项说明&#xff1a; 下面有一个内存M&#xff0c;和两个寄存器A,B; CAS(M,A,B)&am…

AQS简介、AQS实现原理、线程夺取锁失败 AQS队列的变化、线程被唤醒时 AQS队列的变化

AQS AQS简介AQS实现原理场景01-线程抢夺锁失败时&#xff0c;AQS队列的变化场景02-线程被唤醒时&#xff0c;AQS队列的变化 AQS简介 AQS(全称AbstractQueuedSynchronizer)即队列同步器。它是构建锁或者其他同步组件的基础框 架(如ReentrantLock、ReentrantReadWriteLock、Sema…

docker核心技术

一. 从系统架构谈起 传统分层架构 vs 微服务 微服务改造 分离微服务的方法建议: 审视并发现可以分离的业务逻辑业务逻辑,在对业务领域不是特别熟悉的时候,按照部门职能进行划分,例如账号、财务等寻找天生隔离的代码模块,可以借助于静态代码分析工具如果可以闭环的解决一…

STM32F4学习

F4系统架构 8个主控总线7个被控总线 主控总线 Cortex-M4内核 I总线Cortex-M4内核 D总线Cortex-M4内核 S总线DMA1存储器总线DMA2存储器总线DMA2外设总线以太网DMA总线USB OTG HS DMA总线 被控总线 内部FLASH ICode总线内部FLASH DCode总线主要内部SRAM1&#xff08;112KB&a…

二分查找------蓝桥杯

题目描述&#xff1a; 请实现无重复数字的升序数组的二分查找 给定一个元素升序的、无重复数字的整型数组 nums 和一个目标值 target&#xff0c;写一个函数搜索 nums 中的target&#xff0c;如果目标值存在返回下标 (下标从0 开始)&#xff0c;否则返回-1 数据范围: 0 < l…

中继DHCP配置实验

实验大纲 1.构建网络拓扑结构图 2.对路由器进行配置 3.对DHCP服务器进行配置 4.对交换机S1进行配置&#xff08;创建vlan&#xff09; 5.配置路由器&#xff0c;并分配逻辑接口 1.构建网络拓扑结构图 2.对路由器进行配置 Router>en Router#conf t Enter configuratio…

R语言学习case11:ggplot 置信区间(包含多子图)

ggplot Geometric objects How are these two plots similar? 两个图都包含相同的x变量、相同的y变量&#xff0c;并且描述相同的数据。但是这两个图并不相同。每个图使用不同的可视化对象来表示数据。在ggplot2语法中&#xff0c;我们说它们使用不同的geoms。 geom是绘图…

[经验] 月字旁一个卢念什么 #职场发展#媒体#微信

月字旁一个卢念什么 1、月卢念什么 “月卢念什么”是一个广为传颂的故事。传说中&#xff0c;月卢是唐婉的丈夫&#xff0c;也是唐婉的伴读&#xff0c;两人情深意重。有一天&#xff0c;唐婉嫁给了别人&#xff0c;月卢离开了她。从此以后&#xff0c;月卢每晚都背着月亮念唐…

k8s学习(RKE+k8s+rancher2.x)成长系列之简配版环境搭建(二)

三、简配版集群&#xff0c;适用于demo环境 1.集群架构设计 主机名角色配置(核数&#xff0c;内存&#xff0c;磁盘)MasterRKE,controlplane,etcd,worker,rancher-master2C 8G 40GSlaver1controlplane,worker,rancher-master2C 8G 40GSlaver2controlplane,worker,rancher-mas…