应用层_HTTPHTTPS

在应用层中,协议一般是程序员定制的,但现在已经有了许多非常好用的协议,我们可以直接参考使用。其中http和https便是其中最常用的协议之一。

一.HTTP

超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。我们学习http协议,就要先了解这个协议请求与响应的格式。

1.1 URL

URL是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址,俗称网址。
image.png
我们访问互联网上的资源,即访问对应服务器上的一些资源。首先就必须要知道该服务器的ip地址和端口号,以及该服务上资源的具体位置。这些信息被组织在一起形成URL,于是我们就可以通过URL来访问目标服务器上的唯一资源。
URL通常是有协议名,域名,端口号,文件路径,查询参数构成。

  • 协议名:通常是http/https,但由于http不安全,现在基本都是https
  • 域名:由域名解析系统最终会转换为ip地址
  • 端口号:http默认端口号为80,https为443,由浏览器自动指定
  • 文件路径:以/开始,这个/代表web根目录,以当前服务器的工作路径为基础
  • 查询参数:查询参数与文件路径通过?分割,参数之间通过&分割。kv结构

urlencode与urldecode:
由于url中有一些特殊字符,比如:& 汉字等,这些字符如果出现在查询参数中,浏览器会自动对其进行转换。反之,服务器会对url的转移字符进行解码获得实际字符。
* 将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY 格式

1.2 http请求

image.png

  • 请求行:由三部分组成,以空格为分割,以\r\n为结尾,以区分请求行与请求报头
  • 请求报头:由若干行kv结构组成
  • 空行:用于区分http请求报头与有效载荷,以行为单位读取,读到空行表示报头读取结束
  • 有效载荷:防止用户提交的参数,可以没有
1.2.1 请求方法

image.png

  • POST: 通过正文部分提交参数等。html中,浏览器会根据表单(form)中的属性,封装不同请求方法的请求报文,将用户信息提交到服务端。
  • GET:获取静态网页和通过URL的方式提交参数。
  • GET方法提交参数不私密,POST提交参数私密一些,所有的登录注册支付都要使用POST方法提参。它们两个不是安全的,可以使用fiddler进行抓取浏览器请求
1.3 http响应

image.png

  • 状态行:由三部分组成,以空格为分割,以\r\n为结尾,以区分状态行与响应报头
  • 响应报头:由若干行kv结构组成
  • 空行:用于区分http响应报头与有效载荷,以行为单位读取,读到空行表示报头读取结束
  • 有效载荷:携带用户请求的资源
1.3.1 http状态码

image.png

  • 3XX:永久性重定向-更改浏览器的本地书签,临时重定向-不更改浏览器的地址信息
    • 302:临时重定向
    • 307:临时重定向,使用get提交
    • 301:永久重定向
  • 4XX:404-Not Found ,403-forbidden
  • 5XX:504-Bad Gateway

应用场景:

  • 当你进入一个网页时,会自动跳转到另一个网页,这就是临时重定向

1.3.2 请求报头与响应报头属性:
  • Host:x.x.x.x:port 主机ip+port
  • Connection: keep-alive 长链接
    • 在http/1.0中一个网页中可能包含许多不同资源,每个资源就会发起一次tcp连接,但这样效率太低,因此在http/1.1中只需要建立一次tcp连接,就可以将所有http请求发送到服务端。
  • user-agent:xxxxx 浏览器字段
  • Content-Length: xxx 有效载荷长度,防止粘包问题
  • Content-Type:xxx 有效载荷中的资源类型,如何解释
    • 在百度中搜索Content-Type对照表,可以查看各种资源的类型
  • Location:xxxx 配合重定向使用
  • referer:当前网页是从哪个网页跳转的
  • Set-Cookie:xxxx
1.4 http的会话保持功能

http是无状态的!它只用来进行超文本传输。但是用户需要保持以前的状态,便于提高用户体验,所以http就要将用户是否在线要持续的记录下来,这就是http的会话保持。http的会话保持是通过cookie和session实现的。
image.png
客户端根据服务端发来的Set_Cookie信息,将cookie保存到本地文件/内存中。但这种方式有安全问题,当电脑被植入了木马病毒时,此时本地的cookie将会被黑客拿到,此时你的账号就会被盗用。现在用的是在服务端形成session对象(内存/文件),给客户端返回一个session id,用户再次访问服务端,将session_id提交到服务端,此时服务端根据session_id+ip进行用户身份核验。这个session_id是用特定算法形成的唯一值。
image.png
此时cookie信息保存在服务端,而不是客户端,一定程度上保证了用户信息的安全。如果黑客盗取了cookie的信息session id ,但是两次登录的ip地址不一样,就会识别到异常登录,释放session对象。

二.HTTPS

HTTPS (全称:Hypertext Transfer Protocol Secure),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面 。

  • HTTP不管是用GET还是POST方法,它们都是不安全的,因为它们传输的数据是明文传送的。而HTTPS是基于HTTP在应用层添加一层SSL/TLS软件层,这层是用来HTTP握手协商,加密解密的。

image.png

2.1 加密&解密
  • 加密:将明文数据经过变化,生成密文
  • 解密:将密文数据经过变化,还原为明文
  • 密钥:辅助进行加密解密的数据
2.2 对称加密和非对称加密

2.2.1 对称加密

通过一个密钥加密和解密,这样的加密方式就是对称加密算法。

  • 特点:速度快,但安全性较低
2.2.2 非对称加密

非对称加密有两个密钥,公开的是公钥,不公开的是私钥。用公钥加密,只能用私钥解密。

  • 特点:速度较慢 ,但安全性较高
2.2.3 数据摘要 和 数据指纹

将一串文本经过hash算法后,形成固定大小的字符串,这个字符串具有很强的唯一性。这个字符串就是数据摘要,数据指纹。对数据摘要加密就得到了数字签名。

  • 可以通过数据摘要判断原始文本是否被篡改
  • 常见的摘要算法:MD5,SHA1,SHA512等
2.3 客户端与服务器的密钥协商

在客户端与服务器通信之前,他们需要先交换对应的密钥信息,用来后续的加密通信,保证双方通信的数据安全。服务器将自己的公钥发送给客户端,客户端经过CA证书验证该公钥的合法性,然后客户端用该公钥加密自己对称密钥,将自己的对象密钥发送给服务器,然后服务器用私钥解密得到对称密钥,以后客户端与服务器之间传输数据用对称密钥加密,这样既能保证效率,也能一定程度上保证了数据安全。
image.png

2.4 CA证书

服务器在使用HTTPS前,需要向CA机构申请一份数字证书,数字证书里面包含了证书加密信息、公钥信息等。CA证书证明了该公钥的合法性。如果没有CA证书,那么中间人便有可能替换服务器的公钥,那么客户端与服务器的数据明文信息都会被中间人所得知。

2.4.1 CA机构签名过程

image.png

2.4.2 客户端验证CA合法性过程

image.png

  • 客户端收到CA证书后,将签名与数据分开,然后对数据进行相同的Hash散列形成数据摘要,对数字签名做CA公钥解密获得之前用CA私钥加密前的数据摘要,然后客户端判断这两个数据摘要是否相同,如果不同,说明这份证书不可信,直接丢弃,从而验证了公钥的合法性。
  • 中间人不可能整体替换证书,因为他没有CA私钥,制造的数字签名浏览器无法用CA公钥解密,因此这个证书也会失效。

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

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

相关文章

腾讯春招后端一面(八股篇)

前言 前几天在网上发了腾讯面试官问的一些问题,好多小伙伴关注,今天对这些问题写个具体答案,博主好久没看八股了,正好复习一下。 面试手撕了三道算法,这部分之后更,喜欢的小伙伴可以留意一下我的账号。 1…

【C语言】—— 指针二 : 初识指针(下)

【C语言】——函数栈帧 一、 c o n s t const const 修饰指针1.1、 c o n s t const const 修饰变量1.2、 c o n s t const const 修饰指针 二、野指针2.1野指针的成因(1)指针未初始化(2)指针越界访问(3)指…

HNU-计算机系统-实验1-原型机vspm1.0-(二周目玩家视角)

前言 二周目玩家,浅试一下这次的原型机实验。总体感觉跟上一年的很相似,但还是有所不同。 可以比较明显地感觉到,这个界面越来越好看了,可操作与可探索的功能也越来越多了。 我们HNU的SYSTEM真的越来越好了!&#x…

5 个适用于 Windows 10 和 11 的最佳 PDF 转 Word 转换器

PDF 文件是共享文档的首选格式,但是此类文件存在一些限制,导致难以修改或编辑。因此,您可能会发现自己正在寻找一种将 PDF 文件转换为 Word 或其他可编辑格式的方法。 有许多不同的 PDF 转换器,每种转换器提供的功能略有不同。本…

个人简历主页搭建系列-03:Hexo+Github Pages 介绍,框架配置

今天的更新内容主要是了解为什么选择这个网站搭建方案,以及一些前置软件的安装。 Why Hexo? 首先我们了解一下几种简单的网站框架搭建方案,看看对于搭建简历网站的需求哪个更合适。 在 BuiltWith(网站技术分析工具)上我们可以…

微信小程序(一)

WebView app.是全局配置&#xff0c;app.json是全局配置文件&#xff0c;在页面的.json配置文件中的配置会覆盖我们全局的配置 快捷键&#xff1a; .box 敲回车 ----- <view class"box"></view> .row*8 敲回车&#xff1a; .row{$}*8 敲回车 案例1&…

信雅纳网络测试的二次开发集成:XOA(Xena Open-Source Automation)开源自动化测试

目录 XOA是什么 XOA CLI XOA Python API ​XOA Python Test Suite/测试套件 XOA Converter Source Code XOA是什么 XOA&#xff08;Xena Open-Source Automation&#xff09;是一个开源的测试自动化框架&#xff0c;追求“高效、易用、灵活”的跨操作系统的开发框架。能…

Android SystemServer进程解析

SystemServer进程在android系统中占了举足轻重的地位&#xff0c;系统的所有服务和SystemUI都是由它启动。 一、SystemServer进程主函数流程 1、主函数三部曲 //frameworks/base/services/java/com/android/server/SystemServer.java /** * The main entry point from zy…

Docker使用(四)Docker常见问题分析和解决收集整理

Docker使用(四)Docker常见问题分析和解决收集整理 五、常见问题 1、 启动异常 【描述】&#xff1a; 【分析】&#xff1a;[rootlocalhost ~]# systemctl status docker 【解决】&#xff1a; &#xff08;1&#xff09;卸载后重新安装&#xff0c;不能解决这个问题。 …

基于正点原子潘多拉STM32L496开发板的简易示波器

一、前言 由于需要对ADC采样性能的评估&#xff0c;重点在于对原波形的拟合性能。 考虑到数据的直观性&#xff0c;本来计划采集后使用串口导出&#xff0c;并用图形做数据拟合&#xff0c;但是这样做的效率低下&#xff0c;不符合实时观察的需要&#xff0c;于是将开发板的屏幕…

oracle基础-子查询 备份

一、什么是子查询 子查询是在SQL语句内的另外一条select语句&#xff0c;也被称为内查询活着内select语句。在select、insert、update、delete命令中允许是一个表达式的地方都可以包含子查询&#xff0c;子查询也可以包含在另一个子查询中。 【例1.1】在Scott模式下&#xff0…

AJAX学习(四)

版权声明 本文章来源于B站上的某马课程&#xff0c;由本人整理&#xff0c;仅供学习交流使用。如涉及侵权问题&#xff0c;请立即与本人联系&#xff0c;本人将积极配合删除相关内容。感谢理解和支持&#xff0c;本人致力于维护原创作品的权益&#xff0c;共同营造一个尊重知识…

github 中的java前后端项目整合到本地运行

前言: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未…

百度paddleocr GPU版部署

显卡&#xff1a;NVIDIA GeForce RTX 4070&#xff0c;Nvidia驱动程序版本&#xff1a;537.13 Nvidia驱动程序能支持的最高cuda版本&#xff1a;12.2.138 Python&#xff1a;python3.10.11。试过python3.12&#xff0c;安装paddleocr失败&#xff0c;找不到相关模块。 飞桨版本…

使用 Postman 批量发送请求的最佳实践

背景 最近写了几个接口&#xff1a; 获取 books 的接口获取 likes 的接口获取 collections 的接口 但是我还是不放心&#xff0c;因为这些接口到底稳不稳定呢&#xff1f;上线后有没有隐患呢&#xff1f;所以我想做一个批量发送接口模拟~ 但是想要做到批量发送接口&#xf…

每日五道java面试题之springMVC篇(四)

目录&#xff1a; 第一题. Spring MVC怎么样设定重定向和转发的&#xff1f;第二题.Spring MVC怎么和AJAX相互调用的&#xff1f;第三题. 如何解决POST请求中文乱码问题&#xff0c;GET的又如何处理呢&#xff1f;第四题. Spring MVC的异常处理&#xff1f;第五题. 如果在拦截请…

hcia复习总结5

路由表 路由器的转发原理&#xff1a;当一个数据包进入路由器&#xff0c;路由器将基于数据包中的 目标IP地址查看本地的 路由表 。如果路由表中存在记录&#xff0c;则将 无条件 按照 路由表记录执行&#xff1b;如果没有记录&#xff0c;则将该数据包直接丢弃。 <aa…

SpringMVC 02

这里先附上前一篇的地址,以上系列均为博主的学习路线,仅供参考 初识Spring MVC-CSDN博客 下面我们从SpringMVC传递数组开始讲起 1.传递数组 传递数组的方式和传递普通变量的方式其实是相同的,下面我们附上传递的图片 RequestMapping("/r7")public String r1(String[…

springboot+poi-tl根据模板导出word(含动态表格和图片),并将导出的文档压缩zip导出

springbootpoi-tl根据模板导出word&#xff08;含动态表格和图片&#xff09; 官网&#xff1a;http://deepoove.com/poi-tl/ 参考网站&#xff1a;https://blog.csdn.net/M625387195/article/details/124855854 pom导入的maven依赖 <dependency><groupId>com.dee…

002——编译鸿蒙(Liteos -a)

目录 一、鸿蒙是什么 二、Kconfig 2.1 概述 2.2 编译器 2.3 make使用 本文章引用了很多韦东山老师的教程内容&#xff0c;算是我学习过程中的笔记吧。如果侵权请联系我。 一、鸿蒙是什么 这里我补充一下对鸿蒙的描述 这张图片是鸿蒙发布时使用的&#xff0c;鸿蒙是一个很…