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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL篇----第八篇

系列文章目录 文章目录 系列文章目录前言一、存储过程优化思路二、触发器(一段能自动执行的程序)三、数据库并发策略四、MySQL 中有哪几种锁?五、MySQL 中有哪些不同的表格?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳…

常用存储器

目录 一、存储器的种类 二、易失性存储器(RAM) 1. DRAM (1)SDRAM (2)DDR SDRAM 2. SRAM 3. DRAM与SRAM的应用场合 三、非易失性存储器 1. ROM (1)MASK ROM (2…

tab切换

任务描述&#xff1a;鼠标点击不同商品类别标题时切换不同页面 html代码&#xff1a; <div class"tab"><div class"tab-head"><h3>家电</h3><ul><li><a class"active" href"javascript:;"&g…

企业动态 | UFAPKU“金融科技”沙龙走进同创永益——前沿技术在金融科技领域的应用

金融科技作为金融发展的驱动力量&#xff0c;对金融行业有着深远的影响。金融行业通过技术创新和数字化转型&#xff0c;极大地提高了金融服务和产品的效率和便捷性。1月21日&#xff0c;UFAPKU“金融科技”第二期沙龙在北大校友企业同创永益北京总部举办&#xff0c;数十位来自…

从0搭建react+ts+redux+axios+antd项目

文章目录 一、安装及初始化二、TypeScript配置三、Webpack配置四、Prettier统一编码风格五、使用less六、Antd 安装及使用七、添加redux及使用八、添加Router及配置九、安装axios十、echarts按需引入 本文介绍了如何用creat-react-app脚手架搭建一个react项目的基本结构&#x…

哪种安全数据交换系统,可以满足信创环境要求?

安全数据交换系统是一种专门设计用于在不同网络环境之间安全传输数据的技术解决方案。这类系统确保数据在传输过程中的完整性、机密性和可用性&#xff0c;同时遵守相关的数据保护法规和行业标准。 使用安全数据交换系统的原因主要包括以下几点&#xff1a; 1、数据保护&#…

【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏10(附项目源码)

本节最终效果演示 文章目录 本节最终效果演示系列目录前言快捷栏绘制UI代码控制快捷列表信息 源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第23篇中&#xff0c;我们将探索如何制作…

【LeetCode力扣】单调栈解决Next Greater Number(下一个更大值)问题

目录 1、题目介绍 2、解题思路 2.1、暴力破解法 2.2、经典Next Greater Number问题解法 1、题目介绍 原题链接&#xff1a;496. 下一个更大元素 I - 力扣&#xff08;LeetCode&#xff09; 示例1&#xff1a; 输入&#xff1a;nums1 [4,1,2], nums2 [1,3,4,2].输出&…

计算机网络原理基础

目录 前言&#xff1a; 1.网络发展史 2.网络通信基础 2.1IP地址 2.1.1定义 2.1.2格式 2.2端口号 2.2.1定义 2.2.2格式 2.3协议 2.3.1定义 2.3.2作用 2.3.3分层 2.4五元组 2.4.1定义 2.4.2组成 3.TCP/IP五层网络模型 3.1模型概念 3.2模型构成 3.3网络分层对应…

aspose-words基础功能演示

我们在Aspose.Words中使用术语“渲染”来描述将文档转换为文件格式或分页或具有页面概念的介质的过程。我们正在讨论将文档呈现为页面。下图显示了 Aspose.Words 中的渲染情况。 Aspose.Words 的渲染功能使您能够执行以下操作: 将文档或选定页面转换为 PDF、XPS、HTML、XAML、…

【数据结构与算法】(5)基础数据结构之队列 链表实现、环形数组实现详细代码示例讲解

目录 2.4 队列1) 概述2) 链表实现3) 环形数组实现 2.4 队列 1) 概述 计算机科学中&#xff0c;queue 是以顺序的方式维护的一组数据集合&#xff0c;在一端添加数据&#xff0c;从另一端移除数据。习惯来说&#xff0c;添加的一端称为尾&#xff0c;移除的一端称为头&#xf…

保姆级系列:各种打印机驱动的安装和使用

保姆级系列&#xff1a;各种打印机驱动的安装和使用 1.介绍2.下载3.安装4.实践教程5.总结 1.介绍 市面上打印机品牌和型号众多&#xff0c;打印机接口目前主要分为如下几种&#xff1a; 逻辑端口&#xff1a;TCP/IP、WSD、USB、LPT、COM 物理端口&#xff1a;RJ45、DB15母、US…