前端浅谈-协议相关(http/https)
当DNS工作完之后得到了一个网址
https//192.168.1.255/index.html
这个并不符合标准的请求路径.接下来就是https的功能了.讲https前先讲讲它的前身http协议
HTTP协议
http协议是超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
说得通俗一点就是,请求和响应的规范.和其他的协议和规范一样,其目的都是为了统一规范,方便处理.
协议内容
1.规定了url规范,默认端口:80.
也就是http的请求将会默认给加上一个80端口,最终我们得到如下网址
https//192.168.1.255:80/index.html
这就是一个完整合规的请求路径了
2.规定了请求报文格式和响应报文格式
以火狐浏览器请求这个页面为例,因为现在浏览基本都把请求和响应美化了,所以我们要选中边上的原始去查看原始内容
1): 请求报文
包含起始行,请求头和请求主体
起始行
请求方式:GET,
请求url:/api/msg,
协议类型及版本:HTTP/2
请求方式通常是8种,其中GET和POST是最常用的.而其中POST有请求主体,包含了需要传递的参数内容,而GET则没有,
请求头
请求头是一系列的键值对,具体的内容通常也可以在网上查的.这里不讨论.
请求体
根据需求各有不同,可在浏览器中查看
2):响应报文
响应报文跟请求报文的总体结构是相似的,只是在细节上不太一样
起始行
协议类型及版本
状态码
状态码描述
响应头
对响应的描述,主要是一些键值对.
响应体
响应的主要内容,在浏览器中可直接看到.前端需要的数据主要就放在这里.
3.交互过程
请求->响应
通过http协议,我们能完成完整的前后端交互,并且在大家都遵守相关协议的情况下.我们可以在任何平台和宿主环境中完成前后端交互.
HTTPS协议
上面在描述http的时候,我特意说了"可以在浏览器看到这一点".也就是说http协议传输是明文的,所以一下敏感数据就不太适合用http协议,于是https就应运而生.它主要是http协议+ssl加密协议.所以简称https.
它继承了http的大体框架,唯一不同的就是多了个s(不是).而这个s就决定它让交互过程多了加密通话的过程.也就是说原来是直接给,现在多了些验证过程.
我们一步步去了解加密
1.密钥和密文
密文是一段加密过的文字,而密钥可以是加密也可以是解密的工具.
2.公钥和私钥
公钥是公共密钥,也就是大家都用这同一个密钥.私钥是私有的密钥,也就是说每个人都可以有自己的私钥,只有自己知道.
3.对称加密和非对称加密
对称加密是大家都用公钥,加密和解密都用相同的.这样只有统一一下便可以比较方便地实现加密和解密.
非对称加密是加密用公钥,而解密用私钥.也就是说,我给大家一个公钥,你要加密好给我,我再用私钥去解密.因为公钥和私钥是可以相互加解密的.
4.混合加密
就是结合对称加密和非对称加密两种方案的.
5.风险
在讨论SSL加密方式之前,我们先讨论一下以上普通加密的风险.
风险主要源自公钥,比如服务器的公钥a,和私钥a.正常情况下是服务器把公钥a传给客户端,客户端用公钥a加密,然后传给服务器,就是别人拿到密文,因为没有私钥a解密,也解析不出来东西.但是,假如.有个第三者,有公钥b,私钥b.在服务器把公钥a传给客户端是,它把公钥a给拦截了,然后传给了客户端公钥b,客户端用公钥b去加密,然后再发给服务器,如果这时候密文被第三者拦截后,他就可以用私钥b去解析了.成功获得内容.
6.认证
所以,我们需要对服务器和浏览器进行认证.这个时候"自证"就不如"权威机构"靠谱.就需要引入第三方认证机构,由它来认证.认证通过了,客户端和服务器就可以放心得去交流了.
7.SSL
SSL加密过程包含三方,客户端,服务器,认证机构.其中,服务端和认证机构的公钥和密钥都是需要参与其中的.还有一个特殊的,客户端的密钥.他是在这过程中生成,从过程来看,它参与了.从结果来看,它没完全参与.
1).认证机构自己的公钥A内置到客户端里,其实这一步就是认证客户端的过程.因为没有公钥A就不是合规的客户端,SSL验证也就进行不下去. 2).服务端先把自己的公钥B给认证机构,认证机构认证完确认是合规的服务器,接着需要把自己的认证结果传递给客户端.它会用自己的私钥a,去加密一个认证数字签名,然后
把公钥B和数组签名放在一个证书里给客户端. 3).客户端拿到了证书,用内置的公钥A去解密数字签名(防止伪造签名),发现签名合规,确定了公钥B是服务端给的.就会生成一个对称密钥C,这个密钥是后面数据交流的时候,
客户端和服务端统一的密钥. 4).客户端用公钥B把密钥C加密之后传给服务端, 5).服务端拿到密钥C的密文之后用私钥b去解密,获得密钥C. 6).服务端用密钥C加密数据传给客户端. 7).客户端用密钥C去解析加密数据.
通常情况下http请求是直接进行TCP连接的,而https则是需要先SSL,然后再TCP.这其实就是http和https的最大区别,其他比如它们的端口号不一样,需要ca认证,http无状态和https有状态啥的,都是它的延伸.
前端浅谈-协议相关(http/https)的更多相关文章
- 前端浅谈-协议相关(DNS协议)
从应用层到实体层的协议太多了,我们并不能一一涉及,目前来说就打算整理可能会与前端相关的协议. 前端面试常会问到一个问题-"从输入一个url到页面渲染经历了哪些过程".这其实是一个相 ...
- 前端浅谈---协议相关(TCP连接)
TCP连接 http的描述里面,我弱化了交互过程的描述,因为它相对复杂.所以我在此单独描述.客户端和服务端传递数据时过程相对谨慎和复杂,主要是开始和结束的过程.而这整个过程就是TCP连接.连接流程大体 ...
- 浅谈协议(四)——wireshark强力解析视频流协议
参考链接: https://wenku.baidu.com/view/460f016e49d7c1c708a1284ac850ad02de800722.html https://wenku.baidu ...
- 浅谈协议(二)——视频流协议 [RTP/RTCP/RTMP/HTTP_FLV]
- Web 前端 - 浅谈外部手动控制 Promise 状态
前言 当有多个共享资源.协同操作的时候,往往需要根据动态亦或是复杂的条件以控制和调用程序逻辑. 还是那句话,懂的人自然懂,不懂的人也搜不到这个随笔. 设计 PendingPromise<T> ...
- 前端浅谈-Js的组成
这里主要想详细的分析一下浏览器渲染过程,但东西比较多.所以分成多个部分. JS由三个部分组成,分别为ECMAScript.BOM.DOM. 其中BOM是浏览器层面的东西,而DOM是页面层面的东西.简单 ...
- 浅谈HTTPS以及Fiddler抓取HTTPS协议
最近想尝试基于Fiddler的录制功能做一些接口的获取和处理工作,碰到的一个问题就是简单连接Fiddler只能抓取HTTP协议,关键的登录请求等HTTPS协议都没有捕捉到,所以想让Fiddler能够同 ...
- 浅谈HTTPS以及Fiddler抓取HTTPS协议(摘抄)
一.浅谈HTTPS 我们都知道HTTP并非是安全传输,在HTTPS基础上使用SSL协议进行加密构成的HTTPS协议是相对安全的.目前越来越多的企业选择使用HTTPS协议与用户进行通信,如百度.谷歌等. ...
- 【转载】浅谈HTTPS以及Fiddler抓取HTTPS协议
最近想尝试基于Fiddler的录制功能做一些接口的获取和处理工作,碰到的一个问题就是简单连接Fiddler只能抓取HTTP协议,关键的登录请求等HTTPS协议都没有捕捉到,所以想让Fiddler能够同 ...
随机推荐
- 『学了就忘』Linux软件包管理 — 48、给源码包打补丁
目录 1.补丁的生成 2.补丁的打入 在以前的软件源码包,需要打补丁的时候比较多.现在的源码包很少进行打补丁了,因为根据需求安装不同的版本即可,比较商业化了.(也就是知道如何给源码包打补丁就可以了,了 ...
- 一些需要记住的linux命令
1. 系统帮助命令 ----man 2. 数据同步写入磁盘 ----sync 3. 查找文件命令 ...
- Java计算器的简易实现(+-*/)
java计算器的简易实现(+-*/) import java.util.Scanner; /* 写一个计算器 实现加减乘除四个功能 并且能够用循环接收新的数据,通过用户交互实现 写四个方法 + - * ...
- 8.2 k8s 基于StatefulSet运行mysql 一主多从 ,数据通过pv/pvc结合NFS服务器持久化
1.准备mysql和xtrabackup镜像 下载mysql官方镜像并上传到本地harbor docker pull mysql:5.7 docker tag m ysql:5.7 192.168.1 ...
- Geotools核心特点以及支持数据的格式和标准
Geotools是一个java类库,它提供了很多的标准类和方法来处理空间数据,同时这个类库是构建在OGC标准之上的,是OGC思想的一种实现.而OGC是国际标准,所以geotools将来必定会成为开源空 ...
- jupyter 远程访问
Jupyter 远程访问 jupyter 远程访问的工作方法是,在本地通过浏览器打开jupyter,但是代码和服务运行在远程集群中. 集群设置 首先需要确保集群中安装有python和jupyter. ...
- vim ——批量注释
1111. ctrl+v进入列编辑模式,在编辑模式中,在行间上下移动光标,选择需要编辑哪些行的对应的列,之后使用I(大写)进入列插入.插入注释符,按两次Esc退出列编辑模式即可实现多行注释 删除注释: ...
- Scrapy-Redis的安装和使用
Scrapy-Redis是Scrapy的分布式扩展模块,有了它,我们就可以方便地实现Scrapy分布式爬虫的搭建.GitHub:https://github.com/rmax/scrapy-redis ...
- centos 安装reids
1.安装tcl支持 yum install tcl 2.安装redis我们以最新的2.8.9为例 $ wget http://download.redis.io/releases/redis-2.8. ...
- Spark3学习【基于Java】3. Spark-Sql常用API
学习一门开源技术一般有两种入门方法,一种是去看官网文档,比如Getting Started - Spark 3.2.0 Documentation (apache.org),另一种是去看官网的例子,也 ...