【问题标题】:Is it possible to set character encoding for "reason text" in HTTP/1.1 response header? [duplicate]是否可以在 HTTP/1.1 响应标头中为“原因文本”设置字符编码? [复制]
【发布时间】:2019-07-18 23:04:35
【问题描述】:

我有一个用 Yii2 编写的 Web 应用程序。在 beforeAction() 中,我想将我的自定义消息设置给用户并解释问题:

Yii::$app->response->setStatusCode(403, 'Brak dostępu. Skontaktuj się z administratorem.');

是否可以在 HTTP/1.1 响应头中使用 uft-8 “原因文本”?

【问题讨论】:

  • 我看不出在那个地方开始翻译应该达到什么效果。如果您想在页面中向用户显示翻译后的错误消息 in,那将是一回事 - 但 HTTP 标头应该首先不需要“翻译”恕我直言。
  • 您还可以包含 HTML 正文。在most conditions 下,网络浏览器会显示它。

标签: php http yii2


【解决方案1】:

RFC 7230 没有给出关于如何解析状态行的“原因文本”元素的任何说明,因此没有隐含或指定编码。

ABNF 语法表明,如果以任何“ASCII 兼容”编码(例如 UTF-8)呈现,您的字符串将是有效

reason-phrase  = *( HTAB / SP / VCHAR / obs-text )

VCHAR 表示“可见的 ASCII 字符”,obs-text 是 0x80 到 0xFF 范围内的任意字节。

但是,没有关于如何解释这些字节的定义。相反,规范建议客户端根本不解析它

reason-phrase 元素的存在唯一目的是提供一个 与数字状态代码相关的文本描述,主要是 出于对早期互联网应用协议的尊重 更常用于交互式文本客户端。客户应该 忽略原因短语内容。

因此,如果您将其用于低级调试或用于自定义客户端,请继续将您喜欢的任何文本放在那里。但是,如果标准客户端忽略它或将其误解为不同的字符编码,请不要感到惊讶。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-21
    • 2011-02-24
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    相关资源
    最近更新 更多