IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 有关HTTP及HTTP的浅学习 -> 正文阅读

[网络协议]有关HTTP及HTTP的浅学习

前言

当被问及HTTPS时发现自己不了解此类协议,因此来进行学习并总结如下,希望能对在学习的师傅有所帮助!

HTTP

什么是HTTP

了解HTTPS之前,首先需要了解一下HTTP
HTTP协议全称Hyper Text Transfer Protocol,中文含义是超文本传输协议,位于TCP/IP四层模型当中的应用层。
在这里插入图片描述
具体如下图所示
在这里插入图片描述

HTTP工作流程

一次HTTP操作称为一个事务,其工作整个过程如下:

 (1 )地址解析
 如用客户端浏览器请求这个页面:http://localhost.com:8080/index.htm
 从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
 协议名:http
 主机名:localhost.com
 端口:8080
 对象路径:/index.htm
 在这一步,需要域名系统DNS解析域名localhost.com,得主机的IP地址。

(2)封装HTTP请求数据包
 把以上部分结合本机自己的信息,封装成一个HTTP请求数据包
 
 (3)封装成TCP包,建立TCP连接(TCP的三次握手)
   在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完
   成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP
   网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协
   议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。这里是8080端口。
   
(4)客户机发送请求命令     
   建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,
   后边是MIME信息包括请求修饰符、客户机信息和可内容。

 (5)服务器响应
 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或
 错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
 实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,
 它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。

 6)服务器关闭TCP连接
 一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器
 在其头信息加入了这行代码。
 
Connection:keep-alive
TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了
为每个请求建立新连接所需的时间,还节约了网络带宽。

实际上的话在这里面需要考虑请求头,请求方法这些,下面进行讲解。

这里以帅气的快递小哥送快递为例,当快递小哥得到我们的住址,在给我们送快递的时候,可能会采用汽车或者三轮车的方式来送,当他送到指定位置的时候,会给我们打电话说他是某个快递公司的,让我们去固定地点签收,如果我们不想去的话就可以给物业打电话,给快递小哥放行,让他送货上门,当我们成功签收后,快递小哥就完成了一次快递任务。

此时再看http,当以http协议向某个web服务器发送请求时,get和post方式就类似于我们快递小哥用的汽车,是一种传递方式,而服务器的ip就类似于快递的地址,而UA就相当于快递小哥声明自己是哪个快递公司的,cookie呢就是我们让物业给快递小哥放行,http 200+正文就相当于快递小哥完成一次快递任务
在这里插入图片描述

HTTP的特点

1、http协议支持客户端/服务端模式,也是一种请求/响应模式的协议。
2、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GETHEADPOST3、灵活:HTTP允许传输任意类型的数据对象。传输的类型由Content-Type加以标记。
4、无连接:限制每次连接只处理一个请求。服务器处理完请求,并收到客户的应答后,即断开连接,但是
却不利于客户端与服务器保持会话连接,为了弥补这种不足,产生了两项记录http状态的技术,一个叫做
Cookie,一个叫做Session。
5、无状态:无状态是指协议对于事务处理没有记忆,后续处理需要前面的信息,则必须重传。

HTTP的请求方式

1GET方法

GET方法用于使用给定的URI从给定服务器中检索信息,即从指定资源中请求数据。使用GET方法的请求应该只是检索数据,并且不应对数据产生其他影响。

说明:
GET请求是可以缓存的,我们可以从浏览器历史记录中查找到GET请求,还可以把它收藏到书签中;且GET请求有长度限制,仅用于请求数据(不修改)。
注:因GET请求的不安全性,在处理敏感数据时,绝不可以使用GET请求。

2POST方法

POST方法用于将数据发送到服务器以创建或更新资源,它要求服务器确认请求中包含的内容作为由URI区分的Web资源的另一个下属。
POST请求永远不会被缓存,且对数据长度没有限制;我们无法从浏览器历史记录中查找到POST请求。

3HEAD方法
HEAD方法与GET方法相同,但没有响应体,仅传输状态行和标题部分。这对于恢复相应头部编写的元数据非常有用,而无需传输整个内容。

4PUT方法
PUT方法用于将数据发送到服务器以创建或更新资源,它可以用上传的内容替换目标资源中的所有当前内容。
它会将包含的元素放在所提供的URI下,如果URI指示的是当前资源,则会被改变。如果URI未指示当前资源,则服务器可以使用该URI创建资源。

5DELETE方法
DELETE方法用来删除指定的资源,它会删除URI给出的目标资源的所有当前内容。

6CONNECT方法
CONNECT方法用来建立到给定URI标识的服务器的隧道;它通过简单的TCP / IP隧道更改请求连接,通常实使用解码的HTTP代理来进行SSL编码的通信(HTTPS)。

7OPTIONS方法
OPTIONS方法用来描述了目标资源的通信选项,会返回服务器支持预定义URLHTTP策略。

8TRACE方法
TRACE方法用于沿着目标资源的路径执行消息环回测试;它回应收到的请求,以便客户可以看到中间服务器进行了哪些(假设任何)进度或增量。

HTTP请求报文

它由三部分组成,头部,请求行和数据体
具体如下图所示(图中有部分标注错误,cookie不属于头部中的,cookie是一种用户凭证)
在这里插入图片描述

HTTP头字段

HTTP头字段如下

字段名							说明															示例
Accept				能够接受的回应内容类型(Content-Types)								Accept: text/plain
Accept-Charset		能够接受的字符集														Accept-Charset: utf-8
Accept-Encoding		能够接受的编码方式列表												Accept-Encoding: gzip, deflate
Accept-Language		能够接受的回应内容的自然语言列表										Accept-Language: en-US
Authorization		用于超文本传输协议的认证的认证信息										Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Cache-Control		用来指定在这次的请求/响应链中的所有缓存机制 都必须 遵守的指令			Cache-Control: no-cache
Connection			该浏览器想要优先使用的连接类型											Connection: keep-alive Connection: Upgrade
Cookie				服务器通过 Set- Cookie (下文详述)发送的一个 超文本传输协议			Cookie: $Version=1; Skin=new;
Content-Length		以 八位字节数组 (8位的字节)表示的请求体的长度							Content-Length: 348
Content-Type		请求体的 多媒体类型													Content-Type: application/x-www-form-urlencoded
Date				发送该消息的日期和时间												Date: Tue, 15 Nov 1994 08:12:31 GMT
Expect				表明客户端要求服务器做出特定的行为										Expect: 100-continue
Host				服务器的域名(用于虚拟主机 ),以及服务器所监听的传输控制协议端口号			Host: en.wikipedia.org:80 Host: en.wikipedia.org
If-Match 			仅当客户端提供的实体与服务器上对应的实体相匹配时,才进行对应的操作。主要
					作用时,用作像 PUT 这样的方法中,仅当从用户上次更新某个资源以来,该资源未被
					修改的情况下,才更新该资源	 										If-Match: "737060cd8c284d8af7ad3082f209582d"
If-Modified-Since	允许在对应的内容未被修改的情况下返回304未修改							If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
If-None-Match		允许在对应的内容未被修改的情况下返回304未修改							If-None-Match: "737060cd8c284d8af7ad3082f209582d"
If-Range			如果该实体未被修改过,则向我发送我所缺少的那一个或多个部分;否则,发送整个
					新的实体																If-Range: "737060cd8c284d8af7ad3082f209582d"
Range				仅请求某个实体的一部分												Range: bytes=500-999
User-Agent			浏览器的浏览器身份标识字符串											User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0
Origin				发起一个针对 跨来源资源共享 的请求										Origin: http://www.example-social-network.com

HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
该怎么简单的说呢,举个例子吧,就好比你直接搜索网易云音乐的url,和在百度上搜网易云,再进入网易云中,两者是不同的,后者会多个referer头,告诉web服务器你从哪里来

(1)防盗链
比如办事通服务器只允许网站访问自己的静态资源,那服务器每次都需要判断Referer的值是否是zwfw.yn.gov.cn,如果是就继续访问,不是就拦截。

(2)防止恶意请求
比如静态请求是.html结尾的,动态请求是.shtml,那么所有的*.shtml请求,必须 Referer为我自己的网站才可以访问,这就是Referer的作用。

在这里插入图片描述

响应状态码

访问一个网页时,浏览器会向web服务器发出请求。此网页所在的服务器会返回一个包含HTTP状态码的信息头用以响应浏览器的请求。

1XX- 信息型,服务器收到请求,需要请求者继续操作。
2XX- 成功型,请求成功收到,理解并处理。
3XX - 重定向,需要进一步的操作以完成请求。
4XX - 客户端错误,请求包含语法错误或无法完成请求。
5XX - 服务器错误,服务器在处理请求的过程中发生了错误。

常见响应状态码如下所示

200 OK - 客户端请求成功
301 - 资源(网页等)被永久转移到其它URL
302 - 临时跳转
400 Bad Request - 客户端请求有语法错误,不能被服务器所理解
401 Unauthorized - 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
404 - 请求资源不存在,可能是输入了错误的URL
500 - 服务器内部发生了不可预期的错误
503 Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

HTTP缺点

1、请求信息明文传输,容易被窃听截取。
2、数据的完整性未校验,容易被篡改
3、没有验证对方身份,存在冒充危险

HTTPS的出现正是解决这些问题,下面来介绍HTTPS

HTTPS

什么是HTTPS

HTTPS全称Hypertext Transfer Protocol over Secure Socket Layer,中文含义是超文本传输协议在安全加密字层,简单来说就是加密数据传输,通俗的说就是安全连接。
简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL
在这里插入图片描述

什么是SSL

SSL全称Secure Socket Layer,中文含义是安全套接字层。SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。

SSL 是指安全套接字层,简而言之,它是一项标准技术,是为网络通信提供安全及数据完整性的一种安全
协议。
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。

那它的作用是什么呢,如下所示

SSL/TLS 协议实现的功能有三个主要组成部分:加密、认证和完整性。
1、加密:隐藏从第三方传输的数据。为了提供高度隐私,对传输的数据进行加密。这意味着,任何试图
截取此数据的人都只会看到几乎无法解密的乱码字符。
2、身份验证:在两个通信设备之间启动称为握手的身份验证过程,以确保两个设备确实是它们声称的真实
身份。
3、完整性:验证数据未被伪造或篡改。对数据进行数字签名,以提供数据完整性,验证数据是否在到达
目标接收者之前被篡改过。

HTTPS工作流程

1、首先客户端通过URL访问服务器建立SSL连接。

2、服务端收到客户端请求后,会将网站支持的证书信息(证书中包含公钥)传送一份给客户端。

3、客户端的服务器开始协商SSL连接的安全等级,也就是信息加密的等级。

4、客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。

5、服务器利用自己的私钥解密出会话密钥。

6、服务器利用会话密钥加密与客户端之间的通信。

图示如下
在这里插入图片描述
这里对对称密钥和非对称密钥进行简单讲解

对称密钥

对称加密指的是加密和解密使用的秘钥都是同一个,是对称的。只要保证了密钥的安全,那整个通信过程就可以说具有了机密性
在这里插入图片描述

非对称密钥

非对称加密,存在两个秘钥,一个叫公钥,一个叫私钥。两个秘钥是不同的,公钥可以公开给任何人使用,私钥则需要保密。

公钥和私钥都可以用来加密解密,但公钥加密后只能用私钥解密,反过来,私钥加密后也只能用公钥解密
在这里插入图片描述

那么在此过程中我们如何知道信息是否被修改了呢,这时候就需要介绍一下摘要算法了

摘要算法

实现完整性的手段主要是摘要算法,也就是常说的散列函数、哈希函数
其实就是对明文进行了一种特殊加密,示例如下图
在这里插入图片描述
得到的字符串是独一无二的,想要验证其是否被修改,只需要验证其经过字符串是否一致即可
在这里插入图片描述
在HTTPS中还存在一个数字签名,我们再来接下来对其进行简单介绍

数字签名

数字签名可以验证消息是由发送方签名发出的,别人是伪造不了的,因为用的是私钥加密,公钥解密
签名与公钥一样,任何人都可以进行访问,但这个签名只有私钥对应的公钥可以解开,拿到字符串后,对比字符串是否一致来判断是否被修改过,若一致则说明是发送方发出的
在这里插入图片描述
此时就存在了一个问题,就是公钥是任何人都可以发布的,黑客也可以自己编造公钥,这时候如何判断公钥就是发送方的那个公钥呢,这时候就需要一个第三方,也就是CA验证机构

CA验证机构

CA,全称未Certificate Authority,其中文含义是数字证书认证机构,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
它的工作流程如下

1、服务器的运营人员向数字证书认证机构提出公开密钥的申请
2、数字证书认证机构在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名
3、然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起
4、服务器会将这份由数字证书认证机构颁发的数字证书发送给客户端,以进行非对称加密方式通信

接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,通过则证明

1、认证服务器的公开密钥的是真实有效的数字证书认证机构
2、服务器的公开密钥是值得信赖的

HTTPS缺点

1HTTPS协议多次握手,导致页面的加载时间延长近50%2HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗;
3、申请SSL证书需要钱,功能越强大的证书费用越高。
4SSL涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大。

HTTP与HTTPS的区别

1HTTPSHTTP协议的安全版本,HTTP协议的数据传输是明文的,是不安全的,HTTPS使用了SSL/TLS协议
进行了加密处理。
2HTTPHTTPS使用连接方式不同,默认端口也不一样,HTTP80HTTPS443。
使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书
较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
3HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器
需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上SSL握手需要的9个包,所以一共是 12 个包。

参考文献

https://blog.csdn.net/Reme_mber/article/details/123927959
https://www.cnblogs.com/librarookie/p/16373398.html
https://blog.csdn.net/hudashi/article/details/50788595)
https://zhuanlan.zhihu.com/p/158044137
https://zhuanlan.zhihu.com/p/72616216
https://blog.csdn.net/ccmlove123/article/details/104117058
https://www.jianshu.com/p/30b8b40a671c
https://www.jianshu.com/p/6bf2f9a37feb
https://vue3js.cn/interview/http/HTTPS.html

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-06-26 17:06:02  更:2022-06-26 17:06:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 21:12:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计