这是我参与第五届青训营伴学笔记创造活动的第四天!
一、初识HTTP协议
0、了解
- 网络划分:
一般划分为两类:
(1)局域网(Local Area Network):简称 LAN;
注意:如果局域网没有连接到公网,局域网中的主机就无法访问公网的资源(如:HTML网页、css 文件、js 文件、图片、视频等)
(2)广域网( Wide Area Network),简称 WAN;开放的网络,连接上的主机都能访问 - IP地址:
- 用于标识网络主机、其他网络设备(如:路由器)的网络地址
- 格式:
IP地址是一个
32位的二进制数,通常被分割为4个8位二进制数(也就是4个字节),通常用点分十进制的方式来表示,即a.b.c.d的形式(a,b,c,d都是0~255之间的十进制整数); - 特殊情况:
本机IP地址:127.0.0.1
本机域名:localhost
- 端口号:
- 端口号用于标识主机中发送数据与接收数据的进程;
- 类似于发快递:不仅需要指定发货地址(IP地址),还需要指定收货人(端口号)
- 端口号一般为
0~65535范围的数字;
1、初识
- HTTP是超文本传输协议,即HyperText Transfer Protocol,是一个在计算机世界里专门在两点之间传输文字,图片,音频,视频等超文本的规定和规范,应用层协议,基于TCP协议,简单可扩展,无状态,目前常用的是HTTP 1.1
2、协议分析--报文
- 一般在浏览器中输入网址访问资源都是通过 GET 方式请求,在 FORM 提交中,可以通过 Method 指定提交方式为 GET 或者 POST,如果没有设置都是默认为 GET 提交,HTTP 定义了与服务器交互的不同方法,最基本的方法有4种,分别是 GET、POST、PUT、DELETE。
- 常见状态码
- 1xx---提示信息
是协议处理中的一种中间状态 - 2xx---成功
表示服务器成功处理了客户端的请求
200 OK:如果是非HEAD请求,服务器返回的响应头会有body数据
204 No Content:响应头没有body数据
206 No Cpntent:应用于HTTP分块下载或断点续传,表示响应返回的body数据并不是资源的全部,而是其中的一部分 - 3xx---需要重定向
表示客户端请求的资源发生了变动,需要客户端用新的URL新发送请求获取资源
301 Moved Pemanently:表示永久定向,说明请求的资源已经不存在,需要用新的URL再次访问
302 Found:表示临时定向,说明请求的资源还在,但暂时需要另一个URL访问
301和302都会在响应头里使用字段Location,指明后续要跳转的URL,浏览器会自动定向的URL
304 Not Modified:不具有跳转意义,表示资源未修改,定向已存在的缓冲文件,也称缓存定向,用于缓存控制 - 4xx---客户端请求报文有误(笼统)
401 Unauthorized:请求未经授权
403 Forbidden:表示服务器禁止访问资源,并不是客户端的请求出错
404 Not Found:表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端 - 5xx---服务端错误码
表示客户端请求正确,但服务器处理内部发生错误
500 Internal Server Error:服务器内部发生了不可预期的错误
501 Not Implemented:表示客户端的功能还不支持
502 Bad Gateway:表示服务器自身工作正常,访问后端服务器发生了错误
503 Service Unavailable:表示服务器当前很忙,暂时无法响应服务器
504 Gateway Timeout:网关或者代理的服务器无法在规定时间内获得想要的响应
- 1xx---提示信息
- 常见字段
Host:客户端发送请求时用来指定服务器的域名 www.baidu.com
Content-Length:服务器在返回数据时表明本次回应的数据长度
Content:最常用于客户端要求服务器使用TCP持久连接以便其他请求复用
Content-Type:用于服务器回应时告诉客户端本次数据是什么格式
Content-Encoding:说明数据的压缩方法,说明数据使用了什么压缩格式
- RESTful API
一种API设计风格,遵循
(1)每个URL代表一种资源
(2)客户端和服务器之间,传递这种资源的某种表现层
(3)客户端通过HTTP method,对服务器端资源进行操作,实现“表现层状态转化” - 常用请求头
- 常用响应头
- 缓存
- 强缓存
- Expires,时间戳
- Cache-Control
(1)可缓存性:
no-cache:协商缓存验证
no-store:不使用任何缓存
(2)到期:
max-age:单位是秒,存储的最大周期,相对于请求的时间
(3)重新验证*重新加载
must-revalidate:一旦资源过期,在成功向原始服务器验证之前,不能使用
- 协商缓存
- Etag/If-None-Match:资源的特定版本的标识符,类似于指纹
- Last-Modified/If-Modified-Since:最后修改时间
- 强缓存
- cookie
HTTP/2
- 更快,更稳定,更简单
3、常用场景
- 打开控制台
- 右键--->检查
- 切换到network
- 静态资源
静态资源方案:缓存+CDN+文件名hash
CDN:Content Delivery Network
通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务
- 登录
跨域 (下图最后两个为同域)
预请求:获知服务端是否允许该跨源请求(复杂请求)
跨域解决方案:
* CORS
* 代理服务器(同源策略是浏览器的安全策略,不是HTTP的)
* Iframe 诸多不便
1、 使用POST方法
目标域名 https://sso.toutiao.com
目标path/quick_login/v2/
2、 携带信息:
Post body,数据格式为from
希望获取的数据格式为json
已有的cookie
返回信息:
数据格式json
种cookie的信息
为什么HTTP无状态下一次进入页面能记住登录态呢?
SSO:单点登录
4、实际应用
- 浏览器
-
node
-
用户体验
网络优化
稳定性
5、了解更多
- 通信方式 WebSocket
- QUIC