You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by Jeffrey Dever <js...@sympatico.ca> on 2003/01/31 17:17:27 UTC
Response Header ordering
HeaderSet is not a good name, because a set implies "unordered".
Perhaps HeaderList, which could implement the List interface (but that
might be a little fat). Or just plain Headers with custom methods as
you described.
Also might want a somthing like "String toExternalForm(String name)"
method that produces:
name1: value1
name1: value2, value3
name1: value4
And mabye even takes in a "boolean condensed" that would produce:
name1: value1, value2, value3, value4
The scope of what you are suggesting is reasonable. Somthing like that
needs to be done to address that bug which is marked for the 2.0 release
anyway.
Jandalf.
Michael Becke wrote:
> I agree that Headers are everywhere any that some of their use is
> questionable. I think making a change to the Header class itself is
> not a good idea since it is used ubiquitously and mostly works. My
> plan was to focus more on the collection of Headers. As you say the
> current HashMap storage is inadequate but efficient. Though choice
> of algorithm is of little importance when working with such a small
> data set. It seems to me that the best solution is one that uses a
> custom storage method(a new class) for the headers. That way we can
> enforce/control the functionality we wish to have for querying the
> headers. The new class might look something like this:
>
> HeaderSet {
>
> // get's all headers in the order they were added
> Header[] getAllHeaders()
>
> // gets the headers for the given name, again in order
> Header[] getHeaders(String name)
>
> boolean containsHeader(String name)
>
> }
>
> The following changes would be made to HttpMethod:
>
> HttpMethod {
>
> void setRequestHeaders(HeaderSet)
>
> HeaderSet getResponseHeaderSet()
>
> HeaderSet getRequestHeaderSet()
>
> HeaderSet getResonseFooterSet()
>
> // would be changed to call getHeaders(String) on the HeaderSet and
> // combine multiple values with a ","
> Header getResponseHeader(String)
>
> }
>
> The existing header methods in HttpMethod would be deprecated in
> deference to the new HeaderSets.
>
> Doing it this way I think would successfully move the header storage
> to a new class but would allow for API compatibility. As far as
> wether or not we need to make this change for 2.0 or 2.1, I'm not
> sure. We should probably post the question to the list and see what
> people think. I'm happy to do it now, but there are so many changes
> in 2.0 already it may be difficult for users to catch up.
>
> Mike
>
>
> On Friday, January 31, 2003, at 01:54 AM, Jeffrey Dever wrote:
>
>> Well, at one point I was going to rewrite Header and NameValuePair,
>> but the more I looked at the more scared I became. 8-E (that was
>> supposed to be a smiley of me wide eyed and gritting my teeth). The
>> interheritance hierachy has more classes in it, and some of the code
>> is downright terrible. I decided that I couldn't do it safely and
>> let it wait untill regexp came along.
>>
>> About header storage, I think that a compressed hashtable of a few
>> entries is foolish: order is removed, the hashtable is fat and what
>> you put in is not what you get out. It makes httpclient poor for
>> testing response headers and always casts some doubt when
>> troubleshooting an application problem with the wirelog.
>> But the compression and the map interface sure does give convienent
>> access to the headers. I don't like the idea of a call to
>> getHeader(String) and having to iterate through a list all the
>> time. I don't like getNumHeaders(String). I don't like having to
>> iterate over a list to find a particular header name. I can't think
>> of an ideal datastructure native in java. Somone suggested a
>> SequencedHashMap. I dunno. Maybe we need somthing custom.
>>
>> Do I think this warrents a new take on header storage? Yes. But
>> Headers are *everywhere*, including the public interface, so there
>> is the potential to be quite disruptive. I'm reconsidering wether
>> if this is a good idea to do in the 2.0 timeframe. We could just
>> write it up as a known issue and tackle other, easier to solve
>> problems and revisit it early in 2.1
>>
>> What do you think?
>>
>> -jsd
>>
>>
>> Michael Becke wrote:
>>
>>> Hi Jeff,
>>>
>>> Yes, I was just looking through rfc2616 and noticed the part about
>>> compressing headers into a single value. Sure, it's an okay thing
>>> to do, but it's not very helpful:) I also noticed that the
>>> header parsing code is essentially duplicated (though in lesser
>>> form) inside of ChunkedInputStream. I had no idea what footer
>>> values were until I came across that one. I'm thinking about
>>> moving the Header/Footer parsing and storage code into a whole
>>> other class and enhancing it some (adding ordering, duplicates).
>>> Do you think this warrants a new take on the idea of header
>>> storage or should the header storage semantics just be changed,
>>> simplified?
>>>
>>> Mike
>>>
>>> On Thursday, January 30, 2003, at 10:38 PM, Jeffrey Dever wrote:
>>>
>>>> Hey Mike,
>>>>
>>>> This is a good one. I had a fight with the first release prime
>>>> (Rodney Waldoff) about the compression of multiple headers of the
>>>> same type into a single header. He maintained that it was
>>>> allowed by rfc2616 (which it is) and was therefore OK.
>>>> But if you are using httpclient to check the exact response from
>>>> the server, you can't because its munged into somthing else. It
>>>> also makes the friggin header values more difficult to parse.
>>>> Its kinda nice having a map of headers, but they are simply not
>>>> order preserving. And comon, do we really need a hashtable to
>>>> store 5 or 6 entries?
>>>>
>>>> -jsd
>>>>
>>>>
>>>> bugzilla@apache.org wrote:
>>>>
>>>>> DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED
>>>>> COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
>>>>> <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=12244>.
>>>>> ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED
>>>>> IN THE BUG DATABASE.
>>>>>
>>>>> http://nagoya.apache.org/bugzilla/show_bug.cgi?id=12244
>>>>>
>>>>> Response Header ordering not preserved from the server
>>>>>
>>>>> becke@u.washington.edu changed:
>>>>>
>>>>> What |Removed |Added
>>>>> --------------------------------------------------------------------
>>>>> -- ------
>>>>> Status|NEW |ASSIGNED
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>