http 整体梳理体系

###http - Hyper Text Transfer Protocol

### 内容

客户端 => 服务端

### 基础请求 - 请求标头 - 报文主体

* 基础请求: url | method | dest

* 请求标头: 配置 + 拦截器 => 权限、身份

1. Accept - 请求内容的期望格式类型

text/ 

        html:HTML格式/ plain: 纯文本格式 / xml: XML 格式

image/

        gif:gif 格式 / jpeg:图片格式 /png:png格式

video/

        mpeg/ quicktime

application /

        xhtml+xml / atom+xml /json /pdf / msword /x-www-form-urlencoded

2. Accept-Encoding - 期望返回内容被压缩

gzip,deflate , br

表示请求的返回希望被压缩 => 减少网络流量,提升性能。

追问:

a. 要求而非强制,如果服务端不支持或者未开启压缩,则不起作用

b. 服务端支持压缩,或者开启压缩。会在响应头中Content-Encoding:gzip

3.Accept-Language - 浏览器所支持的语言 => 国际化、多语言包

zh - 表示中文;zh-cn 表示简体中文;en、fr

4. Connection - TCP信道的连接 keep-alive(1.1之后默认)/ close

追问:

标识位置?connectionId - 代表单个请求新建立的信道索引 => 信道的建立与并发控制

5.Cookie - 缓存形式

=>追问方向:

a. 几种缓存的对比 - cookie vs  localStorage vs sessionStorage

大小:storage >> cookie 

性能:cookie每次请求都会携带,影响性能  => 网络性能优化?

跨域: cookie 无法跨域调用,需要指定一个作用域  => 跨域问题?

跨tab共享:sessionStorage - 不支持;localStorage - 同源窗口共享;cookie - 同源窗口共享;

时效性:session - 当前页面;local - 跟随浏览器;cookie - 服务端设置的过期时间

支持监听:session - 不支持跨页面,支持监听;local - 支持跨页面监听;cookie - 不支持

window.addEventListener('storage',e=>{})

=> 性能监控?

6.Referer - 当前请求资源地址

7.User-Agent - 用户侧信息

追问:

可以获取到用户的内容:操作系统/ 版本 、浏览器 / 版本 、设备信息(移动端)/ 版本

用其做兼容性判断

websocket => 扫码 => 性能问题:持续连接,需要销毁

8.Sec-Fetch-Dest \ Sec-Fetch-Mode \ Sec-Fetch-Size

a. mode - 请求的模式

    cors:跨域请求

    no-cors:限制请求

    same-origin:同源请求

    navigate:浏览器切换页面行为

    websocket:建立websocket连接

b. dest - 请求目的地,如何使用获取的数据

    empty / iframe / font / image /

c.site - 请求发起者和资源之间的关系

    cross-site:跨域请求

    same-origin:发起方和目标一致

    none

8.q=0.01 - 参数优先级

追问:

a.q越高代表优先级越高 0<= q <= 1 [0,1]

b.默认不写,优先级q=1

c.;q=0.01

#####预检请求 & 跨域请求

非简单请求的CORS请求,会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight)。

*什么是跨域?

“域”(Origin)浏览器地址栏中的主机地址

"跨域" - 当前网页应用请求的主机地址与本浏览器中主机地址不同

=>服务器会做http转发会存在跨域问题吗?不会,跨域只存在浏览器中

*构成跨域的条件?

1.domain不同,域名或者Ip

2.端口不同

3.协议不同(http/https)

*cors的概念?

CORS - cross-origin resource sharing

*什么是简单请求?

a.请求方法:HEAD GET POST 三者之一

b.header头只能包含accept、accept-language、content-language、content-type:x-www-form-urlencode + form-data + plain

*浏览器的不同处理方式

1.对于简单请求来说,请求跨域 => 放行请求发出 => 浏览器发出cors请求,并且携带origin

=>浏览器拦截返回

=>浏览器检查response的header中有没有Access-Control-Allow-Origin

2.非简单请求

程序发出非简单cors请求 =>浏览器会做一个http查询请求(预检请求) => 面试追问:

option请求是什么?/ option请求出现的场景及作用?答:非简单请求,作用预检请求 => 安全性

*关注的响应参数

1.Access-Control-Allow-Origin:*(任意域名请求都可以被接收)/Origin 

2.Access-Control-Allow-Credential:是否允许发送cookie

### http 状态码

1.1xx 信息提示:100 - continue、101 - 切换

2.2xx 成功:200 - 请求成功 、201 - 创建完成、204 - 无内容

3.3xx 重定向:301 - 永久重定向、302 - 对象已移动(表单)、304 - 资源未修改、307 - 临时重定向

=>面试:

301 vs 302 => 跳转区别

302 - 短链接转长链接 => 点击短链接 => 对象已移动 => 浏览器自动跳转到长链接

*302 vs 304 => 缓存

a.强缓存 => 不发请求 => 返回200状态码 + 标识 from cache

b.协商缓存 => 由服务端参考决定是否缓存

强缓存 => Expires(资源失效的时间) + cache-control(1.1)/ max-age=3600 => cache-control优先级大于Expires

协商缓存 => Last-Modified(当前资源最后修改时间) + If-modified-Since + ETag => ETag计算会有性能损耗

*4xx 请求错误

*5xx - 服务端错误

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容