什么是HTTP协议
全称超文本传输协议,是基于应用层,TCP协议,无状态的协议
HTTP协议的发展
HTTP协议请求方法
HTTP请求流程
- 浏览器向服务器发起请求
- 判断是否有缓存,如果有缓存则通过
Cache-Control首部的max-age字段判断强缓存是否新鲜,如果没有缓存才发起请求 - 如果强缓存新鲜,则直接读取浏览器缓存,并将缓存返回浏览器,如果不新鲜则进行读取协商缓存的信息,首先判定上次响应头中是否有
ETag字段 - 如果有则在请求头中带上
If-None-Match字段(ETag/If-None-Match是资源的特定版本表示符,类似指纹),没有则再次判定上次响应头中是否有Last-Modified字段 - 有则发起请求并在请求头中带上
If-Modified-Since字段(Last-Modified/If-Modified-Since表示最后修改时间) - 发起请求后判断响应码是否304(表示发送了GET请求,但文件未发生变化),如果是,则读取浏览器缓存,并将缓存返回浏览器,如果是200的话,则代表请求完成
使用cookie进行访问控制并携带信息
HTTP/2
HTTPS
静态资源
报文头分析
- 允许所有域名访问
- cache-control: 保质期一年
- 强缓存
- 资源类型为css
使用静态资源方案
- 缓存+CDN 可以使用户更快拿到资源
- 而使用不同的文件名hash可以确保用户收到的是最新的资源
登录实例
可以发现请求登录的方法是options,而请求地址的三级域名不是常规的www,而是sso,则是因为发生了跨域请求
- 什么情况下会发生跨域?
只要发送请求客户端和接受请求的服务端的协议名,任意一级域名,和主机号其中有一处不同就会发生跨域
解决跨域问题
跨域问题是因为浏览器具有同源策略,阻止跨域请求,而HTTP请求本身并不具有同源策略
- 代理服务器
设置代理服务器的网络号和端口号与服务器一致,这样代理服务器与服务器之间就是同源的,而客户端与代理服务器之间并不具有同源策略,因此只要使代理服务器转发请求与响应,就能解决跨域问题
记住登录状态
- 使用鉴权的方式验证用户信息
- session+cookie
在登录完之后把账户密码验证码等信息提交给serve,如果正确serve会生成session并把它存储, 同时在本次请求的响应中serve把session利用set-cookie存储到域名和地址下面,下次访问的时候浏览器自动携带cookie,把之前存储session携带出来,serve再与本地的session比较,从而得到用户信息
跳转后的网站自动登录
SSO 单点登录解决方案
- 登录访问A站点,询问服务端对比session是否具有登录态,如果没有则跳转到SSO这个登录站点,再次询问SSO是否具有登录态,若也没有,则在SSO站点登录,成功登录后,在SSO站点种下cookie,而后SSO站点发起重定向请求到callback站点,并携带下一个站点的地址与用户信息,处理成功后,在A站点种下cookie,再重定向到登录页面,此时已有登录信息,完成登录.
- 登录访问B站点,询问服务端无登录态,则访问SSO站点,SSO站点已有登录信息,因此直接重定向到callback站点,在B站点种下cookie,重定向到登录页面,完成登录.
如何发起HTTP请求
浏览器
原生AJAX
Fetch