gpt4 book ai didi

json - 在 Http Header 中使用 Json 字符串

转载 作者:行者123 更新时间:2023-12-03 12:06:17 41 4
gpt4 key购买 nike

最近我遇到了一些关于 http header 使用 ( Adding multiple custom http request headers mystery ) 的奇怪问题,当时为了避免出现这个问题,我将字段放入 json 字符串并将该 json 字符串添加到 header 中,而不是将这些字段添加到单独的 http header 中。

例如,代替

request.addHeader("UserName", mUserName);
request.addHeader("AuthToken", mAuthorizationToken);
request.addHeader("clientId","android_client");

我创建了一个 json 字符串并将其添加到单个标题中
String jsonStr="{\"UserName\":\"myname\",\"AuthToken\":\"123456\",\"clientId\":\"android_client\"}";
request.addHeader("JSonStr",jsonStr);

由于我是写Rest和处理Http东西的新手,我不知道我的用法是否正确。我希望对此有所了解。

一些链接

http://lists.w3.org/Archives/Public/ietf-http-wg/2011OctDec/0133.html

最佳答案

,考虑到一些限制,您可以在 HTTP header 中使用 JSON。
根据HTTP spec ,您必须确保您的 header 字段主体仅包含可见的 ASCII 字符、制表符或空格,并且不得包含 CR 或 LF 字符(即新行,除非通过过时的“折叠空格”)。
由于许多 JSON 编码器(例如 PHP 中的 json_encode)会将 CR 和 LF 字符编码为“\r”和“\n”,并编码不可见或非 ASCII 字符(例如“é”变为“\u00e9”),你通常不需要担心这个。
不过,请检查您的特定编码器的文档或对其进行测试,因为 JSON strings技术上允许大多数任何 UTF-8 字符。例如,JSON.stringify()默认情况下不转义多字节 UTF-8。但是,您可以轻松地对其进行修改,例如

var charsToEncode = /[\u007f-\uffff]/g;
function http_header_safe_json(v) {
return JSON.stringify(v).replace(charsToEncode,
function(c) {
return '\\u'+('000'+c.charCodeAt(0).toString(16)).slice(-4);
}
);
}
Source
或者,您可以按照@rocketspacer 的建议进行操作,并在将 JSON 插入 header 字段之前对其进行 base64 编码(例如 JWT 是如何做到的)。这使得 header 中的 JSON 不可读(人类),但确保它符合规范。

值得注意的是,最初的 ARPA 规范(RFC 822)对这个确切的用例有一个特殊的描述,这种精神在后来的规范中得到了呼应,比如 RFC 7230:

Certain field-bodies of headers may be interpreted according to aninternal syntax that some systems may wish to parse.


此外,RFC 822 和 RFC 7230 明确给出没有长度限制:

HTTP does not place a predefined limit on the length of each header field or on the length of the header section as a whole, as described in Section 2.5.

关于json - 在 Http Header 中使用 Json 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9779860/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com