http常见状态码
- 1xx 服务器收到请求
- 2xx 请求成功,例如200
- 3xx 重定向,例如301
- 4xx 客户端错误(例如请求无效地址),例如404
- 5xx 服务端错误(例如后端代码用bug),例如500
- 常见状态码-2
- 200 请求成功
- 301 永久重定向(与 location 配合,浏览器自动处理)--例如废弃的网址,用location配合,实现跳转,下次访问不再访问老的域名,直接访问 location 记录的地址
- 302 临时重定向(与浏览器配合,浏览器自动处理)--例如百度搜索得到的网址,可在network查看到地址为百度的网页地址,将该地址拷贝访问,会与 location 配合跳转到该网页的原地址,如未访问过,状态码为301(访问过,浏览器有缓存,则显示200)
- 304 资源未被修改,短期重复请求,服务端有可能返回304,即请求的资源与本地缓存的资源一致
- 404 资源未找到(例无效网址)
- 403 没有权限
- 500 服务器错误
- 504 网关超时
Restful-API
传统的methods:
get获取数据、post发送数据
现在的methods:
get获取数据、post新建数据、patch/put更新数据、delete删除数据
Restful API
一种新的API设计方法(早已推广使用)
传统API设计:把每个url当做一个功能
Restful API 设计:把每个url当做一个唯一的资源
如何将 url 设计成一个资源?
- 尽量不使用 url 参数
传统 API 设计:/api/list?pageIndaex=2
Restful API 设计: /api/list/2
- 用 method 表示操作类型
传统 API 设计--操作类型在url中声明
post 请求 /api/create-blog
post 请求 /api/update-blog?id=100
get 请求 /api/get-blog?id=100
Restful API 设计
post请求(新建数据) /api/blog
patch/put请求(更新数据) /api/blog/100
get请求(获取数据) /api/blog/100
http headers
- 常见的 Request Headers
- 常见的 Response Headers
- Request Headers
Accept -- 浏览器可接受的数据格式
Accept-Encoding -- 浏览器可接收的压缩算法,如gzip
Accept-Language -- 浏览器可接收的语言,如 zh-CN
Connection: keep-alive 一次TCP链接可重复使用
cookie -- 本地信息
Host -- 域名
User-Agent(简称UA)-- 浏览器信息
Content-type -- 发送数据的格式,如application/json
- Response Headers
Content-type -- 返回数据的格式,如 application/json
Content-length -- 返回数据的大小,多少字节
Content-Encoding -- 返回数据的压缩算法,如 gzip
Set-Cookie -- 修改cookie
自定义Header -- 在axios-js.com/docs/#Request-Config查看,例如在服务端需要验证秘钥才能合法登录的时候可以运用
缓存相关的 headers
Cache-Control -- Expires
Last-Modified -- If-Modified-Since
Etag -- If-None-Match
http缓存
为什么需要缓存? 性能优化,减少网络请求的数量和体积
那些资源可以被缓存? --静态资源(例如img、css、js)
http强制缓存
在服务器收到请求时,会判断被请求的资源是否能够缓存,可以的资源(例如js/css),在返回这些资源是就会携带cache-control
cache-control
- 在Response Headers中
- 控制强制缓存的逻辑
- 例如Cache-Control: max-age=31536000(秒) --缓存有效时间
Cache-Control 的值
- max-age --缓存时效
- no-cache --不用强制缓存,但服务端可以有其他措施,例如协商缓存
- no-store -- 不用强制缓存,也不用服务端的其他缓存举措
- private --只能允许最终用户做缓存
- public -- 可以支持例如中间路由,第三方代理做缓存
关于Expires
- 同在Response header中
- 同为控制缓存过期
- 已被Cache-Control取代
http协商缓存--服务端判断请求的资源是否有更新,是否可以用本地缓存
- 服务端缓存策略 --当然,缓存还是在本地,不然就没有意义了。只是举措由服务端来做
- 服务端判断请求的资源是否有更新
资源标识
- 在Response header中,有两种
- Last-Modified 资源的最后修改时间,只能精确到秒
- Etag 资源的唯一标识(字符串),二者共存时,优先级更高,资源被重复更新,内容不变,Etag就不变,所以更合理
刷新页面对http缓存的影响
不同的刷新操作,对应的不同缓存策略
- 正常操作:地址栏输入url、跳转链接、前进后退等 --强制缓存有效,协商缓存有效‘
- 手动刷新:F5、刷新按钮、右键菜单刷新 --强制缓存失效,协商缓存有效
- 强制刷新:Ctrl+F5 --强制缓存失效,协商缓存失效
http 和 https 的加密方式
http是明文传输,敏感信息容易被中间劫持
https = http +加密,劫持了也无法解密
现代浏览器已开始强制 https 协议
加密方式:非对称加密和对称加密
对称加密:有同一个key进行加密和解密
简述:客户端对服务端发出请求,服务端将一个key传给客户端,客户端和服务端之间就用这个key对数据进加密和解密
弊端:key在服务端传给客户端的时候被截取,数据密文就会被破解
非对称加密:一对key,用A加密,只能用B解密
简述:服务端有一对key(公钥和私钥),客户端对服务端发出请求,服务端将公钥传给客户端,客户端用公钥对数据进加密,服务端就用对应的私钥进行解密
弊端:成本较高
https的加密方式:非对称加密+对称加密
简述:客户端在接收到服务端回复的公钥后,要公钥加密一段随机字符串,将密文发送到服务端,服务端用对应的私钥进行解密(非对称加密)。两端就同时得到了这一随机字符串(保密的),之后用这一随机字符串作为key对数据进行加密和解密(对称加密)
特点:利用了非对称加密的安全性以及对称加密的低成本特点
https证书
获取途径:使用第三方证书,例如阿里云(慎用免费、不合规的证书)
存在的意义:安全的证书可避免中间人攻击
中间人攻击:例如第三方有一对自己的公钥和秘钥,在服务端向客户端返回公钥的时候截取并换成自己的公钥,客户端就会使用第三方的公钥生成一段随机字符串,加密成密文发送给服务端,作为接下来对称加密的key,第三方截取该密文,用对应的秘钥解密就能得到这一字符串。
浏览器在跳转页面前会校验证书是否安全 -- 浏览器和第三方证书所在机构是互通的