认识HTTP | 青训营

173 阅读5分钟

什么是HTTP: image.png 在网络7层协议中,HTTP属于TCP及应用层协议,也是一种面向对象的协议。其全称为超文本传输协议,超文本包括多种内容,比如:JS、CSS、HTML

HTTP的语义简单,扩展性强,并且为无状态协议,即接收方不得保留先前请求的会话状态。

http请求过程:验证---请求头---请求主体---响应头---响应主体---断开连接

HTTP的发展:

0.9:只允许客户端发送GET这一种请求,只支持html

1.0:有身份认证,三次握手; 响应对象以一个响应状态行开始;支持更多文档类型;增加了Header

1.1:请求头和响应头都增加Cache-Control,有缓存功能;请求通过的TCP链接可以复用

2:采用二进制格式传输、压缩Header;用帧作为通信最小单位以提升效率和稳定性,一系列帧形成一个消息;在客户端及服务器之间创建双向数据流,可以承载多条消息;

建立的连接都是永久的,仅需要每个来源一个连接;可以控制数据的传输量。

3:基于QUIC(UDP)的协议

https: 在http协议的基础上添加了数据加密,使数据传输的安全性更高。

      对称加密:加密和解密使用相同秘钥

      非对称加密:通过加密算法得到密钥对,加密需要公钥,解密需要私钥

协议报文: image.png 安全类型

Safe:不会修改服务器数据的方法都是安全的方法e.g.GET、HEAD、OPTIONS

Idempotent(幂等):同样的请求被执行一次与多次的效果相同,服务器的状态也相同

      e.g.GET、HEAD、OPTIONS、PUT、DELETE

状态码

服务器返回客户端时的状态响应 image.png RESTful API接口:一种API设计风格(增删查改数据,请求响应数据)

随着人们对Web应用的使用需求日益增加,客户端的种类出现多元化,而客户端和服务端就需要接口进行通信,但接口的规范性就又成了一个问题

因此,一套结构清晰、符合标准、易于理解、扩展方便让大部分人都能够理解接受的接口风格就显得越来越重要,而RESTful风格的接口(RESTful API)刚好有以上特点,就逐渐被实践应用而变得流行起来。

特点:

1.每个URI代表一个资源

2.客户端与服务器传递资源的某种表现层

3.客户端可通过协议method对服务器资源进行操作,实现“表现层状态转化” image.png 请求报文:由请求行+请求头+请求体组成 image.png 请求头为发出的请求,对应为响应报文的响应头

缓存

1.强缓存:时间戳、可缓存性、何时到期、重新加载/验证Cache数据

2.协商缓存:查看资源的标识符e.g.ETag、最后的修改时间e.g.Last-Modified

cookie

和缓存相似,都是为了提高网站性能并通过在客户端机器上存储一些数据来创建额外的可访问性。Cache 和 Cookie 的主要区别在于,Cache 用于在浏览期间存储在线页面资源,以便长期使用或减少加载时间。而Cookies 用于存储用户选择,例如浏览会话以跟踪用户偏好。

场景分析

1.打开chrome

2.输入网址

3.打开控制台

l  右键->检查

l  F12

4.切换到network

5.静态资源场景/登录后场景

静态资源

静态资源方案:缓存+CDN+文件名hash

CDN:内容分发网络

通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务

Q:如何确保静态资源的更新?怎么保证用户在刷新文件的时候是最新的文件?

A:更改分发的文件名,令缓存无法匹配,即用户强制更新资源,如文件名+hash,或者通过react及vue更改版本号。

跨域

如果输入的域名和实际请求的域名不同,服务器会返回options方法,而不是希望的POST请求

解决方案:

1.CORS(Cross-Origin Resource Sharing)方法

  • 预请求:获知服务端是否允许该跨源请求(复杂请求)

  • 相关协议头

2.代理服务器

  • 同源策略是浏览器的安全策略,不是HTTP的,因此可以在相同域名下放置代理服务器,进行接收转发的功能

3.    Iframe通信:限制较多不建议使用

 

场景分析-登陆

1.向目标域名使用了POST方法

2.请求中携带的信息

  • Post body,数据格式为form

  • 希望获取的数据格式为json

  • 已有的cookie

返回的信息

  • 数据格式json

  • Cookie的信息

 

鉴权

-Session+Cookie

登录时服务器会生成Session并把登录信息存储起来,并生成和返回cookie给客户端,浏览器下次访问时可以借助cookie调用服务器中的登录信息,直接登录。

-JWT(JSON web token)

 将token存储在浏览器中,下次发送请求时会向服务器发送token,服务器会对token运行解密函数,验证是否已经登录

 

跨域登录

  在一个企业下的多个子网站中,只要登陆了其中一个网页,其他所有相关页面都会显示已登录状态。

-SSO:单点登录

 在用户发送网站访问请求后,客户端会同时进行服务端和SSO的登录凭证查询,如果两者皆为非登录态,用户才需要进行登录。网站的登录凭证和SSO的登录凭证是两个独立的凭证。

 当用户在某个网站使用登录框登录后,SSO域就会注册一个SSO的登录凭证给客户端。当客户端在其他域名向SSO域发送该SSO凭证后,SSO域会向客户端返回相应网站服务端的登录凭证(cookie/token等),客户端将会用SSO返回的cookie/token重新访问网站服务端以获取登录态。