Day7 HTTP实用指南 | 字节青训营

178 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第7天

Day7 HTTP实用指南

大纲

  • 初识
  • 协议分析
  • 常见场景
  • 实际应用
  • 了解更多

初识

没办法,这里用一张官方的截图(因为实在太好)

左边是用户输入浏览器后发生的动作,右边是OSI、TCP/IP协议(计网重点)

13.jpg

HTTP:超文本传输协议(Hyper Text Transfer Protocol )是一个基于TCP协议的应用层协议,简单无扩展且每个请求孤立。

协议分析——报文

协议发展

14.jpg

协议分析

最常用的肯定是POST/GET,其他说实话都不太常见(包括一部分用于测试)

具体内容

15.jpg

请求分类

safe:GET/HEAD/OPTIONS(不会去修改服务器数据)

Indemponent(幂等):顾名思义,执行一次请求和连续多次请求,结果和服务器状态一样

他包含所有safe类请求和PUT、DELETE

状态码

最常见:

状态码含义
200OK
301/302重定向
401未授权允许
404资源不存在,访问错误
500服务器内部不可预知错误
504服务器超时
还有很多状态码……

RESTfUl API

  • 每一个URL代表一种资源
  • 客户端与服务器传递资源的某种表现层
  • 客户端通过HTTP Method,对服务器资源进行操作

常见请求头

Cookie、Accept、Origin、User-Agent、……

16.jpg

缓存

强缓存

本地有、直接使用。包含字段:Expire,Cache-Control

协商缓存

本地也有一段缓存,但是要和服务器协商,判断资源是否最新。包含字段:ETag、Last-Modified

Set-Cookie-response

17.jpg

HTTP2:更快、更稳定、更简单

包含帧、数据流,HTTP2的连接永久。

HTTPS:HTTP+TSL/SSL 加密

对称加密

加密解密用一个密钥

非对称加密

加密解密需要两种不同的密钥:公钥(Public Key)、私钥(Private Key)

常见场景

静态资源(www.toutiao.com)

18.jpg

缓存策略

Cache-Control :max-age = 31536000(一年)

更多

access-control-allow-origin : * 允许所有域名访问

content-type:text/css; charset = utf-8 资源类型CSS

静态资源部署方案

缓存+CDN+文件名Hash

缓存

存到用户本地,这样一定能更快的访问,但是第一次打开没有缓存怎么办呢?

CDN(Content Delivery Network)

根据用户的就近性和负载,以极高效率为用户提供请求。那怎样保证用户拿到的资源最新呢?

文件名Hash

刚刚的例子中缓存了一年,那会不会一年都拿不到最新资源呢?

我们在文件名上做一些手脚,每次变化一下,让文件名和之前缓存的match不上,这样就能访问到最新资源了。

登录场景(表单登录)

OPTIONS请求,跨域问题

跨域

一个域名由三部分请求 https://(scheme) www.example.com(host name):443(port)

CORS(Cross Origin Recourse Sharing)

预处理:是否允许跨域请求?

相关协议头:Origin、Access-Control-Allow-Origin、Access-Control-Max-Age

代理服务器

同源主要是浏览器的安全策略,所以代理服务器跨越浏览器,就可以绕过同源策略。

具体:浏览器先向代理服务器进行请求,之后代理服务器真实的向服务器进行请求;

服务器相应给代理服务器,代理服务器再将相应转发给浏览器。

登录具体

向地址做了什么?
携带/返回了那些信息?
携带
  • POST body
  • 自己已有的Cookie
  • 希望获取的json数据格式
返回
  • 数据格式json
  • 种cookie的信息

实际应用

浏览器

19.jpg

node

常见的请求库axios

  • 支持浏览器,nodejs环境
  • 丰富的API拦截器

了解更多

WebSocket

QUIC协议