前端浅谈-协议相关(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能够同 ...
随机推荐
- 菜鸡的Java笔记 第三十六 - java 函数式编程
StudyLambda Lambda 指的是函数式编程,现在最为流行的编程模式为面向对象,很多的开发者并不认可面向对象,所以很多的开发者宁愿继续使用 C 语言进行开发,也不愿意使用java,c+ ...
- 提升AI智能化水平,打造智慧新体验
内容来源:华为开发者大会2021 HMS Core 6 AI技术论坛,主题演讲<提升AI智能化水平,打造智慧新体验>. 演讲嘉宾:沈波,华为消费者AI与智慧全场景ML Kit产品总监 今天 ...
- 【Design Patterns】(1)概述
设计模式 -- 概述 2019-07-17 22:43:32 by冲冲 1. 简介 ① 设计模式 是软件开发人员在软件开发过程中,针对一般问题的最佳解决方案,该方案能够被程序员反复应用于解决类似问 ...
- gitee+typro+picgo搭建博客图床
gitee+typro+picgo搭建博客图床 前提环境 typro.picgo.nodejs 直接在官网下载即可 下载完成后,打开picgo 安装插件gitee-uploader 1.1-2即可显示 ...
- Jenkins快速上手安装
目录 环境准备 - JDK 安装 1. APT 安装 2. WAR包方式运行 3.Docker 方式运行 Jenkins 是一个独立的开源自动化服务器,可以用来自动化与构建.测试.交付或部署软件相关的 ...
- docker版本演变,安装,基本命令
1.docker 版本信息 Docker CE在17.03版本之前叫Docker Engine,版本号从0.1.0(2013-03-23)~1.13.1(2017-02-08),详见https://d ...
- CF1575G GCD Festival
\(\sum\sum gcd(i,j) \times gcd(a_i,a_j)\) 考虑枚举这个 \(gcd(i,j)\) . \(\sum_d \varphi(d)\sum_{i|d}\sum_{j ...
- Codeforces 1553I - Stairs(分治 NTT+容斥)
Codeforces 题面传送门 & 洛谷题面传送门 u1s1 感觉这道题放到 D1+D2 里作为 5250 分的 I 有点偏简单了吧 首先一件非常显然的事情是,如果我们已知了排列对应的阶梯序 ...
- Vue 中使用 TypeScript 详细总结
VUE 项目中使用 Typescript 第一节:项目起步 Vue 中使用 TypeScript 项目中主要使用到的第三方依赖 vue2 vue-class-component vue-propert ...
- [linux] 常用命令及参数-2
sort 1 sort是把结果输出到标准输出,因此需要输出重定向将结果写入文件 2 sort seq.txt > file.txt 3 sort -u seq.txt 输出去重重复后的行 4 s ...