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

news2024/11/19 16:46:02

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!!!

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

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

相关文章

Unity类银河恶魔城学习记录1-14 AttackDirection源代码 P41

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili PlayerPrimaryAttackState.cs using System.Collections; using System.Co…

测试开发体系

软件测试 通过手工或者工具对 “被测对象”进行测试验证实际结果与预期结果之间是否存在差异 软件测试作用 通过测试工作可以发现并修复软件当中存在的缺陷,从而提高用户对产品的使用信心测试可以降低同类型产品开发遇到问题的风险 软件缺陷 软件缺陷被测试工程…

京东数据分析(电商数据查询):2023年冲锋衣行业大卖,销售额同比增长96%!

在服装行业,每年都会出现不同的服装爆款,成为人们时尚穿搭的新宠,2023年的服装爆款无疑是冲锋衣。 在社交平台上,冲锋衣鲨鱼裤运动鞋的搭配一时间成为许多女性消费者的户外潮流穿搭,不少网友点赞表示“很出片”。对于…

python创建pdf文件

目录 一:使用reportlab库 二:使用使pdf库 在Python中生成PDF文件可以使用多种库,其中最常用的是reportlab和fpdf。以下是使用这两个库生成PDF文件的示例代码: 一:使用reportlab库 1:写入文字信息 from r…

34 使用 LNMP 架构部署动态网站环境

源码包程序 LNMP 动态网站部署架构 LNMP 动态网站部署架构是一套由 Linux Nginx MySQL PHP 组成的动态网站系统 解决方案。 1. 准备工作 在使用源码包安装服务程序之前,首先要让安装主机具备编译程序源码的环境。这需要 具备 C 语言、C语言、Perl 语言的编译器&…

宝塔+php+ssh+vscode+虚拟机 远程调试

远程(虚拟机)宝塔 安装扩展 配置文件添加,zend_extension看你虚拟机的具体位置 [Xdebug] zend_extension/www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so xdebug.modedebug xdebug.start_with_requesttrigger xdebug.client_host&quo…

关于RabbitMQ面试题汇总

什么是消息队列?消息队列有什么用? 消息队列是一种在应用程序之间传递消息的通信机制。它是一种典型的生产者-消费者模型,其中生产者负责生成消息并将其发送到队列中,而消费者则从队列中获取消息并进行处理。消息队列的主要目的是…

spring boot学习第十篇:elastic search必须使用用户名密码授权后才能访问、在java代码中操作索引

前提条件:安装好了elastic search服务,参考:elastic search入门_ubuntu elasticsearch 密码-CSDN博客 1、配置elastic search必须使用用户名密码授权才能访问 1.1开启x-pack验证 修改config目录下面的elasticsearch.yml文件,添…

#Z2322. 买保险

一.题目 二.思路 1.暴力 训练的时候&#xff0c;初看这道题&#xff0c;这不就打个暴力吗&#xff1f; 2.暴力代码 #include<bits/stdc.h> #define int long long using namespace std; int n,m,fa,x,y,vis[1000001],ans; vector<int> vec[1000001]; void dfs(i…

LabVIEW高精度微小电容测量

LabVIEW高精度微小电容测量 在电子工程和科研领域&#xff0c;精确测量微小电容值是一项有一定要求的任务&#xff0c;尤其在涉及到高精度和低成本时。设计了一种基于LabVIEW高精度微小电容测量系统&#xff0c;旨在提供一个既经济又高效的解决方案。 该系统的核心在于使用FD…

Vue3.0(三):Vue组件化深入理解

Vue组件化深入理解 生命周期 每个组件都可能经历 创建、挂载、更新、卸载等一系列过程 在每个阶段&#xff0c;我们可能会添加一些属于自己的逻辑代码 在Vue中&#xff0c;生命周期通过生命周期函数实现 生命周期函数实际上就是回调函数&#xff0c;在某个时间会被Vue源码调…

14.scala隐式转换

目录 概述实践代码执行结果 结束 概述 隐式转换&#xff1a;偷偷的(隐式)对现有功能进行增强(转换) 实践 代码 package com.fun.scalaimport java.io.File import scala.io.Sourceobject ImplicitApp {def main(args: Array[String]): Unit {// implicit 2 to 等价 &…

后台系统--搭建前端环境

这里写目录标题 1. 安装vscode1.1 安装1.2 安装插件 2. 安装node.js&#xff0c;推荐163. 创建工作区3.1 创建空文件夹&#xff0c;不能有中文3.2 vscode打开文件夹&#xff0c;保存为工作区3.3 安装依赖 1. 安装vscode 1.1 安装 1.2 安装插件 2. 安装node.js&#xff0c;推荐…

C语言之数据在内存中的存储

目录 1. 整数在内存中的存储2. 大小端字节序和字节序判断什么是大小端&#xff1f;为什么有大小端&#xff1f;练习1练习2练习3练习4练习5练习6 3. 浮点数在内存中的存储浮点数存的过程浮点数取得过程练习题解析 1. 整数在内存中的存储 在讲解操作符的时候&#xff0c;我们已经…

Windows下Node.js下载安装及环境变量配置教程

Windows下Node.js下载安装及环境变量配置教程 安装版本&#xff1a;node-v18.19.0-x64.msi 文章目录 Windows下Node.js下载安装及环境变量配置教程一、Node.js和NPM简介二、下载地址三、安装步骤四、环境配置五、安装淘宝镜像总结 一、Node.js和NPM简介 1、Node.js &#xf…

嵌入式软件设计方式与方法

1、嵌入式软件与设计模式 思从深而行从简 软件开发&#xff0c;难的不是编写软件&#xff0c;而是编写功能正常的软件。软件工程化才能保证软件质量和项目进度&#xff0c;而设计模式使代码开发真正工程化&#xff0c;设计模式是软件工程的基石。 所谓设计模式就是对常见问题的…

[BUUCTF]-PWN:inndy_echo解析

查看保护 查看ida 有格式化字符串漏洞&#xff0c;可以修改printf的got表内地址为system&#xff0c;传参getshell 解法一&#xff1a; 在32位中可以使用fmtstr_payload直接修改&#xff0c;免去很多麻烦 完整exp&#xff1a; from pwn import* pprocess(./echo) premote(n…

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

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

Could not connect to Redis at 127.0.0.1:6379:由于目标计算机积极拒绝,无法连接...问题解决方法之一

一、问题描述 将Redis压缩包解压后&#xff0c;安装Redis过程中出现问题Could not connect to Redis at 127.0.0.1:6379:由于目标计算机积极拒绝&#xff0c;无法连接... 官网windows下redis开机自启动的指令如下&#xff1a; 1、在redis目录下执行 redis-server --service-in…

深入理解Java中的二叉树

目录 一、什么是二叉树? 二、二叉树的主要类型 三、二叉树的实现 四、二叉树的应用 五、关于二叉树的题目 引言: 二叉树是计算机科学中常用的一种数据结构&#xff0c;它是由节点组成的层级结构&#xff0c;每个节点最多有两个子节点。在Java编程语言中&#xff0c;二…