根据https://tools.ietf.org/html/rfc5987 ,应使用ISO-8859-1字符编码返回HTTP头字段。
这也适用于用于redirect的位置字段。 然而,看下面的例子,我不知道如何redirect工作,尽pipeURL不编码。
http://goo.gl/m5fDF0
我运行了不同的工具,包括谷歌浏览器开发人员,位置字段绝对是编码,但使用CURL或Screaming Frog等软件返回用西里尔文字符写的位置。 理论上redirect应该在404中解决,但是我得到了200。
任何想法如何这是可能的?
是的,实际上redirect包含高于7位(大于0x80hex)的八位字节。 各种应用程序会将这些八位字节转换为屏幕上的各种可视化表示; 这取决于他们决定使用什么编码 。
如果有人使用UTF-8,他们可能会得到一个好的西里尔文本,但这是偶然的; 关于这个问题的主题。
https://tools.ietf.org/html/rfc7230#section-3.2相当准确地表示:
从历史上看,HTTP允许在文本中包含字段内容
ISO-8859-1字符集[ISO-8859-1],仅支持其他字符集
通过使用[RFC2047]编码。 实际上,大多数HTTP头
字段值只使用US-ASCII字符集的一个子集[USASCII]。
新定义的标题字段应该将其字段值限制为
US-ASCII八位字节。 接收者应该在现场处理 其他八位字节
内容(obs-text) 作为不透明的数据。
和
obs-text =%x80-FF
这意味着,实际上可以发送任何八位字节。 显示标题的软件(例如将八位字节转换为屏幕上某些可见表示的浏览器)应该使用ISO-8859-1 进行转换 。
但是,在HTTP会话中接收数据的服务器也可以自由使用八位字节来执行操作,这是不涉及在任何屏幕上显示任何可视化表示的。 在这种情况下,HTTP服务器使用八位组为您提供一个页面。 由于HTTP服务器只是获得一些八位字节的input并产生一些八位字节的输出,所以“编码”在这里并不适用(HTTP服务器从不需要将字节转换成它在屏幕或打印机上显示的东西)。