HTTP 协议

文章目录

  • 1. 前言
  • 2. HTTP 协议
  • 3. fiddler 的安装与认识
  • 4. HTTP 协议报文格式
    • 4.1 请求
    • 4.2 响应
  • 5. 构造 HTTP 请求
    • 5.1 基于 form 表单构造 HTTP 请求
    • 5.2 基于 ajax 构造 HTTP 请求
  • 6. postman
  • 7. HTTPS
    • 7.1 加密
    • 7.2 HTTPS 的工作过程

1. 前言

前面几篇文章 , 说了关于 前端的一些知识 比如 html ,css , javaScript , 并且 做了一个 博客系统的 静态页面 ,

下面 我们就 回到后端 部分, 来学习一下这一方面的知识 .

这里我们先来了解 HTTP 协议

2. HTTP 协议


HTTP 属于 应用层 最广泛使用的协议之一.


这里我们 打开浏览器 随便获取一个网页 就能看到


比如 : 搜索百度 , https://www.baidu.com , https 相当于 是 http 的升级版 , 在 http 协议的基础上 进行了加密操作 .

在这里插入图片描述


简单来说: HTTP 协议 就是 浏览器 和 服务器 之前的交互桥梁.

在这里插入图片描述

3. fiddler 的安装与认识


图一 : fiddler 安装

在这里插入图片描述


图二 :

在这里插入图片描述


图三 :

在这里插入图片描述


图四 :

在这里插入图片描述


图五 :

在这里插入图片描述


有了以上的 认知之后 ,就可以来了解一下 http 里面的一些关键信息的含义了 , 这里我们学习一个协议,就是学习它的报文格式 .

4. HTTP 协议报文格式


在这里插入图片描述

4.1 请求


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


图三 :

在这里插入图片描述


图四 :

在这里插入图片描述


图五 :

在这里插入图片描述


到此 首行的三个部分 (1. 方法 , 2. URL , 3. HTTP 协议版本号 )就看完了 ,下面来 看 header 部分


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


图三 :

在这里插入图片描述


图四 :

在这里插入图片描述


到此 关于 header 头部 里面比较重要的就看完了,下面来看下一个环节 , 请求正文 .


正文中的内容格式和 header 中 的 Content-Type 密切相关 .

  1. application/x-www-form-urlencoded , 这种方式 在最终的数据 , 是通过 键值对的方式 来进行组织的

在这里插入图片描述


2. multipart/form-data , 这个 一般出现在 上传文件

在这里插入图片描述


3.application/json


在这里插入图片描述


到此 请求部分就看完了, 下面来看看我们的响应部分


关于 请求中 的空行我们还没有说 ,这里就简单的过一下 这里空行的作用 主要是 解决粘包问题

因为 HTTP 协议并没有规定报头部分的键值对有多少个. 空行就相当于是 “报头的结束标记”, 或者是 “报头和正文之间的分隔符”.

HTTP 在传输层依赖 TCP 协议, TCP 是面向字节流的. 如果没有这个空行, 就会出现 “粘包问题”.

4.2 响应


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


图三 :

在这里插入图片描述


HTTP 响应状态码 - HTTP | MDN (mozilla.org)


状态码 就看完了, 来看看 header 部分


Content-Type


关于 响应中的 Content-Type 常见的取值有下面几种 :

  1. text/html : body 数据格式是 HTML

  2. text/css : body 数据格式是 CSS

  3. application/javascript : body 数据格式是 JavaScript

  4. application/json : body 数据格式是 JSON

在这里插入图片描述


关于 Content-Type 的详细情况: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types


这里 body 部分 跟 Content-Type 关系比较大 , 这里可以自己抓包看看


到此我们的 请求和响应就看完了 ,最后再来看一眼这个图

在这里插入图片描述


关于请求和响应 , 不需要刻意的背 , 每次多抓抓包 , 就很容易熟悉他们 . (上面这个图 ,响应部分中的 body 写错了 因该是 响应正文)


引用 :

学习HTTP 有一个很好的 办法, 就是写爬虫 ,写一个程序,作为 HTTP 客户端 ,构造各种 HTTP 请求,通过 这些请求 ,来获取到你想要的一些效果 .

比如 : CSDN 写博客 , 顺着 评论 去 点赞 评论 收藏等

大致思路 : 抓包 分析一下 获取评论 , 响应数据格式是啥样子, 分析出给你留言的用户都是谁 ,

抓包 分析 点赞 / 留言功能 涉及到的 http 请求是啥样子的 ,

然后构造一摸一样的 HTTP 请求 往csdn服务器发 ,此时 csdn 的服务器也不知道这个请求是你程序的还是代码里面构造的.


这个不多说 ,下面 就来通过代码 构造 HTTP 请求

5. 构造 HTTP 请求


这里 构造 HTTP 请求 有多方法

  1. 基于 form 表单 (HTML 里的)
  2. 基于 ajax ( js 里的)
  3. 基于 socket (java 里的 这种方式 , 很少见 , 知道有这个东西即可)

5.1 基于 form 表单构造 HTTP 请求


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


到此 基于 from 表单 构造 HTTP 请求 就看完了,下面来看另外一种 功能更强的构造 HTTP 请求的方式 , ajax(啊加克斯).

5.2 基于 ajax 构造 HTTP 请求


ajax 也是 浏览器 提供的一种 通过 js 构造 http 请求的方式 .


ajax 的全称 : Asynchronous JavaScript And XML , 这里我们需要重点理解 Asynchronous 异步的


关于 Asynchronous 异步的 举个例子 :


比如 : 有一天 你找你女朋友 出来玩 , 女朋友 说 等一下, 这里的等一下 对于女生来说 起码半个小时 (洗脸 ,化妆 ,洗头 啥的) .

此时我们有两种等法 :

  1. 傻憨憨的等在宿舍楼下 , 一直盯着门口
  2. 找一个凉快的地方 ,打开手机 刷视频 或 开一把游戏 , 当女朋友 下楼后没发现我们人 就会发个微信说你在哪里不是在楼下等我吗 ,此时我们收到了消息就会关掉手机就 去宿舍楼下接女朋友


此时 做法一 就是 同步等待 , 做法二 就是异步等待 .


这里 简单来说 就是 A 等待 B

同步 : A 始终盯着 B , A 负责关注 B 啥时候就绪

异步 : A 不盯着 B , B 就绪之后主动 通知 A


想必到此因该对 异步有了一定的了解 ,在我们的http 中 ,通过 ajax 发起的 http 请求就属于 是 “异步” 的方式 .


当我们写好通过 ajax 发送请求的代码 ,执行 “发送请求” 操作之后 , 就不必要等待服务器响应回来,就可以立即先往下执行 ,当服务器的响应回来之后,再有浏览器通知到我们的代码 , 在根据响应执行后续逻辑


关于 在代码中 使用 ajax 有两种方法

  1. js 原生提供的 ajax 的 api (js 提供的 ajax 原生的 api 特别难用)
  2. jquery 提供的 ajax , 它的 api 针对原生 api 进行 封装, 简单很多 .


关于 jquery 前面 博客系统 静态页面 时就引入过


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


这里 ajax 就先说到这里,等后面我们有 能力写 服务器代码时 , 会通过 ajax 来完成 前后端交互 ,到时候在详细的说它 ,这里我们就先起个头 ,知道它是如何发送请求的即可.


另外 : ajax 与 form 相比 功能更强大 (之前说过 , 这里列举出 几个 强大的点)

  1. 支持 put , delete 等方法
  2. ajax 发送的请求可以灵活设置 header
  3. ajax 发送的请求 的 body 也是可以灵活设置的

6. postman


看完了 如何构造 HTTP 请求 ,这里推荐一个 构造 http 请求的 第三方工具 , 这里写代码构造 http 请求 明显是一个麻烦事 , 我们又想要测试 后端 (服务器) 的功能 ,那么就可以借助第三方工具来帮助我们.


每日一扎心: postman 是一个 有对象的 软件 , 它的 对象 就是 postwoman , postwoman 功能和 postman 功能差不多 .


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


postman 说完了,下面就来学习一下 前面一直提到的 https

7. HTTPS


HTTPS 其实就是 HTTP + 安全层 (SSL , SSL 是用来加密的协议 , SSL 是以前的叫法 现在一般称为 TLS )


这为啥需要加密呢 ?


上面说过 , 运营商劫持 太猖狂了 , 所以不得不将 HTTP 升级 成 HTTPS .


举个例子 :

臭名昭著的 “运营商劫持”

下载一个 天天动听 : 未被劫持的效果, 点击下载按钮, 就会弹出天天动听的下载链接.

在这里插入图片描述


已被劫持的效果, 点击下载按钮, 就会弹出 QQ 浏览器的下载链接

在这里插入图片描述


由于我们通过网络传输的任何的数据包都会经过运营商的网络设备(路由器, 交换机等), 那么运营商的网络设备就可以解析出你传输的数据内容, 并进行篡改.

点击 “下载按钮”, 其实就是在给服务器发送了一个 HTTP 请求, 获取到的 HTTP 响应其实就包含了该 APP的下载链接. 运营商劫持之后, 就发现这个请求是要下

载天天动听, 那么就自动的把交给用户的响应给篡改成 “QQ浏览器” 的下载地址了.


图示 :
在这里插入图片描述

之所以会出现这种情况,还不是 因为 钱吗.


通过上面我们可以知道, 网络上如果明文传输数据,是非常危险的, 这里想要解决这个问题 就可以采取 加密操作.

7.1 加密


下面就来了解一下啥是加密 :


加密就是把 明文 (要传输的信息)进行一系列变换, 生成 密文 .

解密就是把 密文 再进行一系列变换, 还原成 明文 .

在这个加密和解密的过程中, 往往需要一个或者多个中间的数据, 辅助进行这个过程, 这样的数据称为 密钥 (正确发音 yue 四声, 不过大家平时都读作 yao 四声) .

举个例子 :

83 版 <<火烧圆明园>> , 有人要谋反干掉慈禧太后. 恭亲王奕䜣给慈禧递的折子. 折子内容只是扯一扯家常, 套上一张挖了洞的纸就能看到真实要表达的意思.

明文: “当心肃顺, 端华, 戴恒” (这几个人都是当时的权臣, 后来被慈禧一锅端). 明文 最原始的数据

密文: 奏折全文 (加密后的数据)

密钥: 挖了洞的纸. (密钥 可以把明文 ,转化为 密文 , 或者把密文转化为成 明文)


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


谈到 加密 解密 ,这里就涉及到密码学 这个古老的学科 , 关于 密码学 ,我们又不得不谈到 祖师爷 图灵 . 他是 密码学的 奠基人 也是计算机科学的祖师爷之一 。

来瞧瞧 图灵大佬 :

在这里插入图片描述


下面来学习一 HTTPS 的工作过程 , 这里 HTTPS 主要是涉及到其中的 SSL 部分 (TLS) , 注意 : SSL 并非仅仅是在 HTTPS 中使用 .


另外 :密码学这个事情, 本身 非常复杂 ,对于数学 (数论) 要求是非常高的 , 下面所说的并没法给出严格的推理论证,只是从流程上来说 加密解密的过程 , 大概讨论 HTTPS 这里交互的流程.

7.2 HTTPS 的工作过程


这里我们想要进行安全传输 ,核心就是加密


加密其中一种最简单有效的办法 ,叫做 “对称加密”


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


图三 :

在这里插入图片描述


图四 :

在这里插入图片描述


图五 :

在这里插入图片描述

本文完

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

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

相关文章

体验攻略 | Persona VS. Profile,谁才是研究用户的最佳工具?

在与客户交流的过程中&#xff0c;我们发现&#xff0c;时常有客户将User Persona&#xff08;用户画像&#xff09;与User Profile&#xff08;用户档案&#xff09;搞混&#xff0c;分不清两者的区别&#xff0c;亦或是将它们当做同一种事物看待。 然而事实上&#xff0c;Per…

手把手教你使用vue创建第一个vis.js

先看一下实现效果吧 &#xff0c;如下图 &#xff1a; 为什么要写这篇文章呢&#xff1f;因为之前有浅浅的了解一下vis.js&#xff0c;后期开发中没有使用vis&#xff0c;所以太深奥的也不懂&#xff0c;但是当时是用js写的。这两天有人问我用vue怎么写&#xff0c;然后说看到…

【C++】list的使用 | 模拟实现

文章目录一、list的使用1. 构造函数2. 迭代器3. 增删查改4. 其他成员函数二、list的模拟实现1. 节点的创建2. push_back和push_front3. 普通迭代器4. const迭代器5. 增删查改(insert、erase、pop_back、pop_front)7. 构造和析构三、list模拟实现整体源码四、vector和list的区别…

4.类的基本概念

目录 4.1 类的概述 类是一种活动的数据结构 4.2 程序和类&#xff1a;一个快速实例 4.3 声明类 ​4.4 类成员 4.4.1 字段 1.显示和隐式字段初始化 2. 声明多个字段 4.4.2 方法 4.5 创建变量和类的实例 4.6 为数据分配内存 合并这两个步骤 4.7 实例成员 4.8 访问修饰…

【java】Java并发编程系列-基础知识(非常详细哦)

文章目录一、Java并发编程基础1.1 并发编程基本概念1.1.1原⼦性1.1.2 可⻅性1.1.3 有序性二、内存模型三、重排序四、内存屏障五、总结一、Java并发编程基础 主要讲解Java的并发编程的基础知识&#xff0c;包括原⼦性、可⻅性、有序性&#xff0c;以及内存模型JMM&#xff0c;…

【Python】正则表达式re库

文章目录函数re.match函数re.search函数re.findall函数re.compile函数re.sub函数re.split函数修饰符正则表达式模式正则表达式实例函数 re.match函数 re.match()函数用于尝试从字符串的 起始位置 匹配一个模式&#xff0c;匹配成功返回一个匹配对象&#xff0c;否则返回None。…

JDBC指南

目录 第一阶段 JDBC地位 JDBC应用流程 JDBC应用流程详解 基础应用&#xff1a;"验证用户的登录"功能 Statement缺陷引出PreparedStatement 优化-"基础应用&#xff1a;验证用户的登录"功能 练习&#xff1a;操作数据库数据的增删改 练习&#xff1a;…

重构·改善既有代码的设计.04之重构手法(下)完结

1. 前言 本文是代码重构系列的最后一篇啦。前面三篇《重构改善既有代码的设计.01之入门基础》、《重构改善既有代码的设计.02之代码的“坏味道”》、《重构改善既有代码的设计.03之重构手法&#xff08;上&#xff09;》介绍了基础入门&#xff0c;代码异味&#xff0c;还有部…

【Pytorch】 理解张量Tensor

本文参加新星计划人工智能(Pytorch)赛道&#xff1a;https://bbs.csdn.net/topics/613989052 这是目录张量Tensor是什么&#xff1f;张量的创建为什么要用张量Tensor呢&#xff1f;总结张量Tensor是什么&#xff1f; 在深度学习中&#xff0c;我们经常会遇到一个概念&#xff…

Golang每日一练(leetDay0007)

目录 19. 删除链表的倒数第 N 个结点 Remove-nth-node-from-end-of-list ★★ 20. 有效的括号 Valid Parentheses ★ 21. 合并两个有序链表 Mmerge-two-sorted-lists ★ &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每…

【基础算法】单链表的OJ练习(6) # 复制带随机指针的链表 #

文章目录&#x1f347;前言&#x1f34e;复制带随机指针的链表&#x1f351;写在最后&#x1f347;前言 本章的链表OJ练习&#xff0c;是最后的也是最难的。对于本题&#xff0c;我们不仅要学会解题的思路&#xff0c;还要能够通过这个思路正确的写出代码&#xff0c;也就是思路…

【前端】深入浅出缓存原理

缓存的基本原理 对于前端来说&#xff0c;缓存主要分为浏览器缓存&#xff08;比如 localStorage、sessionStorage、cookie等等&#xff09;以及http缓存&#xff0c;也是本文主要讲述的。 当然叫法也不一样&#xff0c;比如客户端缓存大概包括浏览器缓存和http缓存 所谓htt…

彻底理解Session、Cookie、Token,入门及实战

文章目录Session Cookie的使用Token的使用Session Cookie的使用 1. Session存储数据 HttpSession session request.getSession(); //Servlet底层通过的SESSIONID&#xff0c;获取Session对象。 session.setAttribute("loginTime",new Date()); out.println(&q…

ASEMI代理瑞萨TW9992AT-NA1-GE汽车芯片

编辑-Z TW9992AT-NA1-GE是一款低功耗NTSC/PAL模拟视频解码器&#xff0c;专为汽车应用而设计。它支持单端、差分和伪差分复合视频输入。集成了对电池短路和对地短路检测&#xff0c;先进的图像增强功能&#xff0c;如可编程的自动对比度调整&#xff08;ACA&#xff09;和MIPI…

5.springcloud微服务架构搭建 之 《springboot集成Hystrix》

1.springcloud微服务架构搭建 之 《springboot自动装配Redis》 2.springcloud微服务架构搭建 之 《springboot集成nacos注册中心》 3.springcloud微服务架构搭建 之 《springboot自动装配ribbon》 4.springcloud微服务架构搭建 之 《springboot集成openFeign》 目录 1.项目…

OSPF*MGRE实验:

OSPF*MGRE 一&#xff1a;实验拓扑 实验目的&#xff1a; IP地址配置如拓扑所示&#xff1b; 路由器配置&#xff1a; ospf-10 [r1]ospf 10 [r1-ospf-10]area 0 [r1-ospf-10-area-0.0.0.0]network 192.168.1.1 0.0.0.0 [r2]ospf 10 [r2-ospf-10]area 10 [r2-ospf-10-area-0.0.…

掌握CentOS7环境下的Docker使用(六)Link实现单向通信、brige网桥实现双向通信、特权模式、Volume数据共享

文章目录容器间基于Link实现单向通信Docker容器间利用brige网桥实现双向通信Docker容器的特权模式Volume数据共享建立nginx容器集群&#xff0c;共享宿主机的index.html文件容器间基于Link实现单向通信 比如想部署了jdk和tomcat的容器访问部署了mysql的容器&#xff0c;就是容…

Spring Cloud -- GateWay

为什么需要网关在微服务架构中&#xff0c;一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢&#xff1f;如果没有网关的存在&#xff0c;我们只能在客户端记录每个微服务的地址&#xff0c;然后分别去调用。这样的话会产生很多问题&#xff0c;例…

全连接神经网络

目录 1.全连接神经网络简介 2.MLP分类模型 2.1 数据准备与探索 2.2 搭建网络并可视化 2.3 使用未预处理的数据训练模型 2.4 使用预处理后的数据进行模型训练 3. MLP回归模型 3.1 数据准备 3.2 搭建回归预测网络 1.全连接神经网络简介 全连接神经网络(Multi-Layer Percep…

算法---完成任务的最少工作时间段

题目&#xff1a; 你被安排了 n 个任务。任务需要花费的时间用长度为 n 的整数数组 tasks 表示&#xff0c;第 i 个任务需要花费 tasks[i] 小时完成。一个 工作时间段 中&#xff0c;你可以 至多 连续工作 sessionTime 个小时&#xff0c;然后休息一会儿。 你需要按照如下条件…
最新文章