【网络原理之三】应用层协议HTTP和HTTPS

news2025/1/9 2:11:43

  • HTTP
    • 什么是HTTP
    • 工作过程
    • 协议格式
    • 协议内容
      • HTTP请求
        • Method
        • URL
          • URL的encode和decode
        • Version
        • 请求报头
        • 请求正文
      • HTTP响应
        • 状态码
        • 响应报头
  • HTTPS
    • HTTPS执行过程
    • 加密
      • 对称加密
      • 非对称加密
    • 证书

HTTP

在这里插入图片描述

什么是HTTP

HTTP:超文本传输协议。是一种应用非常广泛的应该层协议。

所谓 “超文本” 的含义, 就是传输的内容不仅仅是文本(比如 html, css 这个就是文本), 还可以是一些其他的资源, 比如图片,视频, 音频等二进制的数据。

完整应用是由前端+后端构成的,而前、后端之间的通讯是要依靠 HTTP来完成的。这就像消费者在网上买东西一样,商家和买件之间,需要一个快递公司,而 HTTP 就是这个快递公司,其中的请求方法GET/POST 相当于不同类型的快递类型(标准快递、加急快递)。

工作过程

当我们在浏览器中输入一个 “网址”, 此时浏览器就会给对应的服务器发送一个 HTTP 请求(request)。对方服务器收到这个请求之后, 经过计算处理, 就会返回一个 HTTP 响应(response)。
在这里插入图片描述

通过 F12 打开 chrome 的开发者工具, 切换到 Network 标签页. 然后刷新页面即可看到如下图效果. 每一条记录都是一次 HTTP 请求/响应。

协议格式

HTTP 是一个文本格式的协议. 可以通过 Chrome 开发者工具或者 Fiddler 抓包, 分析 HTTP 请求/响应的细节.
左侧窗口显示了所有的 HTTP请求/响应, 可以选中某个请求查看详情.
右侧上方显示了 HTTP 请求的报文内容. (切换到 Raw 标签页可以看到详细的数据格式)
右侧下方显示了 HTTP 响应的报文内容. (切换到 Raw 标签页可以看到详细的数据格式)
在这里插入图片描述

协议内容

在这里插入图片描述

HTTP请求

对照上面的协议内容来分析http请求。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VOhpHQdQ-1688635622371)(C:\Users\佳伟\AppData\Roaming\Typora\typora-user-images\image-20230704212212499.png)]

Method

在这里插入图片描述

GET方法:GET 是最常用的 HTTP 方法. 常用于获取服务器上的某个资源。在浏览器中直接输入 URL, 此时浏览器就会发送出一个 GET 请求.
POST方法:POST 方法也是一种常见的方法. 多用于提交用户输入的数据给服务器(例如登陆页面)。

GET和POST的区别:
①GET 请求的数据是通过 URL 传递的,即将数据拼接到 URL 的后面,以 ? 分隔,参数之间以 &符号分隔。因此, GET 请求对于传输的数据大小是有限制的,通常在几千个字符之内。而 POST 请求则是将数据放在 HTTP请求的请求体中进行传输,没有大小限制,可传输较大的数据量。
②GET 请求传输的数据是明文的,因此数据容易被拦截和篡改。而 POST请求传输的数据放在请求体中,所以相对隐私一些。
③GET 请求是可以被缓存的,当浏览器再次请求同一个 URL时,可以从缓存中直接获取数据,加快访问速度。而 POST 请求是不可缓存的,因为每次提交数据都可能导致服务器状态的改变。
④GET请求的数据会被浏览器保存在历史记录和服务器日志中,容易被恶意程序利用。而 POST 请求不会被保存在历史记录和服务器日志中,相对更加安全。

URL

平时我们俗称的 “网址” 其实就是说的 URL (Uniform Resource Locator 统一资源定位符). 互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
在这里插入图片描述

http : 协议方案名. 常见的有 http 和 https, 也有其他的类型. (例如访问 mysql 时用的jdbc:mysql )。

user:pass : 登陆信息. 现在的网站进行身份认证一般不再通过 URL 进行了. 一般都会省略。
www.example.jp:服务器地址. 此处是一个 “域名”, 域名会通过 DNS 系统解析成一个具体的 IP 地址(通过 ping 命令可以看到IP地址)。
80:端口号。 当端口号省略的时候, 浏览器会根据协议类型自动决定使用哪个端口. 例如 http 协议默认使用 80 端口, https 协议默认使用 443 端口.
dir/index.htm:带层次的文件路径。
:参数的开始符号
uid=1:查询字符串(query string). 本质是一个键值对结构. 键值对之间使用 & 分隔. 键和值之间使用 = 分隔。这部分也被称为query string , 其中的 key 和 value 的取值和个数 完全都是程序猿自己约定的. 通过这样的方式来自定制传输我们需要的信息给服务器。
ch1:片段标识符,主要用于页面的跳转,快速定位标签。

URL的encode和decode

像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现。比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.
在这里插入图片描述

Version

HTTP的版本号用的比较广泛的是HTTP1.1。

请求报头

key-value的键值对。每个键值对占一行. 键和值之间使用分号分割。
常见的报头:
Host:表示服务器主机的地址和端口.
Content-Length:表示 body 中的数据长度.
Content-Type:表示请求的 body 中的数据格式.
application/x-www-form-urlencoded: form 表单提交的数据格式。
application/json: 数据为 json 格式
User-Agent (UA):表示浏览器/操作系统的属性
Referer:表示这个页面是从哪个页面跳转过来的
Cookie :Cookie是一种客户端保存数据的机制,典型的应用场景是保存用户的登录信息。
在这里插入图片描述

删除了本地的cookie之后,再访问网站时会判断为未登录状态。

Session:识别是哪一个用户访问了服务器。
session工作在服务器端,服务器创建一个session对象,这个session对象可以用来保存当前会话相关的数据
服务器维护着一个Map用来保存session,并生成一个sessionld做为Key,session做为value。
在这里插入图片描述

每一个session本身也是一个Map,可以自定义Key与value服务器通过响应头中的set-cookie把sessionld返回给客户端,客户端每次请求时把sessionld发送到服务器,服务器就可以区分是哪个客户端发来的请求,并从服务器维护的Map获取到针对当前会话保存的数据。

工作流程: 当用户登陆的时候,服务器在 Session 中新增一个新记录,并把sessionld/token 返回给客户端(例如通过HTTP 响应中的 Set-Cookie 字段返回)。客户端后续再给服务器发送请求的时候,需要在请求中带上sessionld/ token.(例如过 HTTP 请求中的 Cookie字段带上)-服务器收到请求之后,根据请求中的 sessionld/token在Session信息中获取到对应的用户信息再进行后续操作。

请求正文

程序员传参相关的。

HTTP响应

状态码

表示一个页面的访问结果是成功还是失败还是其他情况。
200: 这是一个最常见的状态码, 表示访问成功。
404 Not Found:没有找到资源。浏览器输入一个 URL, 目的就是为了访问对方服务器上的一个资源. 如果这个 URL 标识的资源不存在, 那么就会出现 404。
403 Forbidden:表示访问被拒绝. 有的页面通常需要用户具有一定的权限才能访问(登陆后才能访问). 如果用户没有登陆直接访问, 就容易见到 403。
500 Internal Server Error:服务器出现内部错误.一般是服务器的代码执行过程中遇到了一些特殊情况(服务器异常崩溃)会产生这个状态码。
504 Gateway Timeout:当服务器负载比较大的时候, 服务器处理单条请求的时候消耗的时间就会很长, 就可能会导致出现超时的情况。
302 Move temporarily:临时重定向.临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI。
301 Moved Permanently:永久重定向. 当浏览器收到这种响应时, 后续的请求都会被自动改成新的地址. 301 也是通过 Location 字段来表示要重定向到的新地址。

响应报头

响应报头的基本格式和请求报头的格式基本一致. 类似于 Content-Type , Content-Length 等属性的含义也和请求中的含义一致。
响应中的 Content-Type 常见取值有以下几种:
1.text/html : body 数据格式是 HTML
2.text/css : body 数据格式是 CSS
3.application/javascript : body 数据格式是 JavaScript
4.application/json : body 数据格式是 JSON

HTTPS

HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况。HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层。

HTTPS执行过程

客户端使用 HTTPS 访问服务器端。
服务器端返回数字证书,以及使用非对称加密,生成一个公钥给客户端(私钥服务器端自己保留)。
客户端验证数字证书是否有效,如果无效,终止访问,如果有效:
①使用对称加密生成一个共享秘钥;
②使用对称加密的共享秘钥加密数据;
③使用非对称加密的公钥加密(对称加密生成的)共享秘钥;
④发送加密后的秘钥和数据给服务器端。
服务器端使用私钥解密出客户端(使用对称加密生成的)共享秘钥,再使用共享秘钥解密出数据的具体内容。之后客户端和服务器端就使用共享秘钥加密的内容进行交互了。
由于对称加密的效率比非对称加密高很多, 因此只是在开始阶段协商密钥的时候使用非对称加密, 后续的传输仍然使用对称加密
在这里插入图片描述

加密

加密就是把 明文 (要传输的信息)进行一系列变换, 生成 密文 。网络传输中不再直接传输明文了, 而是加密之后的 “密文”。
解密就是把 密文 再进行一系列变换, 还原成 明文
在这个加密和解密的过程中, 往往需要一个或者多个中间的数据, 辅助进行这个过程, 这样的数据称为 密钥
加密的方式有很多, 但是整体可以分成两大类: 对称加密非对称加密

对称加密

对称加密其实就是通过同一个 “密钥” , 把明文加密成密文, 并且也能把密文解密成明文。发送方和接收方必须共享密钥才能进行通信,这使得对称加密算法在保密性和性能方面非常高效。

但是服务器同一时刻其实是给很多客户端提供服务的。这么多客户端, 每个人用的秘钥都必须是不同的(如果是相同那密钥就太容易扩散了, 黑客就也能拿到了)。因此服务器就需要维护每个客户****端和每个密钥之间的关联关系, 这也是个很麻烦的事情。比较理想的做法, 就是能在客户端和服务器建立连接的时候, 双方协商确定这次的密钥是啥。但是如果直接把密钥明文传输, 那么黑客也就能获得密钥了~~ 此时后续的加密操作就形同虚设了。因此密钥的传输也必须加密传输! 但是要想对密钥进行对称加密, 就仍然需要先协商确定一个 “密钥的密钥”. 这就成了 “先有鸡还是先有蛋” 的问题了,此时密钥的传输再用对称加密就行不通了,就需要引入非对称加密.

非对称加密

非对称加密要用到两个密钥, 一个叫做 “公钥”, 一个叫做 “私钥”. 发送方使用接收方的公钥进行加密,而接收方使用其私钥进行解密。公钥和私钥是配对的. 最大的缺点就是运算速度非常慢,比对称加密要慢很多。

那么接下来问题又来了:客户端如何获取到公钥?客户端如何确定这个公钥不是黑客伪造的?

证书

在客户端和服务器刚一建立连接的时候, 服务器给客户端返回一个 证书。这个证书包含了刚才的公钥, 也包含了网站的身份信息。
这个证书就好比人的身份证, 作为这个网站的身份标识. 搭建一个 HTTPS 网站要在CA机构先申请一个证书. (类似于去公安局办个身份证)。
在这里插入图片描述


继续加油~
在这里插入图片描述

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

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

相关文章

Mybatis应用(3)——mybatis框架使用 mybatis项目应用初步 mybatis使用报错集锦

目录 引出mybatis框架使用1.导包:mybatis包分页的包pom.xml文件【war包】1.导包:mybatis包分页的包pom.xml文件【jar包】2.resources下配置mybatis-config.xml文件,以及log4j.properties文件3.在resources下建文件4.在UserMapper中写SQL myba…

若依v3.2问题解决:菜单路由不匹配 / 跳转路由页面空白

问题1解决方法 问题2解决方法 问题1 菜单路由不匹配 ,在菜单管理中匹配代码中的相应组件,可是在页面上总是报匹配错误,下面是报错情况和相关数据库 解决方法 因为店铺管理是一个目录,而店铺详情和店铺列表是菜单,路…

UC伯克利LLM排行榜(Chatbot Arena Leaderboard)再更新!GPT-4稳居第一,Vicuna-33B登顶开源模型第一

UC伯克利LLM排行榜(Chatbot Arena Leaderboard)再更新!GPT-4稳居第一,Vicuna-33B登顶开源模型第一 文章目录 1. LMSYS ORG更新「LLM排位赛」2. 全新评价机制:MT-Bench2.1 为什么选择 MT-Bench?2.2 用LLM评…

Vue 常用指令 v-bind 绑定动态值

v-bind 用于动态绑定一个或多个属性值,或者向另一个组件传递props值(这个后面再介绍),应用场景:图片地址src、超链接href、动态绑定一些类、样式等等 绑定超链接 v-bind作用在属性上面绑定动态值。 v-bind 指令后接收一个参数,以冒号分割。v…

MySQL 第二天作业 操作表和用户权限

一、1.创建数据库 Market,在 Market 中创建数据表customers,customers表结构如表4.6所示,按要求进行操作。 (1)创建数据库Market。 create database Market;(2)创建数据表customers,在c_num字段上添加主键…

ModaHub魔搭社区:如何在 Jupyter Notebook 用一行代码启动 Milvus Lite?

目录 轻量版 Milvus 能做什么? 如何在 Jupyter Notebook 中使用向量数据库? 随着各种大语言模型(LLM)的涌现和 AI 技术变得越来越普遍,大家对于向量数据库的需求也变得越来越多。作为大模型的记忆体,向量…

【新星计划Linux】——常用命令(1)

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 目录 前言 一.常用命令 1.Linux的基本原则: 用户接口: 2.命令形…

多肽中间体:23927-13-1,Cyclo(-D-Ala-D-Ala),3,6-二甲基-2,5-哌嗪二酮,的解析说明

Cyclo(-D-Ala-D-Ala),3,6-二甲基-2,5-哌嗪二酮,(3R,6R)-二甲基-哌嗪-2,5-二酮,(3R,6R)-3,6-二甲基哌嗪-2,5-二酮产品结构式: 产品规格: 1.CAS号:23927-13-1 2.分子式:C6H10N2O2 3.分子量&#x…

xNIDS-解释基于深度学习的网络入侵检测系统实现自动入侵响应

文章目录 AbsIntroMotivation and ChallengesExplaining Detection Results of DL-NIDS目标近似历史输入围绕历史记录输入进行采样捕捉特征之间的依赖关系模型开发 Generating Defense Rules防御规则范围Defense Rule Scope安全性约束 Security Constraint统一防御规则 Unified…

仅个人记录 CMX复现

文章解析(214条消息) CMX: Cross-Modal Fusion for RGB-X SemanticSegmentation with Transformers_cmx: cross-modal fusion for rgb-x semantic segment_翰墨大人的博客-CSDN博客 代码 GitHub - huaaaliu/RGBX_Semantic_Segmentation 一、 环境配置 conda create -n rgbx…

暑假第三天打卡

Java: (1)main()方法格式固定,表示程序入口 public static void main(String[] args) (2)java程序严格区分大小写 (3)System.out.println():换行 System.out.print():不换行 &…

【洛谷】P2700 逐个击破

思路&#xff1a; 先上一份ACode:&#xff08;具体解释思路在下面&#xff09; #include<bits/stdc.h> using namespace std; #define int long long const int N1e510,M2*N; int n,k,x,fa[N],sum; struct E {int u,v,w; } e[M]; int head[N],cnt; bool vis[N];bool cm…

爬虫入门04——requests库中的User-Agent请求头

import requests#定义请求的url url https://www.baidu.com/ #https://site.ip138.com/www.xicidaili.com/#发起get请求 res requests.get(url url)#获取响应结果#响应对象 print(res)#获取响应状态码 print(res.status_code)#获取响应数据 print(res.text) #返回的是字符…

SignalPlus X 北大汇丰商学院 X SHEF 公开课

&#x1f4e2; SignalPlus X 北大汇丰商学院 X SHEF &#x1f4a0; 数字金融和 AI 量化系列课程第二课 &#x1f4a0; 课程主题&#xff1a;机器学习在金融市场的应用 &#x1f4a0; 时间&#xff1a;2023 年 7 月 5 日 星期三 下午 19:00-21:00 &#x1f4a0; 授课方式&#…

【JUC进阶】10. 使用JMH进行性能测试

目录 1、前言 2、传统的性能测试 2、什么是JMH 3、Hello JMH 3.1、Maven相关依赖 3.2、编写简单示例 4、基本属性配置 4.1、BenchmarkMode 4.2、Benchmark 4.3、OptionsBuilder & Options 4.4、迭代Iteration 4.5、预热&#xff08;Warmup&#xff09; 4.6、状…

一图掌控污水厂运营——远眺污水厂数字孪生平台「捷码精品应用展」

随着我国城市化率的提升与环保意识的逐渐提升&#xff0c;对于污水处理的意识与需求也越来越强&#xff0c;需要处理的污水日益增多&#xff0c;污水厂承担的压力明显变大。 传统污水厂通常通过人工巡检的方式&#xff0c;进行设备和厂区检查和监测&#xff0c;这种方法效率低下…

MODBUSTCP和MODBUSRTU数据帧对比

工具介绍 ModBus Poll 在TCP中模拟客户端&#xff0c;在RTU中模拟主机&#xff1b;&#xff08;请求数据方&#xff09; ModBus Slave 在TCP中模拟服务器&#xff0c;在RTU中模拟从机&#xff1b;&#xff08;响应数据方&#xff09; 数据帧简介 ModBus是一种通信协议&#…

Spring整合Elasticsearch(2)

原生查询 可以查询的范围更精确,当ElasticsearchRepository提供的基本方法无法满足我们所需要的查询可以使用原生的方式查询 Test//原生查询public void naticeQuery(){//创建原生查询构建器对象NativeSearchQueryBuilder queryBuilder new NativeSearchQueryBuilder();//过滤…

【前端】ant-design-pro初体验

什么是Ant Design Pro Ant Design Pro 是一个企业级中后台前端/设计解决方案&#xff0c;它秉承 Ant Design 的设计价值观&#xff0c;致力于在设计规范和基础组件的基础上&#xff0c;继续向上构建&#xff0c;提炼出典型模板/业务组件/配套设计资源&#xff0c;进一步提高企…

第164天:应急响应-挖矿脚本检测指南威胁情报样本定性文件清除入口修复

知识点 #知识点 -网页篡改与后门攻击防范应对指南 主要需了解&#xff1a;异常特征&#xff0c;处置流程&#xff0c;分析报告等 主要需了解&#xff1a;日志存储&#xff0c;Webshell检测&#xff0c;分析思路等 掌握&#xff1a; 中间件日志存储&#xff0c;日志格式内容介绍…