Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jetty-更改请求头的顺序_Java_Header_Request_Jetty - Fatal编程技术网

Java Jetty-更改请求头的顺序

Java Jetty-更改请求头的顺序,java,header,request,jetty,Java,Header,Request,Jetty,jetty似乎改变了接收到的报头的顺序。我使用HttpServletRequestWrapper对象上的getHeaderNames()收集它们 您知道是否有办法使它们与请求中设置的顺序相同吗?头顺序仅保证在相同的头名称内(根据HTTP规范和Servlet规范) 意思是 Host: localhost Cookie: foo Cookie: bar Cookie: baz Accept: gzip 使用getHeaderNames()只会返回头名称的无序集合[Cookie,Host,Accep

jetty似乎改变了接收到的报头的顺序。我使用
HttpServletRequestWrapper
对象上的
getHeaderNames()
收集它们


您知道是否有办法使它们与请求中设置的顺序相同吗?

头顺序仅保证在相同的头名称内(根据HTTP规范和Servlet规范)

意思是

Host: localhost
Cookie: foo
Cookie: bar
Cookie: baz
Accept: gzip
使用
getHeaderNames()
只会返回头名称的无序集合
[Cookie,Host,Accept]


但是
getHeaders(“Cookie”)
将返回顺序
[foo,bar,baz]

为了回答我的问题,标题按照请求的顺序存储在一个数组中。但是,方法
getHeaderNames()
基于数组的每个元素构建一个集合。集合不保持元素的顺序

旁路问题的一个解决方案是使用
LinkedHashSet
而不是
HashSet
覆盖类
org.eclipse.jetty.http.HttpFields
的方法
getFieldNameCollection()

另一个影响较小的解决方案是编写一个静态定制 方法
getHeaderNames()
,类似如下:

static public String buildHeaderList(ServletRequest request){
    StringJoiner headerList = new StringJoiner(",");

    Request req = (Request) request;
    HttpFields fields = req.getMetaData().getFields();

    for (HttpField f : fields)
    {
        if (f!=null)
            headerList.add(f.getName());
    }

    return headerList.toString();
}
请求对象的类型为
org.eclipse.jetty.server.request


也许还有其他更优雅的解决方案。请随意添加。

嗨,Joakim,谢谢你的回答。我的目标是获得标题的有序列表,而不是标题的值。我知道HTTP/1.1规范并不能保证头的顺序,但对于特定的需要,我想得到它。似乎
getHeaderNames()
总是以相同的顺序返回头,但不是以请求的顺序返回头,因此我想知道是否有办法实现这一点。正如前面所述,Servlet规范不支持这一点。这一事实也适用于SPDY和HTTP/2。还要知道中介机构(代理、负载平衡器等)可以更改顺序以满足自己的需要。目的是什么?它没有在HTTP RFCs中定义。你怎么可能需要依赖它呢?