Http 헤더에서의 Json 문자열 사용
최근 http 헤더 사용에 관한 이상한 문제가 발생했습니다(복수의 커스텀http 요구 헤더의 미스테리 추가). 이 문제를 피하기 위해 필드를 json 문자열에 넣고 해당 필드를 별도의 http 헤더에 추가하는 대신 헤더에 추가합니다.
예를 들어,
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 헤더에서 JSON을 사용할 수 있습니다.
HTTP 사양에 따르면 헤더 필드 본문에 포함할 수 있는 것은 가시적인 ASCII 문자, 탭 및 공간뿐입니다.
JSON JSON 인코더:json_encodePHP는, 또는 ASCPHP)를 .II 문자(예: "e"가 "\u00e9")는 대부분의 경우 이 문제에 대해 걱정할 필요가 없습니다.
JSON 문자열은 기술적으로 대부분의 Unicode 문자를 허용하기 때문에 특정 인코더의 문서를 확인하거나 테스트합니다.예를 들어 JavaScript에서는JSON.stringify()는 디폴트로는 멀티바이트 Unicode를 이스케이프하지 않습니다.을 사용법
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);
}
);
}
또는 헤더 필드에 삽입하기 전에 @rocketspacer specommended와 base64-encode를 실행할 수도 있습니다(JWT의 방법 등).이것에 의해, 헤더내의 JSON 는 판독할 수 없게 됩니다만, 사양에 준거합니다.
주의할 점은 원래 ARPA 사양(RFC 822)에는 이 정확한 사용 사례에 대한 특별한 설명이 포함되어 있으며, RFC 7230과 같은 후속 사양에서도 그 정신이 반영되어 있다는 것입니다.
헤더의 특정 필드바디는 일부 시스템에서 해석하려는 내부 구문에 따라 해석될 수 있습니다.
또, RFC 822 및 RFC 7230 에서는, 다음의 길이 제약은 명시적으로 설정되어 있지 않습니다.
HTTP는 섹션 2.5에서 설명한 바와 같이 각 헤더 필드의 길이 또는 헤더 섹션 전체에 사전 정의된 제한을 두지 않습니다.
송신하기 전에 Base64로 인코딩합니다.JSON Web Token이 하는 것처럼요.
NodeJs의 예를 다음에 나타냅니다.
const myJsonStr = JSON.stringify(myData);
const headerFriendlyStr = Buffer.from(myJsonStr, 'utf8').toString('base64');
res.addHeader('foo', headerFriendlyStr);
판독이 필요할 때 디코딩:
const myBase64Str = req.headers['foo'];
const myJsonStr = Buffer.from(myBase64Str, 'base64').toString('utf8');
const myData = JSON.parse(myJsonStr);
일반적으로 REST API의 헤더에는 데이터를 보내지 않습니다.대량의 데이터를 송신할 필요가 있는 경우는, HTTP POST 를 사용해 요구의 본문에 데이터를 송신하는 것이 가장 좋습니다.그러나 일부 REST API에서 사용하는 헤더에 자격 정보를 전달하려고 하는 것 같습니다.다음으로 인터넷을 통해 SMS 텍스트메시지를 송신할 수 있는SMSified라고 하는 서비스의 REST API로 credential을 전달하는 예를 나타냅니다.이 예에서는 REST API의 일반적인 기술인 기본 인증을 사용하고 있습니다.단, 보안을 유지하려면 이 기술을 사용하여 SSL을 사용해야 합니다.다음으로 WCF 및 REST를 사용한 기본 인증을 구현하는 예를 나타냅니다.
헤더 옵션에서 json 문자열을 사용하는 것은 http DELETE를 http GET에 사용하는 것만큼 잘못된 사용을 하지 않는 것으로 알고 있습니다.따라서 http 헤더에 json을 사용하는 제안도 있었습니다.물론 더 철저한 통찰은 여전히 환영받고 있으며 여전히 받아들여진 답변이 제공되어야 한다.
디자인 최초의 시대에 오픈API 사양은 다른 관점을 제공합니다.
HTTP 헤더 파라미터는 오브젝트일 수 있습니다.예를 들어 X-MyHeader는
{"역할": "admin", "firstName": "Alex"}
단, HTTP 요청/응답 내에서는 값이 시리얼화됩니다.
X-MyHeader: role=admin, firstName=알렉스야.
언급URL : https://stackoverflow.com/questions/9779860/using-json-string-in-the-http-header
'source' 카테고리의 다른 글
| JSON.stringify와 JSON.parse의 차이점 (0) | 2023.02.26 |
|---|---|
| \xc2 문자 또는 코드 스니펫을 피하는 방법 (0) | 2023.02.26 |
| springboot 2.3.0(h2 데이터베이스에 연결 중) (0) | 2023.02.26 |
| AngularJS는 모든 $http JSON 응답을 가로채다 (0) | 2023.02.26 |
| 반응 MUI로 TextField 구성 요소의 너비를 재정의하려면 어떻게 해야 합니까? (0) | 2023.02.26 |