# @apeleghq/http-media-type-negotiator 中文文档

规范地址：https://npmcn.com/package/%40apeleghq/http-media-type-negotiator/

版本：1\.0\.8
npm 元数据更新时间：2025-10-13T22:31:50.366Z
中文译文更新时间：2026-11-06T09:02:15.964Z
软件包许可：ISC

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40apeleghq/http-media-type-negotiator
原文对照：https://npmcn.com/package/%40apeleghq/http-media-type-negotiator/?lang=original
项目主页：https://github.com/ApelegHQ/ts-http-media-type-negotiator#readme
源码仓库：https://github.com/ApelegHQ/ts-http-media-type-negotiator

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：125 kB，77 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2025-09-17T22:55:33.281Z
- 最新版本发布：2025-10-13T22:31:49.882Z
- 近 30 天下载量：7477（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：9（近 12 个月 0 个）

## 中文简介

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

## 安装

```sh
npm install @apeleghq/http-media-type-negotiator
```

也可以使用：`pnpm add @apeleghq/http-media-type-negotiator`、`yarn add @apeleghq/http-media-type-negotiator`、`bun add @apeleghq/http-media-type-negotiator`

## README

# HTTP 媒体类型谈判器

![NPM Downloads](https://img.shields.io/npm/dw/@apeleghq/http-media-type-negotiator?style=flat-square)

* * *

## \* 特性

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

## \* 安装

从 npm 或纱线安装 :

```sh
npm install @apeleghq/http-media-type-negotiator
```

或者说

```sh
yarn add @apeleghq/http-media-type-negotiator
```

## 使用量

### 一发谈判

在只需要谈判一次时使用方便功能:

```javascript
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'
```

### 可重复使用的谈判者(建议重复使用)

为一组服务器支持的媒体类型创建一次谈判器 避免重析 :

```javascript
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 中被截取的引用值 :

```javascript
const best = negotiate(acceptHeader, true); // permissive parsing
```

### 兼容性与 `negotiator`

一个模拟 [`negotiator`](https://github.com/jshttp/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 是什么？

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 和提交记录判断。

