http\https协议

news2024/11/24 15:31:33

前言

小亭子正在努力的学习编程,接下来将开启javaEE的学习~~

分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~

同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~

目录

前言

一、 认识http协议

1.概念

1.1.http

1.1.2http协议的特点

2.抓包工具的介绍

二、http详解

1.http的协议格式

1.1.http的请求体格式

1.2.http的响应体格式 

2.http的请求方法(method)

3.请求报头

 Header

Host

 Content-Length

 Content-Type

 User-Agent (简称 UA)

 Referer

4.如何构造http请求

5.状态码

 常见的几个状态码:

三、https详解

对称加密

非对称加密

HTTPS 的工作过程

1.对称加密:

四、补充知识(解释一些名词,防止有小伙伴忘记了)

1.URL:唯一资源定位符。

2.什么是数字证书?


一、 认识http协议

1.概念

1.1.http

HTTP 协议一般指 HTTP(超文本传输协议),超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议,是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准。HTTP 是为 Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的,HTTP 是一个基于 TCP/IP yi 通信协议来传递数据的(HTML 文件、图片文件、查询结果等)。

【说白了就是规定了浏览器和服务器之间数据传输的规则】

1.1.2http协议的特点

(1)基于TCP协议: 面向连接,安全

(2)基于请求-响应模型的:一次请求对应一次响应

(3)HTTP协议是无状态协议:对于事物处理没有记忆能力。每次请求-响应都是独立的。

【  无状态指的是客户端发送HTTP请求给服务端之后,服务端根据请求响应数据,响应完后,不会记录任何信息。这种特性有优点也有缺点,

  * 缺点:多次请求间不能共享数据。【java中使用会话技术(Cookie,Session)来解决这个问题】

  * 优点:速度快】

2.抓包工具的介绍

推荐一个常用的抓包工具,链接已奉上

Fiddler | Web Debugging Proxy and Troubleshooting Solutions (telerik.com)https://www.telerik.com/fiddler安装过程一路next就行,安装完随便打开一个网页,再打开fiddler就会得到如下界面

 (这里我点开的是gitee)

依次点击1,2,3,4,就会

得到我们现在需要的这个结果:

当然,要是不想安装这个也可以直接用浏览器的开发者工具,选择网络,也可以抓包。

说明:

  • 左侧窗口显示了所有的 HTTP请求/响应, 可以选中某个请求查看详情.
  • 右侧上方显示了 HTTP 请求的报文内容. (切换到 Raw 标签页可以看到详细的数据格式)
  • 右侧下方显示了 HTTP 响应的报文内容. (切换到 Raw 标签页可以看到详细的数据格式)
  • 请求和响应的详细数据, 可以通过右下角的 View in Notepad 通过记事本打开.
  • 可以使用 ctrl + a 全选左侧的抓包结果, delete 键清除所有被选中的结果

二、http详解

1.http的协议格式

基本长这样,请求和响应有点区别 

1.1.http的请求体格式

一个HTTP 请求数据分为四个部分:

说明:

  • 首行: [方法] + [url] + [版本]

  • Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束。
  • Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度;

1.2.http的响应体格式 

说明:

  • 首行: [版本号] + [状态码] + [状态码解释]
  • Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分
  • 结束
  • Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有
  • 一个Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在body 

2.http的请求方法(method)

重点方法说明:

1.GET方法

语义:从服务器这里拿个啥东西

GET 是最常用的 HTTP 方法. 常用于获取服务器上的某个资源.在浏览器中直接输入 URL, 此时浏览器就会发送出一个 GET 请求.另外, HTML 中的 link, img, script 等标签, 也会触发 GET 请求.

GET 请求的特点

  • 首行的第一部分为 GET
  • URL query string 可以为空, 也可以不为空.
  • header 部分有若干个键值对结构.
  • body 部分为空.

 2. POST 方法

语义:往服务器里提交个啥东西

POST 方法也是一种常见的方法. 多用于提交用户输入的数据给服务器(例如登陆页面).

通过 HTML 中的 form 标签可以构造 POST 请求, 或者使用 JavaScript ajax 也可以构造 POST 请求。

 POST 请求的特点

  • 首行的第一部分为 POST
  • URL query string 一般为空 (也可以不为空)
  • header 部分有若干个键值对结构.
  • body 部分一般不为空. body 内的数据格式通过 header 中的 Content-Type 指定. body 的长度由
  • header 中的 Content-Length 指定

3.GET和POST的区别(重点面试题)

  • 二者本质上没有什么区别,但是,使用习惯上有一些区别:
  • GET习惯上用来表示获取一个数据,POST用来表示提交一个数据
  • GET一般没有body,需要携带数据就放到URL中,POST一般有body。
  • GET数据通常会设计成等幂的【等幂就是输入一个数据,每次输出的都是一样的结果】POST无要求。
  • GET可缓存(前提是等幂),POST则不能
  • GET请求可以被浏览器收藏,POST不能

3.请求报头

 

 Header

整体的格式也是 "键值对" 结构.,每个键值对占一行. 键和值之间使用分号分割.

(本文的例子没有只占一行是因为设置了记事本的自动换行)

Host

表示服务器主机的地址和端口.

【URL中已经写了当前要访问的服务器,但是,当前我们访问的服务器不是直接访问,而是通过代理来访问的,此时Host和URL就不一致了,所以这里区分一下:host是写的是访问的最终目标,URL访问的是当前目标】

 Content-Length

表示 body 中的数据长度,单位:字节

 Content-Type

表示请求的 body 中的数据格式.

数据的格式有几种不同的组织形式(写法)这里介绍常见的几种:

【详情请看这个↓https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_typesicon-default.png?t=N4N7https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HT TP/MIME_types

1.作为请求:

(1)JSON

【补充:大家一定会觉得这个和JS的对象非常像吧,其实,这个就是JS原创的,因为比较好用就脱离了JS逐渐演变成通用的,跨语言的,广泛使用的格式。】

(2)form表单

title=test&content=hello

2.作为响应:

响应中的 Content-Type 常见取值有以下几种:
text/html : body 数据格式是 HTML
text/css : body 数据格式是 CSS
application/javascript : body 数据格式是 JavaScript
application/json : body 数据格式是 JSON
 

 User-Agent (简称 UA)

主要描述了:浏览器是什么版本,系统是什么版本

 Referer

表示这个页面是从哪个页面跳转过来的. 形如

Cookie 中存储了一个字符串, 这个数据可能是客户端(网页)自行通过 JS 写入的, 也可能来自于服务器(服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据);

【举个栗子:这个Cookie就像是去医院看病会给的那个就诊卡,带着卡去一刷就知道患者得过什么病,吃过什么药,下一步该怎么治疗了】

关于Cookie的几个点:

1. Cookie 从哪里来?

是从服务器来的,当我们的浏览器访问服务器的时候,服务器就会在HTTP响应中,通过 Set-Cookie 字段,把Cookie的键值对返回给浏览器,浏览器收到这个数据,就会保存到浏览器的本地存储;

2. Cookie到哪里去?

会在下次请求的时候把Cookie再带给服务器;

3. Cookie有什么用?

是浏览器本地存储数据的机制;

【Cookie的本质是浏览器在本地的存储,是用户自定义数据的一种关键机制。】

举个栗子:

登陆教务系统,学生,老师,管理员,可以使用的功能是不一样的,通过Cookie就可以知道该用户的身份,然后服务器响应对应的客户端。


4.如何构造http请求

常用的方法有以下几种:

1.浏地址栏输入一个url。

2.hHTML中一些特殊的标签也会触发get的请求。

【link,script,img,a】

3.form表单可以触发get和post请求。【form只支持post和get】

对应关系如下:

post请求也是一样的对应关系

4.ajax【重要】

这是目前最主流的前后端异步交互的方式之一

格式如下图:【安装并引入jquery,然后用其中的ajax库就可以了】

虽然ajax很好用,但是也会出现跨域问题【就是现在运行的域名和请求的域名不一样】

5.用现成的工具来构造请求

比如:Posman

【链接已经准备好了

 

https://www.postman.com/icon-default.png?t=N4N7http:// https://www.postman.com/


5.状态码

状态码表示访问一个页面的结果. (是访问成功, 还是失败, 还是其他的一些情况...).

状态码分为以下几个大类:

 常见的几个状态码:

200 ok 表示的是请求成功。
400 Not Found 表示要访问的资源不存在。
403 Forbidden 示访问被拒绝。(没有访问权限。)
500 Internal Sever Error 表示服务器内部错误。
504 Gateway Timeout 服务器访问超时了。
302 Move temporarily 零时重定向
301 Moved Permanently 永久重定向
418 I'm a teapot  彩蛋(可以去百度嗖一下“黑洞”就能看到效果了。
【重定向就是访问旧的地址被自动引到新的地址上。类似于以前的呼叫转移】

 


三、https详解

大家试想一个场景,小明写了一张小纸条:“放学一起喝奶茶呀,我请客。”他从第一排传给最后一排的小美。结果下放学之后他到了奶茶店就懵逼了。因为他这一列的所有同学都来了。那这是为什么呢?因为他是在一张小纸条上写了中文大家都能看懂,并且大家都获得了这个信息,所以大家都到了。这样的传输方式就是明文传输。

那再试想一下, 如果黑客在用户登陆支付宝的时候获取到用户账户余额, 甚至获取到用户的支付密码.....
在互联网上, 明文传输是比较危险的事情!!!

HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况。所以就产生了https协议。

HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层.

既然要保证数据安全, 就需要进行 "加密".

网络传输中不再直接传输明文了, 而是加密之后的 "密文".

【举个例子,在我们看的电视剧当中,经常会出现女主角给男主角写了一封信,信上是一堆没有用的废话,但是突然男主就把那个信放到了火上烤了一下,就出现了三个大字“救救我!!!”。这个事件当中,那信上那一堆没用的废话就是明文,“救救我”就是密文,用火烤就是密钥。】

加密的方式有很多, 但是整体可以分成两大类: 对称加密 和 非对称加密

对称加密

 对称加密其实就是通过同一个 "密钥" , 把明文加密成密文, 并且也能把密文解密成明文。

非对称加密

非对称加密要用到两个密钥, 一个叫做 "公钥", 一个叫做 "私钥";

【公钥就是公开的,大家都能获取的,私钥就是私密的,一般人得不到的】

公钥和私钥是配对的. 最大的缺点就是运算速度非常慢,比对称加密要慢很多;

通过公钥对明文加密, 变成密文

通过私钥对密文解密, 变成明文

当然,公钥和私钥是相对的,也可以反过来操作。

HTTPS 的工作过程
 

1.对称加密:

 引入对称加密之后, 即使数据被截获, 由于黑客不知道密钥是啥, 因此就无法进行解密。

真实服务器对应的客户端不只是一个,可以有很多个而且不同的客户端使用的密钥是不同的,所以黑客可以把自己也伪装成一个客户端,这样就可以拿到密钥了。

那么该如何保证密钥的安全呢?可以对密钥进行加密。

2.就引入了非对称加密。

3.but  如果黑客把自己伪装成【 客户端和服务器 】做一个中间人,一边收取客户端的信息并返回响应。一边向服务器发送请求并接收响应,这样他就可以获得key。【这就是中间人攻击】

4. 那么,该如何破解中间人工攻击呢?关键就在于让客户端能够信任公钥,也就是让客户端能够确认公钥是服务器发出的,并且没有被黑客伪造篡改。这就引入了 证书 。

 当客户端获取到这个证书之后, 会对证书进行校验(防止证书是伪造的):

判定证书的有效期是否过期

判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构).

验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash (称为数据摘要), 设为 hash1. 然后用同样的签名算法计算整个证书的 hash , 设为 hash2. 对比 hash1 hash2 是否相等,如果相等, 则说明证书是没有被篡改过的。

【那为什么我们说黑客就不能篡改了呢?因为如果黑客进行篡改那么证书的属性就会发生改变。黑客想篡改就需要把证书中的服务器的公钥变成自己的公钥。那么在重新计算签名时,计算出来的hash2就和hash1不一样。黑客还需要把签名进行重新加密。这就需要知道权威机构的私要,但是这个黑客显然也是不知道的。】

总结一下整个过程:

步骤1:客户端向服务器发送 HTTPS 请求

当客户端需要从服务器获取数据时,它会向服务器发送一个 HTTPS 请求。这个请求包括请求的 URL、HTTP 请求头和请求体;

步骤2:服务器将公钥证书发送给客户端

当服务器接收到 HTTPS 请求后,它会将公钥证书发送给客户端,公钥证书中包含了服务器的公钥、服务器的域名、证书颁发机构、证书有效期等信息,客户端接收到证书后,会从中提取出服务器的公钥;

步骤3:客户端验证服务器的证书

客户端接收到服务器的证书后,会对其进行验证,以确保该证书是由可信任的证书颁发机构颁发的,并且证书中的域名和服务器的实际域名一致,如果证书验证失败,客户端会中断连接。如果验证通过,客户端会生成一个用于会话的对称密钥;

步骤4:客户端生成一个用于会话的对称密钥

客户端生成一个用于会话的对称密钥。对称密钥是一种加密方式,它使用相同的密钥进行加密和解密。这个密钥只存在于客户端和服务器之间,因此被称为“对称”。

步骤5:客户端使用服务器的公钥对对称密钥进行加密,并将加密后的密钥发送给服务器客户端使用服务器的公钥对对称密钥进行加密,并将加密后的密钥发送给服务器。在这个过程中,客户端和服务器都知道对称密钥,但是只有客户端知道对称密钥的值。

步骤6:服务器使用私钥对客户端发送的加密密钥进行解密,得到对称密钥服务器使用私钥对客户端发送的加密密钥进行解密,得到对称密钥。由于私钥只在服务器端保存,因此只有服务器才能解密客户端发送的加密密钥,并得到对称密钥的值;

步骤7:服务器和客户端使用对称密钥进行加密和解密数据传输服务器和客户端使用对称密钥进行加密和解密数据传输。这个对称密钥只存在于客户端和服务器之间,因此对数据的加密和解密只有客户端和服务器可以进行;


四、补充知识(解释一些名词,防止有小伙伴忘记了)

1.URL:唯一资源定位符。

2.什么是数字证书?

 这个证书就好比人的身份证, 作为这个网站的身份标识. 搭建一个 HTTPS 网站要在CA机构先申请一个证书. (类似于去公安局办个身份证)

下图是B站的一个证书,

想搞一个服务器,就必须向权威机构申请一个证书

 这个 证书 可以理解成是一个结构化的字符串, 里面包含了以下信息:

  • 证书发布机构
  • 证书有效期
  • 公钥
  • 证书所有者
  • 签名。。。。。。
  • 数字证书_百度百科 (baidu.com)

查看浏览器的受信任证书发布机构
Chrome 浏览器, 点击右上角的 选择 "设置", 搜索 "证书管理" , 即可看到以下界面.

 感兴趣的小伙伴可以自行探索


以上就是本文要分享的内容了,关注小亭子,一起卷起来~~~

 

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

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

相关文章

ChatGPT APP Plus升级全记录:购买礼品卡、兑换和处理失败

大家好,我是可夫小子,《小白玩转ChatGPT》专栏作者,关注AIGC、读书和自媒体。 在上一篇《ChatGPT APP来了,支持语音输入,还可以直接订阅Plus账号》文章中,我介绍了ChatGPT App下载安装教程。本文主要介绍怎…

YOLO中的值得借鉴的思想

关键理论的理解,后面会补充结构等。 1.YOLO1中将图像划分为7*7个网格,每个网格都预测网格中的的类别(是什么物体),以及预测到的物体所对应的框(四个位置量,一个置信度),所…

一、尚医通预约下单

文章目录 一、预约下单1、需求分析1.1订单表结构1.2下单分析 2、搭建service-order模块2.1 搭建service-order模块2.2 修改配置2.3 启动类2.4配置网关 3、添加订单基础类3.1 添加model3.2 添加Mapper3.3 添加service接口及实现类3.4 添加controller 4、封装Feign调用获取就诊人…

【Redis】聊一下Redis事务以及watch机制

我们知道熟悉MySQL的同学,一定了解ACID属性。ACID分别对应四种属性,但是Redis的事务和ACID属性有什么不一样的地方嘛,我们来深入探讨下。 Redis事务和MySQL事务的区别 ACID的本质是保证了事务执行前后对结果的保证,以及数据状态…

二、数据结构2:双链表 模板题+算法模板(双链表)

文章目录 算法模板双链表题目模板 模板题双链表原题链接题目思路题解 算法模板 双链表题目模板 // e[]表示节点的值,l[]表示节点的左指针,r[]表示节点的右指针,idx表示当前用到了哪个节点 int e[N], l[N], r[N], idx;// 初始化 void init()…

Android进阶 View事件体系(一):概要介绍和实现View的滑动

Android进阶 View事件体系(一):概要介绍和实现View的滑动 内容概要 本篇文章为总结View事件体系的第一篇文章,将介绍的内容主要有: 什么是View和ViewGroupAndroid中View的坐标轴手势检测和速度检测如何实现View的滑动…

【ZYNQ】ZYNQ7000 UART 控制器及驱动应用示例

UART 简介 我们在使用 PS 的时候,通常会添加 UART 控制器,用于打印信息和调试代码。除此之外,PS 在和外 部设备通信时,也会经常使用串口进行通信。 UART 控制器 UART 控制器是一个全双工异步收发控制器,ZYNQ 内部包…

ssm实现发送邮箱功能

参考:ssm整合JavaMail发送邮件_ssm整合mimemessage_ds_surk的博客-CSDN博客 我在这位前辈写的博客的基础上进行讲解完善,避免踩坑。 我的jdk版本:1.8.0_333 1、引入依赖 相信很多朋友都卡在这里: 1、没有JavaMailSenderImpl类 2、…

数字逻辑 期末

概述 教材:《电子技术基础(数字部分)》 第五版 7400系列是TTL型芯片,商用型 数制 十进制->二进制 除2取余法&乘2取整法(注意精度,但计科简单不考) 十六进制->二进制 一位变四位 八…

Linux下串口编程

Linux下串口编程 Linux下的串口编程是通过串口设备文件和串口通信的系统调用函数来实现的。Linux下的串口设备文件通常为/dev/ttyS或/dev/ttyUSB(*表示数字),这些设备文件代表了对应的串口硬件设备。 在进行串口编程之前,需要先打开并初始化串口设备,其中包括设置波特率…

Linux 在桌面添加快捷启动图标(可添加至收藏夹)

0 背景 在 Ubuntu 系统下启动程序一般在 Terminal 通过输入指令启动,如 ./cfw。对于常用的程序,为了方便,创建桌面快捷图标 .desktop。为了让图标能够添加在收藏栏中,将 .desktop 融入桌面环境。 1 创建 .desktop 文件 参考&…

dvwa靶场通关(一)

第一关:Brute force low 账号是admin,密码随便输入 用burp suite抓包 爆破得出密码为password 登录成功 Medium 中级跟low级别基本一致,分析源代码我们发现medium采用了符号转义,一定程度上防止了sql注入,采用暴力破…

如何成为一名黑客?小白必学的12个基本步骤

黑客攻防是一个极具魅力的技术领域,但成为一名黑客毫无疑问也并不容易。你必须拥有对新技术的好奇心和积极的学习态度,具备很深的计算机系统、编程语言和操作系统知识,并乐意不断地去学习和进步。 如果你想成为一名优秀的黑客,下…

大项目参考地址​编辑 大项目接口实现

目录 大项目参考地址​编辑 口语考试 纸笔口语考试通常会安排在笔试前一周至笔试后一周的任意一天,机考口语考试通常会安排在笔试当天或者与笔试日期尽可能相邻的日期。根据考务安排的需要,在特殊情况下,口试日期有可能超出此区间&#xff0…

Java——《面试题——多线程并发篇》

前文 java——《面试题——基础篇》 Java——《面试题——JVM篇》 目录 前文 1、说说Java中实现多线程有几种方法 2、如何停止一个正在运行的线程 3、notify()和notifyAll()有什么区别? 4、sleep()和wait() 有什么区别? 5、volatile 是什么?可…

nodejs+vue网络课程在线考试系统an7ib

在线考试系统的设计与实现主要实现角色有管理员和用户,管理员在后台管理学生模块、用户表模块、token表模块、考试资讯模块、考试记录表模块、试题表模块、试卷表模块、配置文件模块、在线答疑模块 采用了Windows10操作系统平台,使用vue前端模板node作为后台监控&am…

k8s补充+helm(待续)

目录 master高可用架构master节点——整个集群的控制中枢node节点——工作节点搭建kubeadm搭建二进制搭建 探针检测方式探针检查参数配置执行顺序为什么有了livenessProbe和readnessProbe还要有StartupProbe(1.16) 零宕机发布pod退出流程preStop 无状态服…

上网速度太慢?这样设置可以提升60%的上网速度!

虽然现在光纤上网是最好的上网方式,但是对于一般人的选择还是宽带上网,网速永远都是一个值得讨论的话题。花了那么多的钱,却得到的是低品质的网速服务,因此越来越多的人想方设法在现有条件上提高网速。网上的那些方法基本人人都会…

手把手教你用Python编写配置脚本引擎(福利篇)

版权声明:原创不易,本文禁止抄袭、转载需附上链接,侵权必究! 目录 一、配置信息写入二、读取配置信息三、修改配置信息四、配置引擎总结五、作者Info 一、配置信息写入 配置信息初始化 定义配置引擎类和初始化方法,其…

day18文件上传下载与三层架构思想

servlet文件上传 注意事项:在写了响应后,若后面还需要执行代码,需要添加return; apach的servlet3.0提供了文件上传的功能. **在客户端中的jsp如何上传文件:**使用form标签 使用input标签type的file属性 form表单中的的enctype必须加:使用二进制的方式进行传输,否则不能进行…