HTTP 媒体类型谈判器
* 特性
- 没有运行时间依赖 .
- 运行时间和框架不可知论.
- 针对服务器支持的类型谈判 HTTP 介质类型( 接受头) 沿用RFC 9110 第5.6.
- 解析并规范媒体类型和接受可选允许标题 模式以容忍常见的现实世界偏差.
- 支持q值解析和排名.
- 以特异性、共享参数和服务器顺序来解开 决定性结果.
- 展示一个可重复使用的工厂 重复谈判和一发子弹 方便功能.
- 它还暴露了方便功能(也用于内部):
- 分析媒体类型( N)
parseMediaType(中文(简体) ) - 规范所述媒体类型( U)
normaliseMediaType(中文(简体) ) - 分析
Accept头 (parseAcceptHeader(中文(简体) )
- 分析媒体类型( N)
* 安装
从 npm 或纱线安装 :
npm install @apeleghq/http-media-type-negotiator
或者说
yarn add @apeleghq/http-media-type-negotiator
使用量
一发谈判
在只需要谈判一次时使用方便功能:
import { negotiateMediaType } from '@apeleghq/http-media-type-negotiator';
const available = [
'text/plain; charset=utf-8',
'application/json',
];
const best = negotiateMediaType(available, 'text/*;q=0.9, application/json;q=0.8');
// best -> 'text/plain; charset=utf-8'
可重复使用的谈判者(建议重复使用)
为一组服务器支持的媒体类型创建一次谈判器 避免重析 :
import { negotiateMediaTypeFactory } from '@apeleghq/http-media-type-negotiator';
const available = [
'text/plain; charset=utf-8',
'application/json',
];
const negotiate = negotiateMediaTypeFactory(available);
// Later, for each request:
const best1 = negotiate('application/json');
const best2 = negotiate('text/*;q=0.9, application/json;q=0.8');
允许模式
通过可选允许的旗帜,以容忍不符合RFC的输入
(外白空间,空参数值,旗下参数如 ;foo,以及
在 EOF 中被截取的引用值 :
const best = negotiate(acceptHeader, true); // permissive parsing
兼容性与 negotiator
一个模拟 negotiator
软件包可通过 @apeleghq/http-media-type-negotiator/compat/Negotiator
输出.
这个 mediaType 财务报告和审定财务报表 mediaTypes 界面被曝光,尽管它们没有
行为与其中的相同 negotiator数字 :
mediaTypes如果availableMediaTypes提供了参数.- 谈判算法可能会产生不同的结果.
行为说明
- 返回的字符串是原始服务器提供的字符串
availableMediaTypes阵列. - Q 值分析后转换为整数权重 0 个 财务报告和审定财务报表
1 000个 (1.0-1000) (中文(简体) ). 条目
q=0被忽略. - 匹配支持精确
type/subtype,键入通配符子类型 (例如:.text/*),以及*/*。 。 。 . - 当多个可接受范围系起时
q谈判者倾向于:- 更具体的类型/子类型(非
*, (中文(简体) ), - 与可用类型共享最非q参数的媒体范围,
- 服务器顺序(提供可用的类型顺序).
- 更具体的类型/子类型(非
- 解析器返回子字符串
Accept输入并重新分解到 内部结构化媒体类型;这保持了执行 分配灯. - 参数值为 没有 实现正态并评价为精确匹配 (指对案件有敏感认识).
建议的使用模式
- 如果多次谈判同一服务器支持的类型, 请使用
negotiateMediaTypeFactory一次并重用返回的函数以避免 恢复可用的类型. - 正常化大小写,如果您需要超出 谈判者提供.
捐款
欢迎捐款。 请在寄存器上打开问题或调取请求 . 考虑增加边缘病例和性能基准的单位测试 改变分析行为.
许可证
该项目根据ISC许可证发放。 见 LICENSE 文件
详细情况.