@apeleghq/http-media-type-negotiator

中文文档
1.0.8发布于 2025/10/14ISCTypeScriptESM + CJS零依赖构建来源已验证近 30 天下载 7477

RFC-aware HTTP 介质类型谈判 - 剖析和正态 接受信头与介质类型(RFC 9110),支持q值排名,通配符,以及现实世界信头的允许模式.

中文使用文档
文档目录11 节
  1. * 特性
  2. * 安装
  3. 使用量
  4. 一发谈判
  5. 可重复使用的谈判者(建议重复使用)
  6. 允许模式
  7. 兼容性与 negotiator
  8. 行为说明
  9. 建议的使用模式
  10. 捐款
  11. 许可证

HTTP 媒体类型谈判器

NPM Downloads


* 特性

  • 没有运行时间依赖 .
  • 运行时间和框架不可知论.
  • 针对服务器支持的类型谈判 HTTP 介质类型( 接受头) 沿用RFC 9110 第5.6.
  • 解析并规范媒体类型和接受可选允许标题 模式以容忍常见的现实世界偏差.
  • 支持q值解析和排名.
  • 以特异性、共享参数和服务器顺序来解开 决定性结果.
  • 展示一个可重复使用的工厂 重复谈判和一发子弹 方便功能.
  • 它还暴露了方便功能(也用于内部):
    • 分析媒体类型( N)parseMediaType(中文(简体) )
    • 规范所述媒体类型( U)normaliseMediaType(中文(简体) )
    • 分析 Accept 头 (parseAcceptHeader(中文(简体) )

* 安装

从 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谈判者倾向于:
    1. 更具体的类型/子类型(非*, (中文(简体) ),
    2. 与可用类型共享最非q参数的媒体范围,
    3. 服务器顺序(提供可用的类型顺序).
  • 解析器返回子字符串 Accept 输入并重新分解到 内部结构化媒体类型;这保持了执行 分配灯.
  • 参数值为 没有 实现正态并评价为精确匹配 (指对案件有敏感认识).
  • 如果多次谈判同一服务器支持的类型, 请使用 negotiateMediaTypeFactory 一次并重用返回的函数以避免 恢复可用的类型.
  • 正常化大小写,如果您需要超出 谈判者提供.

捐款

欢迎捐款。 请在寄存器上打开问题或调取请求 . 考虑增加边缘病例和性能基准的单位测试 改变分析行为.

许可证

该项目根据ISC许可证发放。 见 LICENSE 文件 详细情况.

版本与发布记录

@apeleghq/http-media-type-negotiator 共发布 9 个版本,首次发布于 2025/09/18;过去 12 个月发布了 0 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.0.8latest2025/10/141.1 年前
1.0.72025/10/131.1 年前
1.0.62025/10/121.1 年前
1.0.52025/10/031.1 年前
1.0.42025/10/031.1 年前
1.0.32025/09/231.1 年前

关于 @apeleghq/http-media-type-negotiator 的常见问题

@apeleghq/http-media-type-negotiator 是什么?

RFC-aware HTTP 介质类型谈判 - 剖析和正态 接受信头与介质类型(RFC 9110),支持q值排名,通配符,以及现实世界信头的允许模式.

如何安装 @apeleghq/http-media-type-negotiator?

在项目目录运行 npm install @apeleghq/http-media-type-negotiator,或使用 pnpm add / yarn add / bun add。

@apeleghq/http-media-type-negotiator 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@apeleghq/http-media-type-negotiator 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@apeleghq/http-media-type-negotiator 可以商用吗?

@apeleghq/http-media-type-negotiator 使用 ISC 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@apeleghq/http-media-type-negotiator 的下载量有多少?

根据 npm 官方下载统计,@apeleghq/http-media-type-negotiator 在 2026/10/06 – 2026/11/04 这 30 天内被下载 7,477 次,日均约 249 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@apeleghq/http-media-type-negotiator 还在维护吗?

最新版本 1.0.8 发布于 2025/10/14(1.1 年前);至今共发布 9 个版本,其中过去 12 个月发布了 0 个;首次发布于 2025/09/18。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。