学习扔物线进阶视频课程笔记。HTTP相关

HTTP工作原理

HTTP,HyperText Transfer Protocol超文本传输协议 ,基于TCP协议实现的一种应用层协议
客户端发送请求报文request,服务端返回响应报文response
URL格式,三部分:协议类型、服务器地址(和端口)、路径
如:https://hencoder.com/user?gender=male

报文格式

请求报文:

响应报文:

请求方法和状态码

请求方法

GET 获取资源,没有body,幂等
POST 增加或者修改资源,有body,不具有幂等性
PUT 修改资源,有body,具有幂等性
DELETE 删除资源,没有body,幂等
HEAD 使用方法和GET相同,返回响应没有body,用于获取信息(header),比如下载文件前先使用HEAD方法获取文件大小、是否支持断线续传等信息
幂等性,多次调用和一次调用结果一致

状态码

状态码,对响应结果做简单描述
1XX:临时性消息 100继续发送、101正在切换协议
2XX:成功 200 OK
3XX:重定向 301永久移动、302暂时移动
4XX:客户端错误 404找不到内容、403被禁止
5XX:服务器错误 500服务器内部错误

HEADER和BODY

HEADER是HTTP消息的元数据
Host 目标主机地址,不是用来寻址的,而是在目标服务器上用于定位子服务器的
Content-Legth 指定body的长度
Location 指定重定向的目标URL
User-Agent 用户代理,即是谁实际发送请求、接受响应,例如手机浏览器、某款手机App
Accept-Range:bytes 响应报文中出现,表示服务器支持按字节来取范围数据
Range:bytes=<start>-<end> 请求报文中出现,表示要取哪段数据
Content-Range:<start>-<end>/total 响应报文中出现,表示发送的是哪段数据
作用:断点续传、多线程下载
Cache 在客户端或者中间网络节点缓存数据,减低从服务器取数据的频率,以提高网络性能
Transfer-Encoding: chunked 分块传输编码,当响应发起时,内容长度还没能确定的情况下使用,和Content-Length不可同时使用,目的时尽早给出响应,减少用户等待,格式如下

Content-Type 指定Body的类型,主要有以下几类:text/htmlapplication/x-www-form-urlencodedmultipart/from-data application/jsonimage/jepgapplication/zip

BODY

text/html 请求web页面时返回响应的类型,body中返回html文本,格式如下:

application/x-www-form-urlencoded 普通表单,web页面纯文本表单的提交方式,格式如下:

multipart/form-data web页面含有二进制文件时的提交方式,boundary表示分界,格式如下:

application/json json格式传输文本,格式如下:

image/jpeg application/zip 单文件,格式如下:

RESTful api

RESTful api,即正确使用HTTP规范实现的接口,包括以下:
使用资源的格式来定义URL
规范地使用method来定义网络请求操作
规范地使用status code来响应状态
其他符合HTTP规范的设计准则

编码、加密、hash、序列化和字符集

对称加密和非对称加密

对称加密
通信双方使用同一个秘钥,使用加密算法配合秘钥来加密,解密时使用加密过程的完全逆过程来进行解密。经典算法有DES、AES。
作用:加密通信,防止信息在不安全网络上被截获后,信息被人读取或篡改
缺点:不能在不安全网络上传输秘钥,一旦秘钥泄露则加密通信失败

非对称加密
原理:使用公钥对数据进行加密得到密文,使用私钥对密文进行解密得到原数据。使用的是复杂的数学技巧实现,经典算法有RSA(可用于加密和签名)、DSA(仅用于签名,但速度更快)
使用非对称加密通信,可以在不可信网络上将双方的公钥传给对方,然后在发消息前分别对数据使用对方的公钥来加密和使用自己的私钥来签名,做到不可信网络上的可靠秘钥传播及加密通信

私钥和公钥互相可解,因此非对称加密还可以用于数字签名,通常会对原数据hash以后签名,然后附加在原数据的后面作为签名,为了让数据更小

优缺点:优点:可以在不安全网络上传输秘钥。缺点:计算复杂,因此性能相比对称加密差很多
破解思路,穷举法找到一个私钥,可以解密所有经过公钥加密过的密文

Base64

将二进制数据转换成由64个字符组成的字符串编码算法。
算法:将原数据每6位对应成Base64索引表中的一个字符编排成一个字符串(每个字符串8位)
用途:使用文本形式传输文件、图片
缺点:数据量会增大,所以会影响存储和传输性能

压缩和解压缩

压缩:将数据使用具有存储优势的编码算法进行编码
解压缩:将压缩数据解码还原成原来的形式
目的是减少数据占用的存储空间,常见压缩算法DEFLATE、JPEG、MP3
有损压缩:压缩后数据有损失,无法完全恢复成原数据,不可逆。媒体数据(音视频、图片)跟感官交互的数据,是接受有损压缩的。

序列化

把数据对象(一般是内存中,例如JVM中的对象)转换成字节序列的过程。对象在程序内存里的存放形式是散乱的,通过序列化可以把内存中的对象转换成一个字节序列,从而使用byte[]等形式进行本地存储或网络传输,在需要的时候重新组装(反序列化)来使用
目的:让内存中的对象可以存储和传输

Hash哈希

把任意数据转换成指定大小范围的数据。相当于从数据中提出摘要信息,主要用途是数字指纹。经典算法MD5、SHA-1、SHA-256
用途:数据完整性验证(下载文件时确认文件是否有损坏)、快速查找(HashMap)、隐私保护(用户密码保存hash值)
破解:彩虹表,将常见密码生成密码和hash值的映射
反破解:加盐,保存Hash(密码+盐)

登录和授权

http中确认授权(或登录)的两种方式
1.通过Cookie
2.通过Authorization Header

Cookie工作机制
服务器需要客户端保存的内容,放在Set-Cookie header里面返回,客户端自动保存
客户端保存的Cookie,会在之后的所有请求里都携带进Cookie header里面发送给服务器
客户端保存Cookie是按照服务器域名来分类的
客户端保存的Cookie在超时后会被删除,没有设置超时时间的Cookie在浏览器关闭后会自动删除,服务器也可以主动删除还未过期的客户端Cookie

Cookie的作用
会话管理:登录状态、购物车
个性化:用户偏好、主题
Tracking:分析用户行为

Authorization

两种主流方式:Basic和Bearer

Basic
格式:Authorization:Basic <username:pwd(Base64ed)>

Bearer
格式:Authorization:Bearer<bearer token>
OAuth2流程,第三方App通过微信登录的流程就是一个OAuth2流程
0.第三方App向腾讯申请授权合作,拿到client id和client secret
1.用户在使用第三方App时,点击【通过微信登录】,第三方App将使用微信SDK跳转到微信,并传入自己的client id作为自己的身份标识
2.微信通过和服务器交互,拿到第三方app的信息,并显示在界面中,询问用户是否同意授权该app使用微信来登录
3.用户点击【使用微信登录】后,微信和服务器交互将授权信息提交,然后跳转回第三方app,并传入Authorization code作为用户认可的凭证
4.第三方app调用自己服务器api,传入Authorization code
5.服务器使用Authorization code去向微信的第三方授权接口发送请求,将Authorization code和自己的client sceret传给微信服务器,微信服务器验证通过后,返回access token
6.服务器收到access token后,向微信的用户信息接口发送请求,微信服务器验证通过后,返回用户信息
7.服务器收到用户信息后,保存信息到数据库,并将用户id和用户的微信id做关联
8.用户创建后,服务器向客户端app的请求发送响应,传回用户信息
9.客户端收到服务器响应,登录成功

Refresh token
三方登录时服务器返回refresh token和access token以及有效时间,当access token失效后,使用refresh token获取新的access token
目的:安全。当access token失窃,由于有失效时间,所以别人只能在一定时间内使用access token,同时由于refresh token值存在于第三方服务的服务器中,因此refresh token几乎没有失窃的风险

TCP/IP协议族

TCP/IP指一系列协议所组成的网络分层模型
为什么需要分层?因为网络不稳定

分层:
应用层:HTTP、FTP、DNS
传输层:TCP、UDP
网络层:IP
数据链路层:以太网、wifi

连接:通信双方建立确认可以通信,不会将对方的消息丢弃,即为建立连接
长连接:网络是连接在运营商的内网,不具有真正的公网IP,因此当某个TCP连接在一段时间不通信之后,网关会出于网络性能考虑而关闭这条TCP连接和公网的连接通道,导致这个TCP连接被动关闭。使用心跳的方式保持长连接。

简述 TCP 连接建立时的「三次(三向)握手」
简述 TCP 连接关闭时的「四次挥手」
为什么 TCP 连接在断开时是四次挥手而不是三次?

HTTPS

HTTPS,全称HTTP over SSL,即工作在SSL上的HTTP,就是加密通信的HTTP
工作原理:在客户端和服务器之间使用非对称加密协商出一套对称秘钥,每次发送消息之前将内容加密,收到之后解密,达到数据的加密传输
为什么不直接用非对称加密?是因为非对称加密计算复杂,会影响网络通信的性能

HTTPS连接建立过程

1.Client hello C->S 可选的TLS版本、可选的加密套件、客户端随机数
2.Server Hello S->C TLS版本、加密套件、服务器随机数
3.服务器证书信任建立 S->C
4.Pre-master Secret C->S 使用服务器公钥加密
5.客户端通知:将使用加密通信 C->S
6.客户端发送:Finished C->S
7.服务器通知:将使用加密通信 S->C
8.服务器发送:Finished S->C

证书验证过程
服务器发送自己的证书链到客户端(带有服务器的公钥、域名)
公钥+签名+证书签发机构公钥+签名... ... 根证书(操作系统自带)