首页 > 解决方案 > MarkLogic xdmp.http* 支持响应标头中的多个 Set-Cookie

问题描述

MarkLogic Servie 端 JavaScript 中的xdmp.http*函数(xdmp.httpGetxdmp.httpPost)似乎不支持多个Set-Cookie响应标头——只返回一个 cookie

xdmp.httpGet(' https://httpbin.org/response-headers?Set-Cookie=a&Set-Cookie=b ')

{
  "code": 200, 
  "message": "OK", 
  "headers": {
    "access-control-allow-credentials": "true", 
    "access-control-allow-origin": "*", 
    "content-type": "application/json", 
    "date": "Thu, 11 Apr 2019 19:12:55 GMT", 
    "server": "nginx", 
    "set-cookie": "b", // only one cookie
    "content-length": "111", 
    "connection": "keep-alive"
  }
}

相比之下,等效的 xdmp:http-* 函数表现正确:

xdmp:http-get(' https://httpbin.org/response-headers?Set-Cookie=a&Set-Cookie=b ')

<response xmlns="xdmp:http">
  <code>200</code>
  <message>OK</message>
  <headers>
    <access-control-allow-credentials>true</access-control-allow-credentials>
    <access-control-allow-origin>*</access-control-allow-origin>
    <content-type>application/json</content-type>
    <date>Thu, 11 Apr 2019 19:21:40 GMT</date>
    <server>nginx</server>
    <set-cookie>a</set-cookie>  // both cookies
    <set-cookie>b</set-cookie>
    <content-length>111</content-length>
    <connection>keep-alive</connection>
  </headers>
</response>

标签: cookiesmarklogic

解决方案


JSON 每个名称只能代表一个字段。解析器显然正在工作。

似乎缺少对 JSON 中多值 http 标头的支持。有很多方法可以完成,但都是内部修复。

您可以尝试调用xdmp.eval并使用带有 XML 结果的 XQuery 版本,然后读取 XML 或以更合适的格式转换为 JSON。


推荐阅读