当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)的更多相关文章

  1. 前端浅谈-协议相关(DNS协议)

    从应用层到实体层的协议太多了,我们并不能一一涉及,目前来说就打算整理可能会与前端相关的协议. 前端面试常会问到一个问题-"从输入一个url到页面渲染经历了哪些过程".这其实是一个相 ...

  2. 前端浅谈---协议相关(TCP连接)

    TCP连接 http的描述里面,我弱化了交互过程的描述,因为它相对复杂.所以我在此单独描述.客户端和服务端传递数据时过程相对谨慎和复杂,主要是开始和结束的过程.而这整个过程就是TCP连接.连接流程大体 ...

  3. 浅谈协议(四)——wireshark强力解析视频流协议

    参考链接: https://wenku.baidu.com/view/460f016e49d7c1c708a1284ac850ad02de800722.html https://wenku.baidu ...

  4. 浅谈协议(二)——视频流协议 [RTP/RTCP/RTMP/HTTP_FLV]

  5. Web 前端 - 浅谈外部手动控制 Promise 状态

    前言 当有多个共享资源.协同操作的时候,往往需要根据动态亦或是复杂的条件以控制和调用程序逻辑. 还是那句话,懂的人自然懂,不懂的人也搜不到这个随笔. 设计 PendingPromise<T> ...

  6. 前端浅谈-Js的组成

    这里主要想详细的分析一下浏览器渲染过程,但东西比较多.所以分成多个部分. JS由三个部分组成,分别为ECMAScript.BOM.DOM. 其中BOM是浏览器层面的东西,而DOM是页面层面的东西.简单 ...

  7. 浅谈HTTPS以及Fiddler抓取HTTPS协议

    最近想尝试基于Fiddler的录制功能做一些接口的获取和处理工作,碰到的一个问题就是简单连接Fiddler只能抓取HTTP协议,关键的登录请求等HTTPS协议都没有捕捉到,所以想让Fiddler能够同 ...

  8. 浅谈HTTPS以及Fiddler抓取HTTPS协议(摘抄)

    一.浅谈HTTPS 我们都知道HTTP并非是安全传输,在HTTPS基础上使用SSL协议进行加密构成的HTTPS协议是相对安全的.目前越来越多的企业选择使用HTTPS协议与用户进行通信,如百度.谷歌等. ...

  9. 【转载】浅谈HTTPS以及Fiddler抓取HTTPS协议

    最近想尝试基于Fiddler的录制功能做一些接口的获取和处理工作,碰到的一个问题就是简单连接Fiddler只能抓取HTTP协议,关键的登录请求等HTTPS协议都没有捕捉到,所以想让Fiddler能够同 ...

随机推荐

  1. 『学了就忘』Linux软件包管理 — 48、给源码包打补丁

    目录 1.补丁的生成 2.补丁的打入 在以前的软件源码包,需要打补丁的时候比较多.现在的源码包很少进行打补丁了,因为根据需求安装不同的版本即可,比较商业化了.(也就是知道如何给源码包打补丁就可以了,了 ...

  2. 一些需要记住的linux命令

    1. 系统帮助命令                      ----man 2. 数据同步写入磁盘               ----sync 3. 查找文件命令                  ...

  3. Java计算器的简易实现(+-*/)

    java计算器的简易实现(+-*/) import java.util.Scanner; /* 写一个计算器 实现加减乘除四个功能 并且能够用循环接收新的数据,通过用户交互实现 写四个方法 + - * ...

  4. 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 ...

  5. Geotools核心特点以及支持数据的格式和标准

    Geotools是一个java类库,它提供了很多的标准类和方法来处理空间数据,同时这个类库是构建在OGC标准之上的,是OGC思想的一种实现.而OGC是国际标准,所以geotools将来必定会成为开源空 ...

  6. jupyter 远程访问

    Jupyter 远程访问 jupyter 远程访问的工作方法是,在本地通过浏览器打开jupyter,但是代码和服务运行在远程集群中. 集群设置 首先需要确保集群中安装有python和jupyter. ...

  7. vim ——批量注释

    1111. ctrl+v进入列编辑模式,在编辑模式中,在行间上下移动光标,选择需要编辑哪些行的对应的列,之后使用I(大写)进入列插入.插入注释符,按两次Esc退出列编辑模式即可实现多行注释 删除注释: ...

  8. Scrapy-Redis的安装和使用

    Scrapy-Redis是Scrapy的分布式扩展模块,有了它,我们就可以方便地实现Scrapy分布式爬虫的搭建.GitHub:https://github.com/rmax/scrapy-redis ...

  9. centos 安装reids

    1.安装tcl支持 yum install tcl 2.安装redis我们以最新的2.8.9为例 $ wget http://download.redis.io/releases/redis-2.8. ...

  10. Spark3学习【基于Java】3. Spark-Sql常用API

    学习一门开源技术一般有两种入门方法,一种是去看官网文档,比如Getting Started - Spark 3.2.0 Documentation (apache.org),另一种是去看官网的例子,也 ...