MarkLogic对响应头中多个Set-Cookie的xdmp.http*支持

3

看起来 MarkLogic 服务端 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>

多个set-cookie头将无效使用http头。然而,我感到困惑,因为您在示例中显示了请求参数的使用,而不是请求头。 - grtjn
嗨@grtjin。响应头中的多个set-cookie是有效的,xdmp:http-get可以正确解析它(xdmp.httpGet不行)。我提供的URL是为了测试目的-它将在响应头中产生两个set-cookie条目。 - Fan Li
1
好的,现在我对事情更清楚了。我会提交一个错误报告,然后看看会有什么回应。 - grtjn
1个回答

1

JSON只能表示每个名称的一个字段。

JSON中似乎缺少对多值http头的支持。

有很多方法可以解决这个问题,但是所有方法都需要进行内部修复。

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


是的,这是我现在采取的方法,同时等待MarkLogic的修复。谢谢! - Fan Li

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接