谈一谈网络协议中的应用层

文章目录

  • 一,什么是HTTP
  • HTTP的优缺点
  • HTTPS

一,什么是HTTP

我们在通过网络进行传输数据时,我们要保证,我们在发送时构造的数据,在接收时也能够解析出来,这本质上就是一种协议,是一种应用层协议,我们的程序员可以自定义这种协议,但实际上已经有大佬为我们写出了更靠谱的协议,就是HTTP。其是一种超文本传输协议。

那么这种协议到底是什么呢?
当我们去访问某个网页时,其先是会将我们的请求通过HTTP请求的方式,发送给服务器,然后服务器再回复给客户端对应的HTTP响应。

我们先来看HTTP请求中有什么。
在这里插入图片描述
其由首行+Header+Body组成。
我们先来看头部:
在这里插入图片描述
它由方法+url+版本组成。
那么什么是方法呢?
下图就是HTTP的方法
在这里插入图片描述
那么这些方法有什么区别呢?
我们以常用的GET和POST来说。GET请求的参数一般写在url中。URL 规定只能支持 ASCII,所以 GET 请求的参数只允许 ASCII 字符 ,而且浏览器会对 URL 的长度有限制,通常为2048个字符。(HTTP协议本身对 URL长度并没有做任何规定)。

POST 请求携带数据的位置一般是写在报文 body 中,body 中的数据可以是任意格式的数据,只要客户端与服务端协商好即可,而且浏览器不会对 body 大小做限制。

因为GET请求将参数放在URL中,所以容易泄漏信息,例如我们在网页上就行用户密码登录时,若用GET请求,就会将用户名和密码都显式在URL中,从而暴露了我们的个人信息。

在 HTTP 协议里,所谓的「安全」是指请求方法不会「破坏」服务器上的资源。
所谓的「幂等」,意思是多次执行相同的操作,结果都是「相同」的。

如果从 RFC 规范定义的语义来看:
GET 方法就是安全且幂等的,因为它是「只读」操作,无论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。所以,可以对 GET 请求的数据做缓存,这个缓存可以做到浏览器本身上(彻底避免浏览器发请求),也可以做到代理上(如nginx),而且在浏览器中 GET 请求可以保存为书签。

POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的。所以,浏览器一般不会缓存 POST 请求,也不能把 POST 请求保存为书签。

GET方法与POST方法的区别:

安全性:POST方法比GET方法更安全,因为它将数据作为请求主体发送,而不是明文暴露在URL中。
数据量:POST方法没有数据量限制,而GET方法受到URL长度的限制。
数据类型:POST方法可以发送各种类型的数据,而GET方法主要用于发送文本数据。
缓存:POST方法不会被浏览器缓存,而GET方法可能会被缓存。

我们再来谈谈URL。
我们平时所说的网址就是URL,其包括这几部分:
在这里插入图片描述
最后一个版本就是HTTP的版本,再进行通信时,不同的版本则应该对应用同一版本进行解析。

看完首行,我们再来看看Header部分
在这里插入图片描述

HTTP 是基于 TCP 传输协议进行通信的,而使用了 TCP 传输协议,就会存在一个“粘包”的问题,HTTP 协议通过设置回车符、换行符作为 HTTP header 的边界,通过 Content-Length 字段作为 HTTP body的边界,这两个方式都是为了解决“粘包”的问题

看完了HTTP请求,我们再来看看HTTP的响应。
在这里插入图片描述

HTTP的响应包括:首行+Header+BODY.
我们来看首部:其包括版本号+状态码+状态码解释。
版本号我们上面提到过,那么什么是状态码呢?

HTTP状态码
在这里插入图片描述

「200 OK」是最常见的成功状态码,表示一切正常。如果是非 HEAD 请求,服务器返回的响应头都会有 body 数据。

「204 No Content」也是常见的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据。

「206 Partial Content」是应用于 HTTP 分块下载或断点续传,表示响应返回的 body数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。

301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。

302 Found」表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问

301 和 302 都会在响应头里使用字段 Location,指明后续要跳转的 URL,浏览器会自动重定向新的 URL。

301 和 302 都会在响应头里使用字段 Location,指明后续要跳转的 URL,浏览器会自动重定向新的 URL。

「304 Not Modified」不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,也就是告诉客户端可以继续使用缓存资源,用于缓存控制。

「400 Bad Request」表示客户端请求的报文有错误,但只是个笼统的错误。

「403 Forbidden」表示服务器禁止访问资源,并不是客户端的请求出错。

「404 Not Found」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。

「500 Internal Server Error」与 400 类型,是个笼统通用的错误码,服务器发生了什么错误,我们并不知道。

「501 Not Implemented」表示客户端请求的功能还不支持,类似“即将开业,敬请期待”的意思。

「502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。

「503 Service Unavailable」表示服务器当前很忙,暂时无法响应客户端,类似“网络服务正忙,请稍后重试”的意思

HTTP的优缺点

对于一些具有重复性的 HTTP 请求,比如每次请求得到的数据都一样的,我们可以把这对「请求-响应」的数据都缓存在本地,那么下次就直接读取本地的数据,不必在通过网络获取服务器的响应了,这样的话 HTTP/1.1 的性能肯定肉眼可见的提升。

所以,避免发送 HTTP 请求的方法就是通过缓存技术,HTTP 设计者早在之前就考虑到了这点,因此 HTTP 协议的头部有不少是针对缓存的字段。

HTTP 缓存有两种实现方式,分别是强制缓存和协商缓存。

HTTP的优点:
简单,易扩展,跨平台性。

缺点:
HTTP是无状态的,也就是说,对于一些网页来说,像是淘宝,我们的每一次请求都要进行用户验证,这样对用户显然是不友好的,所以就有了cookie的出现。
我们先来看第一种情形:我们在网页登录后,若用POST请求,则我们的登录信息则会填写到请求的body中,服务器读到后,会与其数据库中的信息进行校验,成功后才会返回对应的信息,这时我们的浏览器中也会对我们的登录信息进行保存,保存在cookie中,当要继续访问时发送请求时,则填认证信息的过程则由浏览器帮助我们去做了,这样看似方便了,但是是有问题的,当有人在我们的电脑中植入木马,对我们的cookie进行扫描时,我们的信息是不是就泄漏啦。(cookie存储在本地)。那么有什么办法吗?有的!
我们在登录之后不再直接用密码进行验证不就可以了。
当我们的客户端将用户名,密码通过请求发送到服务器上时,在服务器中,会有一个哈希表的东西,其内容是,我们的登录信息和服务器为我们分配的一个session id,这两个值是一一映射的关系,然后服务器将这个id返回给客户端,此时浏览器保存的就是我们的id了,当再要进行验证时,就通过id直接与服务器进行验证。我们的信息也就不会泄露了,但是!仍然是不安全的,因为我们的HTTP是明文传输的,黑客可以通过抓包,从而拿到我们的id从而登录我们的账号。
有什么办法解决吗?有的!HTTPS。

HTTPS

因为http的内容是明⽂传输的,明⽂数据会经过路由器、wifi热点、通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双⽅察觉,这就是 中间⼈攻击 ,所以我们才需要对信息进⾏加密。

那么它是怎么进行加密的呢?
我们的加密有对称加密和非对称加密。
我们来看一种最接近我们HTTPS加密方式的加密方法。
非对称加密+对称加密
客户端发送连接请求给服务器,服务器发送公钥给客户端,客户端用公钥加密密钥R(R进行的是对称加密)发送给服务器,然后服务器用私钥解密,最后两个主机通过对称密钥R进行通信,但是改方法是有问题的,要是有中间人在开始时就进行攻击,即在向客户端发送公钥时就进行攻击,将公钥换成自己的公钥给客户端,从而就拿到了客户端的密钥R。那么怎么解决呢?本质就是将服务器传给客户端的公钥保护起来。
我们利用CA证书对公钥进行保护。
先是服务端向CA机构申请,CA机构有一把公钥和私钥,其先是用对证书的信息进行哈希,形成摘要,然后对该摘要用私钥加密,形成数字签名,在建立连接时,服务器发送带签名的证书给客户端,该证书中包含服务器的公钥和网站信息,所以要是有中间人进行攻击时,由于其只要对证书的内容进行更改,客户端在收到证书,对其进行哈希形成摘要,再用CA机构的公钥对签名进行解密,若摘要不匹配,则是不合法的,这就避免了上述的中间人攻击的场景。服务器的公钥就得到了保护,然后用该公钥加密客户端的密钥R,给服务器后,两主机就进行对称加密从而通信了。

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

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

相关文章

python zblog API实现类似XMLRPC/发布文章

我发现python对Zblog的XML发布并不友好,虽然也有对应的模块,但是远远没有XPCRPC更直接方便,但是使用xmlRpc是直接给发布文章带来了不小的便利,但是对系统也并不友好,但是zblog也开放了Api,但是干部子弟不乐…

测试剪切板贴图,兼测试2023年12月7日更新的Bard

当前的情况好比,(居然真的可以通过剪切板把图片放进来!) 听说2023年12月7日Bard有更新,所以,再测试了一次。这下,对大语言模型应该死心了;AI替代人的传闻应该是过早危言耸听了。

SAP UI5 walkthrough step3 Controls

在上一步&#xff0c;我们是直接用index.html 中的body 里面的DIVision去输出 hello world&#xff0c; 在这个章节&#xff0c;我们将用SAP UI5 的标准控件 sap/m/Text 首先&#xff0c;我们去修改 webapp/index.html <!DOCTYPE html> <html> <head><…

Vue3-02-ref() 响应式详解

ref() 是什么 ref() 是一个函数&#xff1b; ref() 函数用来声明响应式的状态&#xff08;就是来声明变量的&#xff09; ref() 函数声明的变量&#xff0c;是响应式的&#xff0c;变量的值改变之后&#xff0c;页面中会自动重新渲染。ref() 有什么特点 1.ref() 可以声明基础…

java服务调用mysql报错

一、前言 前端服务调用后端服务时出现以下报错&#xff0c;原因是使用mysql5.7版本数据库中存在ONLY_FULL_GROUP_BY这个配置项导致的不兼容 MySQLSyntaxErrorException: Expression #32 of SELECT list is not in GROUP BY clause and contains nonaggregated column demeter…

打造Github首页的动态飞线效果

一、导语 Github首页的地球动态飞线&#xff0c;大家都比较熟悉吧 二、分析 由大量随机的3点构造出贝塞尔曲线&#xff0c;然后开始从起点到终点的飞行后&#xff0c;然后再从起点到终点的消失&#xff0c;就此完成整个过程 三、基础代码 createCurve(startPoint, endPoint…

layui实现下拉框多选

引用layui第三方扩展实现下拉框选择渲染 第三方插件地址xmSelect下拉多选 xmSelect 实现效果 //第三方扩展插件 <script type"text/javascript" src"${ctx }/config/layui/dist/xm-select.js"></script> //jquery渲染 <script type&qu…

【数电笔记】58-同步D触发器

目录 说明&#xff1a; 1. 电路组成 2. 逻辑功能 3. 特性表、特性方程 4. 状态转移图 例题 5. 同步D触发器的特点 6. 集成同步D触发器&#xff1a;74LS375 74LS375内部原理 说明&#xff1a; 笔记配套视频来源&#xff1a;B站本系列笔记并未记录所有章节&#xff0c;…

JRT文件服务实现

网站与客户端打印和导出方面已经无大碍了&#xff0c;今天抽时间整整文件服务&#xff0c;文件服务设计可以查看下面连接。原理一样&#xff0c;代码会有些变化。 文件服务设计 首先实现文件服务的服务端&#xff0c;就是一个业务脚本&#xff0c;用来接收上传、移动和删除文件…

Qt之基于QMediaPlayer的音视频播放器(支持常见音视频格式)

Qt自带了一个Media Player的例子,如下图所示: 但是运行这个例子机会发现,连最基本的MP4格式视频都播放不了。因为QMediaPlayer是个壳(也可以叫框架),依赖本地解码器,视频这块默认基本上就播放个MP4,甚至连MP4都不能播放,如果要支持其他格式需要下载k-lite或者LAVFilte…

Qt槽函数不响应不执行的一种原因:ui提升导致重名

背景&#xff1a; 一个包含了组件提升的ui&#xff0c;有个按钮的槽函数就是不响应&#xff0c;于是找原因。 分析&#xff1a; 槽函数的对应一是通过connect函数绑定信号&#xff0c;二是on_XXX_signal的命名方式。界面上部件的槽函数通常是第二种。 我反复确认细节&#…

cache教程 4.一致性哈希(hash)

本章节是单节点走向分布式节点的一个重要部分。 一致性哈希(consistent hashing)的原理以及为什么要使用一致性哈希。实现一致性哈希代码&#xff0c;添加相应的测试用例 1.多节点部署遇到的问题 上一章节完成了一个单节点的缓存服务器。那对于一个单节点来说&#xff0c;读…

L1-031:到底是不是太胖了

题目描述 据说一个人的标准体重应该是其身高&#xff08;单位&#xff1a;厘米&#xff09;减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材&#xff08;即 | 真实体重 − 标准体重 | < 标准体重10%&#xff09;。已知 1 公斤等于 2 市斤。…

CSS入门(样式表|class类|选择器|背景|!important|文本颜色|字体|注释)

为什么学习CSS&#xff0c;因为QSS vs CSS 相似度极高&#xff0c;学好CSS对于QSS和QML都有潜移默化的作用。记住不管学习什么&#xff0c;我们都在围绕Qt集成。 入门 介绍 CSS 功能丰富&#xff0c;不仅仅是布局页面 外部样式表 <link> 在给定的HTML代码中&#xff…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《考虑移动式储能调度的配电网灾后多源协同孤岛运行策略》

这篇文章的标题表明研究的主题是在配电网发生灾害后&#xff0c;采用一种策略来实现多源协同孤岛运行&#xff0c;并在这个过程中特别考虑了移动式储能的调度。 让我们逐步解读标题的关键词&#xff1a; 考虑移动式储能调度&#xff1a; 文章关注的焦点之一是移动式储能系统的…

neuq-acm预备队训练week 8 P4779 【模板】单源最短路径(标准版)

题目背景 题目限制 题目描述 给定一个 n 个点&#xff0c;m 条有向边的带非负权图&#xff0c;请你计算从 s 出发&#xff0c;到每个点的距离。 数据保证你能从 s 出发到任意点。 输入格式 第一行为三个正整数n,m,s。 第二行起 m 行&#xff0c;每行三个非负整数 ui​,vi​…

2023年【广东省安全员C证第四批(专职安全生产管理人员)】考试总结及广东省安全员C证第四批(专职安全生产管理人员)复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年【广东省安全员C证第四批&#xff08;专职安全生产管理人员&#xff09;】考试总结及广东省安全员C证第四批&#xff08;专职安全生产管理人员&#xff09;复审考试&#xff0c;包含广东省安全员C证第四批&…

File has been changed outside the editor, reload?

编译keil工程&#xff0c;一直提示&#xff1a;该文件在编译器之外被修改&#xff0c;是否重新加载。 解决办法&#xff1a; 关闭.map后缀的文件即可&#xff0c;然后重新build/rebulid可以发现不会重新弹出该错误。

完整方案开放下载!详解中国移动《通信网络中量子计算应用研究报告》

8月30日&#xff0c;中国移动在第四届科技周暨战略性新兴产业共创发展大会上重磅发布了《通信网络中量子计算应用研究报告》。 玻色量子作为中国移动在光量子计算领域的唯一一家合作企业兼战投企业&#xff0c;在量子计算应用于通信行业达成了深入合作&#xff0c;并在5G天线多…

Docker部署redis单节点

【百炼成魔】docker部署redis单节点 环境准备 关闭防火墙 systemctl stop firewalld && systemctl disable firewalldsetenforce 0 && sed -i s/SELINUX.*/SELINUXdisabled/g /etc/selinux/config安装常用软件 yum install -y wget net-tools bash-compl…