Cookie 在 HTTP 中的作用HTTP 中的状态码
比如挂号,会给你发放一个就诊卡
这个就诊卡中就包含了患者的身份标识,在医院的系统中就会记录患者的详细信息(姓名,性别,年龄,电话,住址,既往病史,账户余额..)如果上述的详细信息,只是存储到就诊卡中,是不太合理的,万一丢了怎么办?
见到医生后,医生说的第一句话,一般就是:刷一下就诊卡,只要刷卡了,医生的电脑上就出现了患者的详细信息,来到每一个科室都是这样的流程
会话 和 Cookie 其实是两个机制,在这个场景中,配合使用的,会话在服务器端,存储用户的详细情况, Cookie 是在客户端/浏览器 保存用户的会话标识
如果我换了一个医院?
我在 A 医院只能刷 A 医院的就诊卡.(A 的会话,存的一份数据)在 B 医院只能刷 B 医院的就诊卡(B 的会话,存的一份数据)没办法混用
同一个浏览器,访问搜狗,搜狗有一组会话,需要有 Cookie 存储搜狗的会话 id,访问百度,百度也有一组会话,需要 Cookie 存储百度的 会话 id
Cookie 按照域名的维度进行存储的
通过 Cookie 可以实现用户登录的过程.
但是 Cookie 并不是浏览器唯一存储数据的方案,浏览器有更多的方案实现本地存储
LocalStorage 键值对存储/域名维度
IndexDB 类似于数据库,表结构的组织方式
用户的会话id, 不一定非得保存到Cookie,使用 LocalStorage 或者 IndexDB 也是完全可以的
Cookie 小结
1.从哪来:从服务器返回的 Set-Cookie,本质上是程序员自定义的
2.如何保存:浏览器内部保存到硬盘上(重启程序/机器,数据不丢失),键值对组织(也有过期时间)
3.到哪里去:后续浏览器在访问服务器的其他页面的时候,就会带上对应的 cookie,由于 cookie 一般要跟着 HTTP 请求/响应走,一般不会存很大的数据
4.有啥作用:在浏览器这边保存的必要数据(这样的数据是允许丢失的)
HTTP 的状态码
HTTP 响应的报头里首行部分,通过不同的状态码,表示不同的含义
1. 200 OK 表示访问成功
HTTP 层面的成功,不代表你业务层面的成功
比如,注册账号,提交用户名,提交之后,因为用户名和别人的重复了,导致注册失败(业务层面的失败)注册失败,也可以通过 200 这样的状态码表示
业务层面的成功失败,通常会使用其他的属性标识,比如在 body 的json 中专门引入 code/ok/success 这样的属性标识
开头的都算是成功(成功和成功之间也有差异)
2. 404 Not Found 客户端要访问的资源不存在, URL 中的层次结构的路径 就是"资源"
返回 404 状态码的响应,不妨碍在 body 中返回好看的 html
3. 403 Forbidden 访问被拒绝(没有权限)
403 虽然是一个 HTTP 的状态码,但是 权限 这个事情和业务有关系的
未来咱们在开发的时候,涉及到权限的场景用户没有权限也要去访问
1)通过 http 403 返回给客户端
2)也可以 http 返回 200, 通过 body 的 code 返回出错误的信息
具体的看要求
4 开头的,都表示"客户端出错了" 用户的打开方式不对
特殊的状态码, 418 l am a teapot(我是一个杯具)
418 是写到 HTTP 标准协议中的,没什么卵用"彩蛋",彩蛋属于是 互联网文化,但是不建议效仿
阿里以前有一个开源的项目 Ant Design 前端的 UI 组件库,简化前端开发的,之前 Ant Desgn 作者做了一个彩蛋,圣诞节这一天触发,在 UI 空间上显示 小云彩 表示庆祝圣诞节(类似于圣诞节老人的胡子),这个彩蛋触发之后,大家都非常抵触,并且对作者口诛笔伐,开发商非常严肃.
4. 500 Intermal Server 咱们写代码的时候最常见到的 服务器抛出异常,挂了,知名网站,一般不会出现这样的低级错误,知名网站对于稳定性都有严格的要求(比如一年之内,网站的不可以时间不能超过 5min),特殊情况去年有一次 bilibili挂了好几个小时,代码抛出异常,没有很好的 catch 住
6. 502 Bad Gateway gateway 网关服务器机房的入口服务,网关本身其实是比较稳定的,不容易挂的(功能比较简单)网关后面连接的机器,如果也挂了网关返回 5xx(504 Gateway Timeout)
都是服务器出的问题(程序员赶紧修复)
7. 301 Moved Permanently, 302Move temporanily 3开头的都表示"重定向",浏览器会做缓存,下次访问旧地址,浏览器直接访问新地址(提高效率)
有的重定向使临时的,过一段时间就不需要,有的重定向是永久性的,很多地方都会涉及到"重定向",呼叫转移,我换一个手机号,开通呼叫转移之后,此时有人打旧号码,自动被转移到新的号码上,访问一个就地址,重定向到新的地址上
点击广告,先产生请求,访问搜狗的计费服务器(搜狗已经被腾讯收购了,搜狗现在是腾讯的一个部门)
广告平台投放的广告主,不一定有自己的网站
像 3 开头的响应,一般不需要 body 但是在head 中需要,表示接下来要跳转到哪个页面
2xx:成功
3xx:重定向
4xx:客户端出错
5xx:服务器出错