四、关于http看这一篇就够了

297 阅读8分钟

1.什么是状态码?

(1)http状态码分类
    1. 1xx 服务器收到请求
    2. 2xx 请求成功 如: 200
    3. 3xx 重定向 如: 301,302,304
    4. 4xx 客户端错误 如: 404
    5: 5xx 服务端错误 如: 500, 502
(2)http常见的状态码有哪些?
    1. 200 请求数据成功
    2. 301 永久重定向(配合location,浏览器自动处理)
    3. 302 临时重定向(配合location,浏览器自动处理)
    4. 304 资源未被修改 
    5. 404 资源未找到 404 not found
    6. 403 没有权限  一般是企业的一些内部系统或者未登录
    7. 500 服务器错误
    8. 504 网关超时
(3)关于协议和规范
1.就是一个约定
2.要求大家都跟着执行
3.不要违反规范,例如IE浏览器

2.http常见的header有哪些?

(1) 常见的Request Headers
    1.Accept 浏览器可接受的数据格式
    2.Accept-Encoding 浏览器可接受的压缩算法,如gzip
    3.Accept-Language 浏览器可接受的语言,如zh-CN
    4.Connection: keep-alive 一次TCP连接重复使用
    5.cookie: 向服务器端发送的数据
    6.Host: 请求的域名
    7.User-Agent(简称UA) 浏览器信息
    8.Content-type 发送数据的格式,如application/json ---->>> 客户端向服务端发送请求的数据格式
(2) 常见的Response Headers
    1.Content-type 发送数据的格式,如application/json  ---->>> 服务端向客户端返回的数据格式
    2.Content-length 返回数据的大小,多少字节
    3.Accept-Encoding 返回数据的压缩算法,如gzip
    4.Set-Cookie   服务端向看客户端设置cookie
(3) 缓存相关的Headers
1.Cache-Control Expires
2.Last-Modified If-Modified-Since
3.Etag          If-None-Match

3.什么是Restful API

1.传统的methods
    1.get获取服务器的数据
    2.post向服务器提交数据
    3.简单地网页功能,就只需要get,post就够了
    传统API设计: /api/list?pageIndex=2
2.现在的methods
    1.get 获取数据
    2.post 新建数据
    3.patch/put 更新数据
    4.delete 删除数据
3.Restful API
1.一种新的API设计方法(早已推广使用)
2.传统的API设计: 把每个url当做一个功能
3.Restful API设计: 把每个url当做一个唯一的资源的标识
    (1)如何设计成一个资源
    1.尽量不用url参数  
        传统API设计: /api/list?pageIndex=2
        Restful API设计: /api/list/2
    2.用methods表示操作类型
        传统API设计: 把url当做功能去设计
           1.post请求 /api/create-blog
           2.post请求 /api/update-blog?id=1004
           3.get请求  /api/get-blog?id=100
        Restful API设计: 用methods表示操作类型
           1.post请求 /api/blog
           2.post请求 /api/blog/100
           3.get请求  /api/blog/100

http缓存

1.关于缓存介绍
    举个例子,就像第一次访问一个网站或者其他平台资源,那么你第二次进入呢?还要重新全部请求一遍吗?
    那当然是不可能的,也没有必要,还浪费性能,把没有必要重新加载的数据缓存下来
    这样就可以大大的提高性能,增强访问速度,加载页面速度更快
    通过缓存可以减少网络请求的数量以及体积,优化网页的加载效率
2.http缓存策略(强制缓存+协商缓存)
(1).强制缓存

微信图片_20230408225218.png 强制缓存.png


    (1)初次请求
        1.第一次向服务器发送请求的时候,服务器会返回资源(浏览器继续工作)和Cache-Control
        2.如果服务端感觉这段资源可以被缓存就会加Cache-Control
        3.像js,css,img适合被缓存那么就会加Cache-Control
        4.Cache-Control存在于Response Headers中,
        5.由服务端来控制强制缓存的逻辑
        6.例如Cache-Control:max-age=31536000(单位为秒)  时间为一年
    (2)再次请求
        1.再次请求的时候它它会判断Cache-Control中的资源有没有过期,过期则向服务端再次请求资源并且缓存
        2.那么没有过期则会向本地缓存中读取,速度肯定是要比从服务器端获取更加快
        3.浏览器中可以从network中看到size字段是disk cache 那就是存本地缓存中读取资源直接返回
          并且可以看到上图中的访问速度,几毫秒间就可以拿到资源,大大提高了浏览器,网页加载速度
    (3)cache-control的值
        1.max-age 获取设置缓存的过期时间
        2.no-cacche  不用本地缓存,向服务端获取资源
        3.no-store 直接向服务端获取缓存
        4.private 由电脑浏览器,手机客户端进行缓存用户进行缓存
        5.public 它是由中间的路由及代理做一些缓存
(2).协商缓存

协商缓存.png

image.png

1.它是服务端缓存策略
    服务端来判断一个资源是不是可以被缓存
2.服务器判断客户端资源,是否和服务端资源一样
3.一致就返回304,否则返回200和最新的资源
    (1)初次请求
        1.因为浏览器本身就具有缓存机制的,第一次向服务其发起请求,服务器判断资源可以被缓存的话
        就会返回资源和资源标识
    (2)再次请求
        1.再次请求的时候带着资源标识判断你当前的资源是不是和服务端最新的资源一致
        2.如果是的话就会返回304
        3.不是的话就返回200和新的资源及资源标识
    (3)什么是资源标识?
        1.Response Headers中, 有俩种
        2.Last-Modified 资源的最后修改时间 (初次请求会携带last-Modified)来进行判断
                                         (再次请求会携带if-Modified-Since(key):值为last-Modified)
                                    没有被修改过返回304,否则返回200及新的资源标识(last-Modified)
        3.Etag 资源的唯一标识(一个字符串,类似人类的指纹,及token)
    (4)Last-ModifiedEtag
        1.会优先使用Etag
        2.Last-Modified 只能精确到秒级
        3.如果资源被重复生成,而内容不变,则Etag更精确
3.刷新操作方式,对缓存的影响
//不同刷新操作,不同的缓存策略
    (1)正常操作: 地址栏输入url,跳转链接,前进后退
        强制缓存有效,协商缓存有效
    (2)手动刷新: F5,Ctrl+R(Mac commnd+R),点击刷新按钮,右侧菜单刷新
        强制缓存失效,协商缓存有效
    (3)强制刷新: window: Ctrl+F5  Mac: commnd+shift+R 
        强制缓存失效,协商缓存失效----> 不管多慢,因为要给你返回200及最新的资源
4.http与https的区别?
http
    1.http是明文传输,敏感信息容易被中间劫持(危险)
    2.用户名密码都是明文传输,如果中间环节有被劫持那么就会泄露
    3.还有邮箱,手机号
https
    1.https = http+加密,可以劫持,但是劫持了也无法解密
    2.现代浏览器已经慢慢地开始强制https协议
5.加密方式: 对称加密,非对称加密
    1.对称加密: 一个key同时负责加密,解密
    过程: 
        1.客户端存在一个密钥, 客户端发起请求的时候 ,服务端会把key返回给客户端
        2.这时候客户端服务端都有一个key
        3.在传输的过程中是加密的,加密数据,服务端的key用来解密数据,这就是对称加密
    2.非对称加密: 一对key,A加密之后,只能用B来解密
        1.客户端向服务端请求的时候,服务端会把公钥传递给客户端
        2.客户端通过publickey加密的东西传递给服务端,服务端通过私钥(key)来解密
        3.那么此时使用对称加密就安全了,因为不可能被劫持了
    3.https 同时用到了这俩种加密方式

对称加密与非对称加密.png

6.https证书
1.简述: 
    https证书类似于我们的身份证号,房产证,车牌号,驾照
2.中间人攻击:
    结合上图的加密方式来理解: 如果一个黑客在服务端返回的publickey替换为自己的publicKey,
    然后你又使用黑客的 publickkey进行加密然后黑客劫持到之后用他自己的key来进行解密,这就叫做
    中间人攻击
3.如何避免呢?
    开始的时候从第三方机构申请证书(阿里云,腾讯云等等(一年大概1000左右)),服务端需要从第三方机构申请证书
    证书中包含publicKey,同时客户端(浏览器,手机)要支持第三方机构证书的校验工作
    1.客户端向服务端发起请求,然后服务端会将证书传递给客户端,客户端验证证书是否合法,
        合法之后走非对称加密的一个过程
4.使用第三方证书(慎用免费,不合格的证书)--->>>容易被掉包
5.浏览器校验证书
7.完整流程图概览

image.png