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与HTTPS及其相关问题 -> 正文阅读

[网络协议]HTTP与HTTPS及其相关问题

超文本传输协议HTTP

HTTP是位于TCP/TP协议体系结构的应用层。HTTP采用的是C/S模式。客户端是运行在应用程序的PC或工作站。服务器是提供Web服务的高性能计算机。在用户需要浏览某台Web服务器中的网页时,就会打开一个HTTP会话,并向服务器发送HTTP请求,接收到请求后服务器会处理请求并给客户端返回一个应答信息。同时,HTTP是一种无状态协议,同一个客户端第二次访问同一个服务器上的页面时,服务器无法知道这个客户端曾经访问过。

HTTPS

HTTPS是由HTTP加上SSL/TLS协议构建的可进行加密传输、身份认证的网络协议。

HTTP与HTTPS相关问题

HTTP的请求流程

1.首先,浏览器构建请求行信息,构建好后,浏览器准备发起网络请求。

GET /index.html HTTP1.1

2.准备好TCP连接的IP和端口号,URL没有特殊指明端口号,那么端口号通常是80端口,准备IP主要是DNS寻址

1)包括浏览器搜索自身的DNS缓存、搜索操作系统的DNS缓存、读取本地的Host文件,如果里面有这条网址的记录,这返回其中的IP地址完成解析。
2)向本地DNS 服务器进行查询。如果要查询的域名包含在本地配置区域资源中,则返回解析结果,完成域名解析。
3)检查本地DNS服务器缓存中是否有该网址的记录,有则返回解析结果,完成解析。
4)如果上述步骤都没有得到对应IP地址,那么进行一下步骤
a.本地 DNS 服务器发送查询报文至根 DNS 服务器,根 DNS 服务器收到请求后,用顶级域 DNS 服务器地址进行响应给本地DNS服务器。
b.本地 DNS 服务器发送查询报文至顶级域 DNS 服务器。顶级域 DNS 服务器收到请求后,用权威 DNS 服务器地址进行响应给本地DNS服务器。
c.本地 DNS 服务器发送查询报文至权威 DNS 服务器,权威 DNS 服务器收到请求后,用 解析的 IP 地址进行响应,本地DNS服务器再返回给浏览器,完成域名解析。

3.准备好IP和端口号就可以进行TCP连接了,也就是TCP三次握手
(有需要的可以看一下这篇写TCP三次握手的文章:TCP三次握手及其相关问题
4.发送HTTP请求

输入URL后到页面响应的整个过程发生了什么

其实和上面HTTP请求流程类似,具体请看这篇文章:输入url,敲回车到页面展示经历了什么?

HTTP报文格式

HTTP报文包括请求报文和响应报文
请求报文格式

1.请求行:请求方法+URL(url:协议名+域名+端口号+带层次的文件路径+query string)+版本号
2.请求头(Header):有若干键值对构成
3.空行
4.请求数据(Body)

响应报文格式

1.状态行:版本号+状态码+状态码解释
2.响应头:若干键值对构成
3.空行
4.响应数据

HTTP请求方法有那些

GET:通常通过url,获取服务器相应资源
HEAD:和GET类似,但响应中没有具体数据,只有报头
POST:通常用于向服务器上传数据
PUT:传输文件
DELETE:删除文件
CONNECT:连接代理服务器

HTTP请求方法中POST和GET的区别

1.最大的区别就是约定的规范上的区别,GET一般用于获取资源,POST一般用于增添修改操作;
2.请求形式上:GET请求的数据附在URL之后,在HTTP请求头中;POST请求的数据在请求体中;
3.GET只允许ASCII字符,POST对数据类型没有要求,也允许二进制数据;
4.GET的长度有限制(受限于操作系统或者浏览器),而POST数据大小无限制;
ps:get方式提交数据的大小,http协议并没有硬性限制,而是与浏览器、服务器、操作系统有关;
5.GET请求可被缓存(比如常见的HTML,CSS)、收藏、保留到历史记录。POST不会被保存;

HTTP请求头中有那些常见键值对

host:服务器主机的地址和端口
connection:连接方式
content-length:正文的长度
content-type:正文的数据格式
user-agent:浏览器操作系统的属性
referer:表示从那个页面跳转来的
cookie:往往通过它实现身份标识的功能

HTTP报文中空行的作用

空行:因为 HTTP 协议并没有规定报头部分的键值对有多少个. 空行就相当于是 “报头的结束标记”, 或者是 “报头和正文之间的分隔符”.
HTTP 在传输层依赖 TCP 协议, TCP 是面向字节流的. 如果没有这个空行, 就会出现 “粘包问题”.

HTTP响应的状态码有哪些,挑常见的说一下

1xx状态码:100 continue 服务器收到部分请求,如果没有没有拒绝,客户端可以继续发送其余请求
2xx状态码:操作成功。200 OK
3xx状态码:重定向。301 永久重定向;302暂时重定向 303所请求的网页在另一个url被找到
4xx状态码:客户端错误。400 Bad Request 请求参数错误;401 Unauthorized 未经过认证的错误;403 Forbidden 请求页面禁止访问;404 Not Found 未找到请求页面;
5xx状态码:服务端错误。500服务器内部错误;501服务不可用 ;502 网关错误,服务器从上游服务器收到一个无效响应 ;504 网关超时,服务器再次充当代理或网关时,没有及时从另一个服务器(例如DNS)获得响应,因此它无法处理请求

HTTP与HTTPS的区别

1.端口不同:HTTP使用的是80端口,HTTPS使用443端口;
2.HTTP信息是明文传输,HTTPS运行在SSL/TLS加密协议之上,添加了加密和认证机制,更加安全;
3.HTTPS由于加密解密会带来更大的CPU和内存开销;

SSL/TLS加密协议

简单地讲,SSL/TLS就是同时结合各种加密算法、数字签名算法及数字证书等技术的一套协议,目的就是为了保证通信的安全性。
常见的加密算法:分为对称加密和非对称加密

对称加密:数据加密解密使用同一份密钥

整个流程就是客户端和服务器持有同一份密钥,客户端传输的数据(HTTP请求中的Header和Body)都通过这个密钥进行加密,服务器收到密文后再通过密钥进行解密得到明文,就算是中间被黑客入侵了路由器的到了亲求内容,也只是得到的密文,没法得到真正的内容。

在这里插入图片描述
但是这个对称加密有个先决条件就是客户端和服务器都需要知道密钥是上面,总不能服务器和所有客户端之间加密都用一个密钥吧,那么黑客自己启动一个客户端不久可以得到密钥了嘛,这不就相当于没加密嘛。所以需要不同的密钥,那么就需要他们之间的一方主动生成一个密钥,然乎通过网络告诉另一方这个密钥是什么。这时对称加密的最大破绽就出现了,黑客侵入路由器获取这个密钥不就能解开后续的密文了嘛,这依旧不安全,就必须要对密钥进行加密,当然还使用对称加密是不行的。所以就需要另一种加密算法对密钥进行加密了,那就是非对称加密。

非对称加密:数据加密使用公钥,解密使用私钥

非对称加密有两个密钥,一个公钥一个私钥,公钥发出去,人人都能拿到,私钥自己保存。
整个流程大致是这样的:假设是由服务器生成私钥和公钥,服务器将非对称加密的公钥发给客户端,客户端用这个公钥将对称加密的密钥加密后发给服务器,服务器再用私钥对加密的密钥进行解密得到真正的密钥。就算黑客获得了这个密钥也不知道其明文。
在这里插入图片描述

非对称加密安全吗?,为什么?解决方法?

看似已经万无一失了,其实还有个大破绽,那就是中间人“黑白通吃”。
大致过程就是中间人截取了服务器发给客户端的公钥1,然后用自己生成一对假的公钥和私钥(公钥2,私钥2),并将公钥2代替公钥1发给客户端,然而客户端并不知道这是假的,就用公钥2加密了密钥,之后黑客截取了加密后的密钥用自己的私钥2解开密文得到明文密钥。然后为了不让服务器起疑心,将明文再用公钥1加密后返还给服务器。在整个过程中客户端和服务器都不知道有第三者的存在,黑客也神不知鬼不觉的得到了密钥。
在这里插入图片描述
其实在上面这个过程中,最大的问题就是客户端不知道得到的公钥是不是真的。那有什么办法解决这个问题吗?当然有,那就是引入第三方公信机构,来证明这个公钥是真的(相当于警察局证明身份证是真的一样)
大致流程就是,服务器在上线的时候就需要在公信机构那申请一个证书,之后将公约放在证书中发给客户端,客户端收到这个证书后会检测这个证书是否是真的。如何校验哪?证书上本身就含有一些校验机制,比如咱的身份证自身也有一些防伪标识,当然最权威的还是向公信机构求证。当发现黑客证书是假的后,客户端就会弹出警报!
在这里插入图片描述
如果每次都去访问公信机构,那就太麻烦了。客户端其实也会内置一些公信机构的信息在操作系统中,这样就不需要通过网络去找公信机构校验,在本地就可以校验了。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-09-25 23:23:31  更:2022-09-25 23:24:01 
 
开发: 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年4日历 -2024/4/20 16:58:53-

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