HTTP
HTTP基本概念
HTTP(超文本传输协议):HTTP是在计算机世界中两点之间传输文字、图片、视频等超文本内容数据的约束与规范。
常见状态码:
2xx:报文被收到,已经在正确处理中。
3xx:重定向,资源位置发生改变,需要客户端重新发请求。
4xx:客户端错误,请求报文有问题,服务器无法处理。
5xx:服务器错误,服务器在处理内部请求时发生了错误。
HTTP常见字段
Host:客户端发送请求时用来寻找服务器的域名(域名通过DNS解析找到服务器IP,到达服务器后通过host找到需要在服务器中访问的网址)
Content-Length:表示响应的长度。HTTP请求通过回车符作为header的结束,通过Content-Length作为body的结束。
Content-Type:服务器向客户端返回值时,告诉客户端返回的格式是什么,例如UTF-8。这个值可以通过response.setHeader("Content-Type", "text/html;charset=UTF-8");
Connection(设置为Keep-Alive):表示开启HTTP长连接,只要客户端或者服务器某一端不提出断开连接的请求,那么TCP就不会断开连接。但是在HTTP2的时候已经是默认长连接了。
GET与POST
GET:在RPC的定义下,GET请求主要是从服务器中获取指定资源。
POST:在RPC的定义下,POST请求主要是从服务器中修改指定资源。
GET与POST是安全或者是幂等的吗?
GET请求:获取指定资源是一个查询操作,所以不论是请求一次还是一万次他都是同一个值,所以GET请求时安全并且幂等的操作。因为多次操作获取值是相同的,所以GET请求的返回值是会被浏览器进行缓存。
POST请求:修改指定资源,他可能是一个新增或者提交操作,所以多次请求他就会新增多条数据,那么他就不是幂等的操作。而POST请求不会被浏览器进行缓存。
HTTP缓存技术
当多次请求返回值都一样时,浏览器会将结果存储到浏览器中,这样就不需要去请求服务器了。缓存方式分为:强制缓存和协商缓存。
强制缓存:
强制缓存指只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存,决定是否使用缓存的主动性在于浏览器这边。
https://i-blog.csdnimg.cn/direct/a7a3dd4217624473a552206e76d5dbb8.png" width="812" />
当浏览器第一次请求服务器时,如果服务器在response中添加了Cache-Control字段设置浏览器强制缓存时间。下次请求时,先判断Cache-Control到期时间,如果没到期直接从缓存中获取数据。服务器再次获取该请求时会再次设置Cache-Control时间。
协商缓存:
协商缓存就是与服务端协商过后,通过服务端告诉你是否可以使用本地缓存。服务器会响应一个304告诉客户端可以使用本地缓存。
https://i-blog.csdnimg.cn/direct/77ff8adc71af4df6b21a99c2b6935b72.png" width="778" />
响应头部,包含Etag存储资源唯一标识。请求头部包含if-none-match,当资源过期时会将if-none-match值设置为Etag,判断资源是否发生变化,如果不变化返回304继续使用缓存,变化返回200重新加载资源。
这种方式的优势,解决没有修改文件内容,修改时间改变问题、修改在秒级以下也能监控。所以Etag优先级比根据资源修改时间判断的优先级更高。
协商缓存这两个字段都需要配合强制缓存中 Cache-Control 字段来使用,当强制缓存没有命中之后,才会跟服务器之间进行协商缓存
https://i-blog.csdnimg.cn/direct/813724b2245949868ac7452d027b68df.png" width="838" />
HTTP1.1的特性
优点:HTTP的优点就是简单,报文通过key-value的形式存在在header或者body里面。同时他位于OSI协议的最顶层,他的下层有更高的灵活性,例如HTTPS便是在HTTP与TCP加入了SSL/TLS安全协议。HTTP广泛的使用,不论手机端还是PC端都是通过HTTP进行请求。
缺点:HTTP的两大缺点,无状态(需要重复验证)与明文传输(不安全)。
无状态:
无状态的好处就是服务器可以不用处理更多资源,坏处在于关联操作时每次都需要进行验证(登录->加入购物车->下单->支付。每个过程都需要验证身份信息)。我们通过Cookie(服务器发给浏览器一个凭证)可以解决这个问题。
明文传输:
HTTP的信息不安全,写在url上或者Body里面,通过抓包就可以获取数据了。HTTPS通过SSL/TLS安全协议对数据进行加密解决该问题。
HTTPS与HTTP
HTTPS对比HTTP的主要改变就是变的更加安全,通过在TCP协议中添加SSL/TLS协议从而进行信息加密、校验机制、身份证书解决了安全问题。
HTTPS通过对称加密(只使用公钥验证)+非对称加密(公钥私钥一起验证)、摘要算法+数字签名、数字证书(权威机构申请)三种方式共同保证HTTPS的安全性。
HTTP1.0/1.1/2的演变
HTTP1.1对比HTTP1.0的优势是支持长连接、管道。
HTTP2(基于HTTPS)对比HTTP1.1的优势是数据安全,性能上支持二进制格式、并发传输、服务器推送。
TCP
三次握手四次挥手
三次握手(客户端与服务端状态变化也需要牢记):
https://i-blog.csdnimg.cn/direct/5b1849bee40c4fb8a13c0b55f9e05657.png" width="727" />
为什么不是是两次握手
两次握手会导致历史连接,避免资源的浪费。理论上三次连接就能避免任何问题,所以不需要四次连接。
2.25分讲解什么是历史连接
TCP如何解决丢包问题与乱序问题
https://i-blog.csdnimg.cn/direct/5874e07bccc147b8859e4bd88f224284.png" width="1075" />
四次挥手
https://i-blog.csdnimg.cn/direct/d3cbd5cc9f1e4285ac3055096c15565b.png" width="1200" />
为什么要有超时等待状态?
因为当在第四次挥手时,如果ACK包发送失败,而客户端已经关闭。那么服务端将一直处于最后确认状态。所以,超时等待状态是为了预防ACK包发送失败所设置的状态。