http/https

ISO 国际标准化组织

OSI 由ISO发布的网络互联模型,分7层

应用层(应用层、表示层、会话层) http/https协议

传输层 tcp协议-主要解决如何可靠的传递数据

网络层 ip协议-主要解决网络路由和寻址问题

数据链路层

物理层

http请求报文 = 请求行 + 请求头(header) + 请求体(body)

http请求行详解

①POST ②/users ③HTTP/1.1

①是请求方法,HTTP/1.1 定义的请求方法有8种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE,最常的两种GET和POST,如果是RESTful接口的话一般会用到GET、POST、DELETE、PUT

②为请求对应的URL地址,它和请求头的Host属性组成完整的请求URL

③是协议名称及版本号

http响应行

①HTTP/1.1  ②200  ③OK

②为状态码

③为状态码的文本描述

各种请求方法的含义

幂等性:同一个请求无论调用多少次,效果一样,或者说与第一次一样

GET 不发送body,不修改服务器数据,幂等

POST 发送body,增加/修改数据

PUT 发送body,修改数据,幂等

DELETE 不发送body,删除数据,幂等

HEAD 同GET,但是返回数据中无body,用于下载文件前获取文件大小,幂等

关于HTTP请求GET和POST的区别

1.GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头<request-line>中),以?分割URL和传输数据,多个参数用&连接;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

POST提交:把提交的数据放置在是HTTP包的包体<request-body>中。

因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变

2.传输数据的大小:

   首先声明,HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。 而在实际开发中存在的限制主要有:

   GET:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。

   因此对于GET提交时,传输数据就会受到URL长度的限制。

   POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。

3.安全性:

    POST的安全性要比GET的安全性高。比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存, (2)其他人查看浏览器的历史记录,那么别人就可以拿到你的账号和密码了

状态码的意义

1xx 临时消息 100服务器已接受请求,客户端可以继续操作,比如上传文件  101告诉客户端支持http2

2xx 成功 200请求成功 201创建成功

3xx 重定向  告诉客户端重新请求新的url

4xx 客户端错误 400请求无效 401需要授权 403禁止访问这个地址 404找不到地址/资源 405禁止访问这个资源 408超时

5xx 服务器错误 

header和body详解 各header对应的功能

Body是传输的数据,header是用来描述body数据的数据,叫meta data(元数据)

Host: twitter.com    //目标地址,用于在目标服务器上定位子服务器

Content-Type: application/json  //body的类型

Content-Length:2300  //body的长度

Location  //重定向的url

User-Agent  //用户代理,用来标识设备/浏览器的类型

Accept-Range: bytes  //响应报文中出现,表示服务器支持按字节来取范围数据

Range: bytes=<start>-<end>  //请求报问中出现,表示要取哪段数据

Content-Range:<start>-<end>/total  //响应报文中出现,表示发送的是哪段数据

Accept: text/html  //客户端能接受的数据类型

Accept-Charset: UTF-8  //客户端接受的字符集

Accept-Encoding: gzip  //客户端接受的压缩编码类型

Content-Encoding:gzip  //压缩类型

Cookie。//发送 Cookie

Set-Cookie  //设置 Cookie

Authorization  //授权信息

Cache-Control

no-cache:   //服务器告诉 Client 端,该内容可以缓存,但是再次请求的时候服务器需要知道缓存的内容是否失效

no-store:   //不许缓存

max-age:   //在失效日期内,Client 端随意访问

cache和buffer区别 rest到底是什么

Cache是保存以后很可能还会用到的数据

Buffer是在生产与消费过程中,存储没来得及消费的数据

Rest是一种架构风格,是基于HTTP协议的,可以理解称一种API的规范,比如查询都是GET请求,新增都是POST,修改是PUT,删除是DELETE等

编解码的含义

将数据从一种格式转换成另一种不同的格式,并且可以再转换回来,内容不变

Base64含义 用途 缺点  变种

Base64是一种编码算法,码表由64种字符组成,A-Z a-z 0-9 +/ 

用来将二进制数据(非文本数据)转换成字符串,方便传输、保存,比如用于url

缺点是数据会变长,且不具备加密效果

Base58 去掉了 IO io +/ ,方便手抄,用于比特币等领域

url %编码

浏览器地址不支持中文,所以使用“%编码”将中文转换成其它字符

压缩与解压缩的含义 目的 算法 和编解码的关系

压缩是将数据转换成另一种格式,以减少存储空间,解压缩可以将数据还原,所以本质上还是属于编解码

图片、音视频 编解码的含义 目的 算法

图像、音视频数据在计算机领域都是二进制数据,对其编码后就是常见的jpg、mp3、mp4等编码格式,使用时会将他们解码成原始数据

序列化 的含义 目的 算法

序列化是将虚拟内存中的对象数据,转换成一种可以存储/传输的格式,比如json、xml,方便存储和通信传输

对称加密

常见的有AES

非对称加密

用来签名和加密,常见的有DSA(只用来签名,签名和验证非常快)、RSA(签名、加密都可以)

签名时,是使用自己的私钥签名,对方收到数据后用公钥验证

加密时,是使用对方公钥加密,对方收到数据后使用私钥解密

Hash的定义 作用 实际用途 与编码和加密的关系

将任意数据转换成一段固定长度的很短的数据,也就是“摘要”,可以用来做完整性验证、签名,常见的有MD5、SHA1、SHA256,摘要算法用来加密不是绝对安全的,可以被还原,“加盐”(原数据追加随机数并保存)也只是提高了难度,使用时需要注意场景

理论上hash之后不能还原,所以不属于编码。做数据签名时,如果直接对原数据签名,数据量太大,传输成本高,所以先用hash算法做数据摘要,再将摘要进行签名(签名过程采用非对称加密)

字符集和编码的关系

字符集(Charset):是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。

字符编码(Character Encoding):将字符集中的文字和符号转换成计算机可以识别的数

常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。ASCII只能用于现代美国英语,所以被Unicode(统一码)代替。

登录与第三方授权的区别 http确认授权的2种方式

待学习

Cookie的原理和工作方式

待学习

Authorization首部的原理和工作方式

待学习

Tcp/ip协议族的概念 分层图解 各层含义

应用层、传输层、网络层、数据链路层、物理层

什么是tcp连接、建立与关闭

Tcp是面向连接的,传输之前需要先建立端到端的连接

Tcp传输的单位是tcp报文,格式如下

序列号:因为在TCP是面向字节流的,他会将报文度分成一个个字节,给每个字节进行序号编写,比如一个报文有900个字节组成,那么就会编成1-900个序号,然后分几部分来进行传输,比如第一次传,序列号就是1,传了50个字节, 那么第二次传,序列号就为51,所以序列号就是传输的数据的第一个字节相对所有的字节的位置。

确认应答:如刚说的例子,第一次传了50个字节给对方,对方也会回应你,其中带有确认应答,就是告诉你下一次要传第51个字节来了,所以这个确认应答就是告诉对方要传第多少个字节了

首部长度:就是首部的长度,

保留:给以后有需要在用,这个保留的位置放的东西是跟控制位类似的

控制位:目前有的控制位为6个

URG:紧急,当URG为1时,表名紧急指针字段有效,标识该报文是一个紧急报文,传送到目标主机后,不用排队,应该让该报文尽量往下排,让其早点让应用程序给接受。

ACK:确认,当ACK为1时,确认序号才有效。当ACK为0时,确认序号没用

PSH:推送,当为1时,当遇到此报文时,会减少数据向上交付,本来想应用进程交付数据是要等到一定的缓存大小才发送的,但是遇到它,就不用在等足够多的数据才向上交付,而是让应用进程早点拿到此报文,这个要和紧急分清楚,紧急是插队,但是提交缓存大小的数据不变,这个推送就要排队,但是遇到他的时候,会减少交付的缓存数据,提前交付。

RST:复位,报文遇到很严重的差错时,比如TCP连接出错等,会将RST置为1,然后释放连接,全部重新来过。

SYN:同步,在进行连接的时候,也就是三次握手时用得到,下面会具体讲到,配合ACK一起使用

FIN:终止,在释放连接时,也就是四次挥手时用的。

三次握手

同时发起连接时

四次挥手

同时关闭连接时

什么是tcp长连接、为什么需要长连接、如何实现

首先纠正一点,http“连接”的说法是不恰当的,http在应用层,并没有“连接”这一说法,真正负责连接的是传输层的tcp,应该叫tcp连接。

一般的tcp连接,在数据传输完之后会断开,是短连接。但是在频繁传输数据的时候,重复建立连接、断开连接会消耗资源和时间,这时就需要保持tcp连接一段时间,直到一定时间内没有请求才会超时断开。

通过在http header中添加 Connection:keep-alive实现,可以指定超时时间,http1.0只有短连接,http1.1默认开启长连接,并设置了超时时间,操作次数限制

长连接用于操作频繁,点对点通讯,连接数不多的情况,例如数据库

短连接用于并发量大,无需频繁操作的情况,例如http服务

Https 定义、 工作原理、 TLS建立的完整过程 

Hyper Text Transfer Protocol over SecureSocket Layer,建立在安全socket层次上的超文本传输协议,可以认为HTTPS = HTTP+SSL。HTTPS与HTTP、TCP的关系如下:

SSL/TLS层次和TCP很类似,双方建立TCP连接之后,需要再建立安全连接。与TCP连接一样,SSL连接本质上,是对双方安全信息的记录,并不是一个真正意义上的连接。HTTP通过安全连接,即可与目标主机进行安全的通信,不怕被监听、篡改、冒充身份。

https工作原理

1.为啥用https?

http使用明文传输,容易被窃取和篡改;

https会对数据进行加密,传输的是密文,更加安全

2.使用对称加密?

NO,密钥很容易被盗取

3.使用非对称加密?

NO,效率低

4.最佳方案?

两者结合,服务端持有私钥,访问端持有公钥,随机生成一个“密钥”,双方通过非对称加密传输数据,协商好“密钥”后,就可以放心进行对称加密了。

5.访问端的公钥怎么来的?

首先访问端可能是浏览器,也可能是客户端,浏览器不可能事先保存所有网站的公钥,客户端也不可能把公钥写进代码,很容易被反编译拿到,所以这个公钥应该是由服务器返回的,而且还能动态更新。

但是服务器返回的公钥有被篡改的风险,访问端一旦使用了假的公钥进行加密,传输的数据就能被人以假的私钥解密。

6.那么如何保证公钥的正确性?

访问端判断不了公钥是否正确,因此需要引入第三方来帮助判断,也就是CA机构(数字证书认证机构)。具体原理是这样的:

1、服务器相关人员拿着公钥和money去向CA机构申请证书

2、CA机构将公钥、域名、有效期等信息,通过CA机构自己的私钥进行加密,加密后的数据就是证书,交给服务器保管好

3、访问端向服务器发起https连接时,服务器将证书传送到访问端

4、访问端使用自己内置的CA机构公钥(浏览器、pc、手机等都会在系统预置所有CA机构的公钥)对证书进行解密,如果解密成功,且解析出的域名与正在访问的域名一致,就拿到了正确的公钥,否则验证证书失败并断开连接

5、拿到公钥之后进行协商密钥,传输数据等流程..

TLS建立过程

1、客户端请求服务器建立安全连接,附加客户端支持的SSL与TLS版本、支持的加密算法版本、随机数。

加密算法与安全协议版本有很多,但服务不一定支持最新版本的协议预算法。所以客户端把所以支持的版本发送给服务器,让服务器去选择。

随机数非常重要,前面讲hash算法的时候讲到,随机数是一个动态因子,让hash算法更加安全。同时,随机数也参与了对称密钥的生成。

2、服务器响应请求,附加选择的协议版本、加密算法版本、服务器随机数。

服务器从客户端支持的协议版本中,选择一套自己最喜欢的。

为了辨别消息是由哪一方加密并发出的,需要准备两个对称密钥。因此服务器也需要产生一个随机数。

3、服务器向客户端发送证书。

服务器向客户端发送自己证书,其中就包含了服务器的公钥。

4、服务器发送hello done表示hello阶段结束。

5、客户端验证证书,拿到服务器公钥;利用两个随机数,生成pre-master secret,并使用服务器的公钥加密发送给服务器。

pre-master secret是一个非常重要的东西,双方利用pre-master secret生成master-secret,利用前面的两个随机数生成两个对称加密密钥和两个HMAC密钥,两对密钥分别用于客户端加密和服务器加密。

6、客户端发送changeCipherSpec提示服务器此后使用pre-master secret产生的密钥加密通信。

7、客户端发送FIN报文,表示结束。

8、服务器也发送changeCipherSpec报文。

9、服务器也发送FIN报文,表示结束。

10、双方可以开始安全通信了。

至此,对于HTTPS的加密流程,已经比较清晰了。

HTTPS要解决的就是计算机网络中的安全问题,不同问题的解决方法要清楚:

防止消息监听:加密

防止消息篡改:hash算法

验证身份:数字证书

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值