org.glassfish.jersey.message.internal.HeaderValueException:无法解析“Content-Type”标头值:“multipart / byteranges”

时间:2016-07-28 17:00:18

标签: java http header

我正尝试使用T2来从AWS cloudfront获取多部分范围字节,如:

InvocationBuilder.header

但我得到了这个:

invocationBuilder.header("Range", "bytes=100-200,300-400,500-600\r");

我尝试使用cmd中的curl,效果很好。有人帮吗?感谢。

1 个答案:

答案 0 :(得分:0)

CloudFront 在其对 MultiPart 范围请求的响应中返回无效的内容类型标头。

具体来说,边界参数值包含一个必须被引用的“:”。

我刚刚向 AWS 提交了一个错误,但我们会看看会发生什么。你原来的问题是 5 岁,这让我没有信心?。

示例多部分请求:

$ curl -vv https://foo.cloudfront.net/bar.bin -H "Range: bytes=1-100,150-200"
<snip>
* Connection state changed (MAX_CONCURRENT_STREAMS == 128)!
< HTTP/2 206 
< content-type: multipart/byteranges; boundary=CloudFront:32FA314F82E87793C3B34E2D1FCCE8ED
<snip>

由于它们的边界参数中包含冒号,因此必须像这样引用参数:

< content-type: multipart/byteranges; boundary="CloudFront:32FA314F82E87793C3B34E2D1FCCE8ED"

这是根据RFC1521

<块引用>

警告实现者:内容参数的语法-
类型字段是这样的,通常需要将
括起来 内容类型行上引号中的边界。这并不总是
必要的,但从不伤害。实施者应该确保研究 语法仔细,以免产生非法的Content-type
领域。因此,典型的多部分 Content-Type 头字段可能
看起来像这样:

             Content-Type: multipart/mixed;
                  boundary=gc0p4Jq0M2Yt08jU534c0p

但以下是非法的:

             Content-Type: multipart/mixed;
                  boundary=gc0p4Jq0M:2Yt08jU534c0p

(因为冒号)并且必须改为表示为

             Content-Type: multipart/mixed;
                  boundary="gc0p4Jq0M:2Yt08jU534c0p"