---
title: "身份标头"
description: "每个 drain 请求都会携带 User-Agent 和 X-Evlog-Source，以便接收方对流量进行分类。需要时可以覆盖或抑制它们"
canonical_url: "https://evlog.zhcndoc.com/extend/identity-headers"
---
# 身份标头

> 每个 drain 请求都会携带 User-Agent 和 X-Evlog-Source，以便接收方对流量进行分类。需要时可以覆盖或抑制它们

evlog 发送的每个 drain 请求都会标记两个身份标头，以便接收方识别流量：

<table>
<thead>
  <tr>
    <th>
      标头
    </th>
    
    <th>
      值
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        User-Agent
      </code>
    </td>
    
    <td>
      <code>
        evlog/<version>
      </code>
      
      （仅限 Node / 服务端运行时——浏览器会剥离此标头）
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        X-Evlog-Source
      </code>
    </td>
    
    <td>
      适配器名称（<code>
        axiom
      </code>
      
      、<code>
        datadog
      </code>
      
      、<code>
        otlp
      </code>
      
      、<code>
        posthog
      </code>
      
      、<code>
        sentry
      </code>
      
      、<code>
        better-stack
      </code>
      
      、<code>
        client
      </code>
      
      、…）
    </td>
  </tr>
</tbody>
</table>

浏览器端的 `evlog/http` drain（用于客户端日志记录）会改为设置 `X-Evlog-Source: client`，因为浏览器无法覆盖 `User-Agent`

## 为什么

- **在接收端进行分类。** 在接收系统的日志中快速区分 evlog 流量与其他客户端。
- **跟踪适配器使用情况和版本漂移。** 发布新的 evlog 版本，并在中心化位置观察 `User-Agent` 分布的变化。
- **调试特定的 drain。** 通过 `X-Evlog-Source` 进行筛选，在大量入站请求中隔离某个适配器的行为。

## 读取版本

这两个常量都从 `evlog/toolkit` 导出，因此你的 drain（或你的接收端）可以引用这些规范值：

```ts
import { EVLOG_USER_AGENT, EVLOG_VERSION } from 'evlog/toolkit'

console.log(EVLOG_VERSION)    // → "2.16.0"
console.log(EVLOG_USER_AGENT) // → "evlog/2.16.0"
```

## 从自定义 drain 中覆盖

使用 [`defineHttpDrain()`](https://evlog.zhcndoc.com/extend/custom-drains) 构建的适配器会自动将 drain 的 `name` 作为 `source` 传入，并将规范化的 `evlog/<version>` 作为 `userAgent` 传入。你无需为此操心。

当你直接基于 `evlog/toolkit` 中的 `httpPost` 构建 drain 时（例如为了一个具有不同身份的 fork，或为了希望使用自己 UA 的供应商），可以传入 `source` 和/或 `userAgent` 进行覆盖：

```ts
import { httpPost } from 'evlog/toolkit'

await httpPost({
  url: 'https://my-platform.example.com/ingest',
  headers: { 'Content-Type': 'application/json' },
  body: '[]',
  timeout: 5000,
  label: 'my-platform',
  source: 'my-platform',           // 作为 X-Evlog-Source 发送
  userAgent: 'my-fork/1.0',        // 覆盖默认的 User-Agent
  // userAgent: false,             // 完全抑制该标头
})
```

## 下一步

- [自定义 Drains](https://evlog.zhcndoc.com/extend/custom-drains): `defineHttpDrain` 会自动注入身份标头
- [Drain 流水线](https://evlog.zhcndoc.com/extend/drain-pipeline): 在保留身份标头的同时，将任意 drain 包装在批处理 + 重试中

---

- [自定义 Drains](https://evlog.zhcndoc.com/extend/custom-drains)


## Sitemap

See the full [sitemap](https://evlog.zhcndoc.com/sitemap.md) for all pages.
