JavaEE—— HTTP协议(上篇)

文章目录

  • 一、认识什么是 HTTP 协议
  • 二、HTTP 抓包工具
    • 1.了解使用哪种工具
    • 2.了解抓包工具抓包的原理
    • 3.简单使用抓包工具
  • 三、解释 HTTP 中的报文格式
    • 1.认识 URL
    • 2. 认识 HTTP 请求
      • 解释首行 "方法"
      • 解释 请求头(header)
      • 空行
      • body
    • 3、总结

一、认识什么是 HTTP 协议

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

在这里插入图片描述
通俗的来讲,HTTP 就是 浏览器和服务器之间交互的桥梁
HTTP 往往是基于传输层的 TCP 协议来实现的。

也就是说,HTTP 请求,本质上就是给 TCP socket 内写了一个符合 HTTP 格式的字符串。
HTTP 的工作过程,大致上如下图所示:
在这里插入图片描述

二、HTTP 抓包工具

1.了解使用哪种工具

为了可以更直观的见到 HTTP 协议的交互详细过程,在这里我们可以借助一个 第三方工具 来看到。称为 “抓包”。

在这里,本人使用的工具是 Fiddler。
这里是官方的下载地址:Fiddler 抓包工具

使用注意事项:
filder 本质上是一个代理程序,使用时需要注意下面两点。

  1. 可能会和别的代理程序产生冲突,使用时要注意关闭其他代理程序(包括浏览器的插件)
  2. 想要正确的实现抓包,还需要开启一个 https 功能。
    fider 在默认情况下是不能抓 https 的包的,这里需要手动启动一下。如图:
    在这里插入图片描述

2.了解抓包工具抓包的原理

在上面我已经提到过,这个抓包工具本质上是一个代理。在这里,代理起到的作用就是一个中间传话人
如图:
在这里插入图片描述
在这个过程之中,浏览器和服务器之间进行了那些信息交流。这个中间的传话人就可以将信息记录下来。

代理分为两种,正向、反向
正向代理代表着客户端的代理,称之为正向代理。
反向代理代表着服务器的代理,称之为反向代理。

3.简单使用抓包工具

这里,我通过访问 百度 的页面,简单进行抓包操作。
在这里插入图片描述
如图所示,这个蓝色的字符串就是一个 html 页面。

上面的这么多结果,就是浏览器在访问搜狗主页时,产生的 HTTP 请求。浏览器打开一个页面,对应的请求可能是一个,也可能是多个。

在这里插入图片描述
双击蓝色链接,此时,在工具栏的右侧上半部分,选中 Raw ,在此处,就可以看到最原始的效果。

观察这里的抓包结果,可以看到,这里是 HTTP 请求,其实是一个文本行格式的数据。相较于 tcp 这样的 二进制 格式,就更方便让用户进行观察。

在这里插入图片描述
如图所示,这里是 响应数据,这些数据本身也是文本,但是,有的服务器为了节省带宽,在此处会将响应进行压缩。(变为二进制)
这里的文本内容就是百度首页,html 中的内容。

三、解释 HTTP 中的报文格式

在前面,我们已经介绍了 TCP 、UDP 这两个协议数据报。所以,要学习一个新的协议,最主要要了解的就是 报文格式!

在这里插入图片描述
如上图所示,这就是抓包工具获取到的 首行信息
这里包含着三个部分,之间使用空格进行区分。

  • GET: HTTP 的方法。
  • https://www.baidu.com/: URL 也就是俗称的网址。
  • HTTP/1.1: 版本号。

1.认识 URL

在这里插入图片描述
如上图所示,这就是一个基本的 URL 。
但是,需要注意的是,URL 并不是 HTTP 专属的。很多协议都可以使用 URL

例如:在 jdbc 中,setURL
需要标注出 数据库服务器 的位置就需要:
setURL("jdbc:mysql://127.0.0.1:3306/JDBCtest?characterEncoding=utf-8&useSSl=false");

在上面的 URL 中,最关键的四个部分是:
1.域名 / IP
2.端口号
3.带层次的路径
4.查询字符串

下面我通过一个比较形象的例子来让我们更加容易理解:
在这里插入图片描述

URL 中的部分情况解释

到这里,我们可能会有一些疑问。在前面我们进行抓包时,抓取到的是 https://www.baidu.com/
我们发现上面的 URL 格式存在着差异。

到此,我们要知道一个新的概念:一个 URL 中有几个比较特殊的部分

  • 端口号:这个信息是可以省略的。在省略是,浏览器会默认提供端口
    对于 http,默认端口是 80;
    对于 https,默认端口是 443.
  • 路径:这里的 / 也是一个路径,这里没有省略,只是有点短。。。
    这里代表的是 “根目录”,是 http 服务器的根目录,http 服务器是系统上的一个进程。这个目录里的资源都可以让外界进行访问。

这里我们可以访问一下百度贴吧,看看其中的不同之处。
在这里插入图片描述
此时我们随便点进去一个帖子
在这里插入图片描述
查询字符串,是以 ?开头,以键值对的方式组织。
键值对之间使用 & 分割。
键和值之间使用 = 分割。

2. 认识 HTTP 请求

在介绍 HTTP 请求之前,我们先要了解 HTTP 请求的四个部分。

  1. 首行
  2. 请求头(header)
  3. 空行
  4. 正文(body)

解释首行 “方法”

所谓 “方法” ,就是阐述了此次请求的语义——(想要做什么)。
方法种类大致如下:
在这里插入图片描述
这里的方法看似很多,但是在实际开发中,最常用的就是 GET 和 POST 两个。

  • GET 请求
    就是在浏览器的地址栏中直接输入 url。
    通过抓包工具我们可以的到下面的信息:
    在这里插入图片描述
  • POST 请求
    对于这个请求,最典型的就是登录操作,在登录跳转时,就会涉及到 POST 请求。还有另一个就是上传文件操作。
    通过抓包操作,我们可以得到下面的信息:
    在这里插入图片描述
    这里的 body 中的内容是程序员自定义的。

观察上面的信息,我们就可以发现,如果是 GET 请求,一般没有 body 。而如果是 POST 请求,一般有 body。

经典面试问题
GET 和 POST 之间的典型区别:

  1. GET 也可以向服务器传递一些信息,GET 传递的信息一般都是放在 query string。
    而 POST 则是通过 body 传递。
  2. 语义上存在着差别
    GET 请求一般是用在服务器获取数据
    POSt 请求一般是用来给服务器传递数据
  3. GET 通常会被设定为 幂等 的。
    (所谓 幂等 就是相同的输入,得到的结果也是确定的)
    POST 不要求幂等
  4. GET 可以被缓存
    POST 一般不能被缓存

解释 请求头(header)

在这里插入图片描述
如上图所示,这里 header 中就是 一些键值对。这些键值对是 HTTP 事先定义好的,有着特定的含义。

  • Host

在这里插入图片描述
Host 这里的 地址 和 端口 ,用来描述你最终要访问的目标。
这个内容大概率和 URL 中的是一样的,也有不同的情况。

  • Content-Length & Content-Type

上面的两个关键字,前者,表示 body 中的数据长度。后者,表示 body 中的数据格式。
注意:
要使用这两个关键字的前提必须是有 body 。
如果是 GET ,则没有 body。
如果是 POST,有 body 则必须要有这两字段
这里通过一个简单图示来解释一下:
在这里插入图片描述

  • User-Agent(简称 UA)

如图所示:
在这里插入图片描述
这个字段,描述的是 浏览器和操作系统的版本
目前,这个字段主要是用来区分 PC 和 移动端。通过 User-Agent 来进行大的区分。

  • Referer

这个字段,描述的是当前页面的 “来源”。
这个字段的主要作用就是 “统计” 和 “防盗链”
需要注意的是,如果直接通过地址栏输入地址,或者点击收藏夹,这里是没有 referer 的。
在这里插入图片描述

上面说到,这个字段中的有一个作用是 “统计”。
在这里,统计的意思就是,当浏览器想 web 服务器发送请求时,来告诉服务器这个页面是通过哪一个链接来的,从而根据这个信息来 统计流量
了解 “劫持” 现象
HTTP 本身是明文传输的,很容易就可以获取到请求内容,所以也是有办法篡改内容的,此时如果将 referer 修改,流量就会发生改变,呢么此时就发生了 劫持

  • Cookie

这个字段也是一个非常关键的一个属性。
我们需要注意一个关键点:网页,默认是不允许访问计算机硬盘的。
所以,在本质上,这是浏览器给网页提供的 本地存储数据的机制!
cookie 就是浏览器对于访问硬盘做出了限制。
在这里插入图片描述
观察上图,我们会发现,cookie 是通过键值对的形式对数据进行组织。

问题 1
Cookie 从哪里来?

Cookie 中的数据来自于服务器,服务器会通过 HTTP 响应的报头部分(Set-Cookie 字段),来决定 Cookie 需要存储什么东西。

问题 2
Cookie 将数据存放在哪?

这里可以认为数据 存放在浏览器,存放在硬盘中

Cookie 存在是,是按照 浏览器 + 域名 维度进行细分的。不同的浏览器,各自存放 Cookie。同一个浏览器的不同域名,对应不同的 Cookie。

Cookie 内部存放的不止是键值对。同时还有 过期时间。(在很多网站中,登陆一次之后,会自动记录一段时间的登录状态)

问题 3
cookie 要回到哪里?

cookie 中的信息会回到服务器中。

客户端这边,会通过 cookie 来保存当前用户使用的中间状态
当客户端访问浏览器的时候,就会自动的将 cookie 中的内容带入到请求中。 此时,服务器就能知道现在客户端是什么样子。

形象的来看:
cookie 就像是 服务器 在 浏览器 这里制造的一个寄存处一样。

举个栗子
比如说,我们去学校的图书阅览室的电脑上进行了登录操作。此时的登录状态就保存到了cookie之中
cookie 是有保存时间的。
在这个时间内,当我们去访问时,浏览器就会在请求后端信息时,同时将 cookie 传递给后端进行解析。此时,就不需要从新登陆了。
但是如果超过这个保存时间,后端就会要求重新登陆了。网站越敏感,cookie 过期的时间就会越短。

空行

对于空,我想应该没有什么需要解释的。但是,这里有一个值得思考的问题:
为什么 HTTP 报文中要存在空行?

其实这个原因有两点:

  1. HTTP 协议没有规定报头部分的键值对有多少个,空行在这里的作用就是报头的结束标记。
  2. HTTP 在传输层所依赖的是 TCP 协议,是面向字节流的。 如果没有这个空行就会出现 “粘包” 问题。

body

这里的正文内容一般都是 程序员自己设定的。其中的信息是以键值对的形式存才的。
键值对之间使用 & 进行分割。
键和值之间使用 = 进行分割。

3、总结

在上面,我已经将 HTTP 协议格式中的各个部分进行简单的说明,下面通过这张图片,我们可以更加直观和系统的看到 HTTP 协议在 浏览器 和 服务器 之间的交互

在这里插入图片描述

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

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

相关文章

PS学习 - 抠图-通道-主题颜色和背景颜色不能相近

抠出蝴蝶 1.通道抠图 套索工具 这里需要圈住你要的,注意尽量小点 ctrl j 复制 然后去掉背景 点击通道 找到明暗对比最大的通道,这里我理解为颜色反差最大的那个,突出你要抠的东西 搜了下说是一般为蓝色 复制通道 ctrll调出色阶 通过移…

一文总结python的异常数据处理示例

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享,包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…

springboot278基于JavaWeb的鲜牛奶订购系统的设计与实现

鲜牛奶订购系统的设计与实现 摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统鲜牛奶订购信息管理难度大&…

VMwareWorkstation16与Ubuntu 22.04.6 LTS下载与安装

一、准备工作 VMware Workstation Pro 16官网下载: https://customerconnect.vmware.com/cn/downloads/info/slug/desktop_end_user_computing/vmware_workstation_pro/16_0。下载需要账号登录。 二、安装 双击exe文件稍等一会会弹出安装程序,如图 这…

Airtest-Selenium升级兼容Selenium 4.0,给你全新体验!

一、前言 在上期更新推文中提到,我们Airtest-Selenium更新到了1.0.6版本,新增支持Selenium4.0的语法,那么我们来看一下Airtest-Selenium更新后有什么新的内容吧~ 二、selenium 4.0有什么新功能 selenium4.0最主要的还是定位元素方法的更新…

力扣--最小覆盖子串--双端队列+滑动窗口

滑动窗口思路(双端队列实现): 可以参考一下:力扣hot8---滑动窗口-CSDN博客以及力扣hot9---滑动窗口-CSDN博客。 使用滑动窗口有以下几个步骤:初始化双端队列(将s的前t_len个元素入队,此时检验是…

spring源码分析-事务的底层源码-1

这里写自定义目录标题 spring事务的源码分析阅读spring事务源码的前置知识JDBC的事务spring当中和事务相关的对象spring应用程序编码spring事务的源码如何开始研究spring源码当中如何代理bean spring事务的源码分析 最近在研究seata;看了一下spring当中的事务有一点…

第十三届蓝桥杯(C/C++ 大学B组)

目录 试题 A: 九进制转十进制 试题 B: 顺子日期 试题 C: 刷题统计 试题 D: 修剪灌木 试题 E: X 进制减法 试题 F: 统计子矩阵 试题 G: 积木画 试题 H: 扫雷 试题 I: 李白打酒加强版 试题 J: 砍竹子 试题 A: 九进制转十进制 九进制正整数 ( 2022 )转换成十进制等于多…

Hypermesh碰撞安全之安全带缠绕建模

进入安全带建模(Analysis→safety→belt routing) ①肩带的创建 注:end types: 表示2D和1D单元的过渡方式 ②腰带的创建 ③修改接触系数

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Tabs)

通过页签进行内容视图切换的容器组件,每个页签对应一个内容视图。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 该组件从API Version 11开始默认支持安全区避让特性(默认值为&#x…

【老旧小区用电安全谁能管?】安科瑞智慧用电安全管理系统解决方案

行业背景 电气火灾指由电气故障引发的火灾。每年以30%的比例高居各类火灾原因之首。以50%到80%的比例高居重特大火灾之首。已成为业界重点关注的对象并为此进行着孜孜不倦的努力。 国务院安委会也于2017年5月至2020年4月年开展了为期3年的电气火灾综合治理工作。在各界努力的…

HJ212协议C#代码解析实现

HJ212协议C#代码解析实现 HJ212协议是环保中一个非常重要的标准协议(字符串协议),之前写了两篇C HJ212协议解析的相关博文: 环保 HJ212协议解析基于Qt5.14.2的HJ212 TCP服务端接收解析入库程序 最近在学习C#,所以打算…

接口幂等性问题和常见解决方案

接口幂等性问题和常见解决方案 1.什么是接口幂等性问题1.1 会产生接口幂等性的问题1.2 解决思路 2.接口幂等性的解决方案2.1 唯一索引解决方案2.2 乐观锁解决方案2.3 分布式锁解决方案2.4 Token解决方案(最优方案) 3 Token解决方案落地3.1 token获取、token校验3.2 自定义注解,…

小蓝的漆房——算法思路

题目链接:1.小蓝的漆房 - 蓝桥云课 (lanqiao.cn) 本题只要是通过枚举的方法,算出涂成每一种颜色所需的天数,最后在所有天数中找出最小值(由题可知,最多只有60种颜色,所以可以尝试算出每种颜色所需的时间&am…

LeetCode刷题小记 八、【回溯算法】

1.回溯算法 文章目录 1.回溯算法写在前面1.1回溯算法基本知识1.2组合问题1.3组合问题的剪枝操作1.4组合总和III1.5电话号码的字母组合1.6组合总和1.7组合总和II1.8分割回文串1.9复原IP地址1.10子集问题1.11子集II1.12非递减子序列1.13全排列1.14全排列II1.15N皇后1.16解数独 写…

react中hooks使用限制

只能在最顶层使用Hook 不要在循环、条件中调用hook,确保总是在React函数最顶层使用它们 只能React函数中调用Hook 不要在普通的js函数中调用 在React的函数组件中调用Hook 在自定义hook中调用其他hook 原因: 我们每次的状态值或者依赖项存在哪里&…

springCloudeAlibaba的使用

父pom文件&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.o…

数据库中逻辑运算符的介绍以及优先级表

简介&#xff1a;逻辑运算符主要判断表达式的真假&#xff0c;返回值为1&#xff0c;0&#xff0c;null 其中包含&#xff1a; 逻辑非&#xff1a;not或&#xff01; 逻辑与&#xff1a;and或&& 逻辑或&#xff1a;or或|| 逻辑异或&#xff1a;XOR 1.逻辑非运算 规则…

mac打开exe文件的三大方法 mac怎么运行exe文件 mac打开exe游戏 macbookpro打开exe

exe文件是Windows系统的可执行文件&#xff0c;虽然Mac系统上无法直接打开exe文件&#xff0c;但是你可以在Mac电脑上安装双系统或者虚拟机来实现mac电脑上运行exe文件。除了这两种方法之外&#xff0c;你还可以在Mac电脑上使用类虚拟机软件打开exe文件&#xff0c;这三种方法各…

双指针 | 移动零 | 复写零

1.移动零 题目描述&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 示例&#xff1a; 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]解题思路&#xff1a; right指针一直往后移动&#xff0c;当…