Mailing List Archive

HTTP and HTTP/1.x separation
You are invited to have a look at my PR for separating HTTP/1.x processing from
generic HTTP protocol handling and verification:

https://github.com/apache/httpd/pull/291

I made a description of the changes in the PR that helps reviewing it (I hope).

"Changes appear larger than they really are"

A lot is code split+move from mod_http to mod_http1. In mod_http2, changes are
mainly removals of quirks necessary so far.


Kind Regards,
Stefan
Re: HTTP and HTTP/1.x separation [ In reply to ]
On 24/03/2022 13:21, Stefan Eissing wrote:
> You are invited to have a look at my PR for separating HTTP/1.x processing from
> generic HTTP protocol handling and verification:
>
> https://github.com/apache/httpd/pull/291
>
> I made a description of the changes in the PR that helps reviewing it (I hope).
>
> "Changes appear larger than they really are"
>
> A lot is code split+move from mod_http to mod_http1. In mod_http2, changes are
> mainly removals of quirks necessary so far.
>
>
> Kind Regards,
> Stefan
>

Something fishy:
http/1.1:
+++

< HTTP/1.1 200 OK
< Date: Mon, 28 Mar 2022 13:48:23 GMT
< Server: Apache/2.5.1-dev (Unix) OpenSSL/1.1.1n
< Last-Modified: Fri, 25 Mar 2022 15:47:39 GMT
< ETag: "bf-5db0ce1e1e93e"
< Accept-Ranges: bytes
< Content-Length: 191
< Content-Type: text/html

+++
http/2:
+++
< HTTP/2 200
< last-modified: Fri, 25 Mar 2022 15:47:39 GMT
< etag: "bf-5db0ce1e1e93e"
< accept-ranges: bytes
< content-length: 191
< content-type: text/html
+++

Did I miss something?

--
Cheers

Jean-Frederic
Re: HTTP and HTTP/1.x separation [ In reply to ]
> Am 28.03.2022 um 15:52 schrieb jean-frederic clere <jfclere@gmail.com>:
>
> On 24/03/2022 13:21, Stefan Eissing wrote:
>> You are invited to have a look at my PR for separating HTTP/1.x processing from
>> generic HTTP protocol handling and verification:
>> https://github.com/apache/httpd/pull/291
>> I made a description of the changes in the PR that helps reviewing it (I hope).
>> "Changes appear larger than they really are"
>> A lot is code split+move from mod_http to mod_http1. In mod_http2, changes are
>> mainly removals of quirks necessary so far.
>> Kind Regards,
>> Stefan
>
> Something fishy:
> http/1.1:
> +++
>
> < HTTP/1.1 200 OK
> < Date: Mon, 28 Mar 2022 13:48:23 GMT
> < Server: Apache/2.5.1-dev (Unix) OpenSSL/1.1.1n
> < Last-Modified: Fri, 25 Mar 2022 15:47:39 GMT
> < ETag: "bf-5db0ce1e1e93e"
> < Accept-Ranges: bytes
> < Content-Length: 191
> < Content-Type: text/html
>
> +++
> http/2:
> +++
> < HTTP/2 200
> < last-modified: Fri, 25 Mar 2022 15:47:39 GMT
> < etag: "bf-5db0ce1e1e93e"
> < accept-ranges: bytes
> < content-length: 191
> < content-type: text/html
> +++
>
> Did I miss something?

No, you found something. The generic server headers are not applied, it seems. Will look into this and add a test.

> --
> Cheers
>
> Jean-Frederic
>
Re: HTTP and HTTP/1.x separation [ In reply to ]
On 28/03/2022 16:03, Stefan Eissing wrote:
>
>
>> Am 28.03.2022 um 15:52 schrieb jean-frederic clere <jfclere@gmail.com>:
>>
>> On 24/03/2022 13:21, Stefan Eissing wrote:
>>> You are invited to have a look at my PR for separating HTTP/1.x processing from
>>> generic HTTP protocol handling and verification:
>>> https://github.com/apache/httpd/pull/291
>>> I made a description of the changes in the PR that helps reviewing it (I hope).
>>> "Changes appear larger than they really are"
>>> A lot is code split+move from mod_http to mod_http1. In mod_http2, changes are
>>> mainly removals of quirks necessary so far.
>>> Kind Regards,
>>> Stefan
>>
>> Something fishy:
>> http/1.1:
>> +++
>>
>> < HTTP/1.1 200 OK
>> < Date: Mon, 28 Mar 2022 13:48:23 GMT
>> < Server: Apache/2.5.1-dev (Unix) OpenSSL/1.1.1n
>> < Last-Modified: Fri, 25 Mar 2022 15:47:39 GMT
>> < ETag: "bf-5db0ce1e1e93e"
>> < Accept-Ranges: bytes
>> < Content-Length: 191
>> < Content-Type: text/html
>>
>> +++
>> http/2:
>> +++
>> < HTTP/2 200
>> < last-modified: Fri, 25 Mar 2022 15:47:39 GMT
>> < etag: "bf-5db0ce1e1e93e"
>> < accept-ranges: bytes
>> < content-length: 191
>> < content-type: text/html
>> +++
>>
>> Did I miss something?
>
> No, you found something. The generic server headers are not applied, it seems. Will look into this and add a test.
>
>> --
>> Cheers
>>
>> Jean-Frederic
>>
>

I think we have NO http/2 tests in the httpd-framework test, correct?

--
Cheers

Jean-Frederic
Re: HTTP and HTTP/1.x separation [ In reply to ]
> Am 28.03.2022 um 17:15 schrieb jean-frederic clere <jfclere@gmail.com>:
>
> On 28/03/2022 16:03, Stefan Eissing wrote:
>>> Am 28.03.2022 um 15:52 schrieb jean-frederic clere <jfclere@gmail.com>:
>>>
>>> On 24/03/2022 13:21, Stefan Eissing wrote:
>>>> You are invited to have a look at my PR for separating HTTP/1.x processing from
>>>> generic HTTP protocol handling and verification:
>>>> https://github.com/apache/httpd/pull/291
>>>> I made a description of the changes in the PR that helps reviewing it (I hope).
>>>> "Changes appear larger than they really are"
>>>> A lot is code split+move from mod_http to mod_http1. In mod_http2, changes are
>>>> mainly removals of quirks necessary so far.
>>>> Kind Regards,
>>>> Stefan
>>>
>>> Something fishy:
>>> http/1.1:
>>> +++
>>>
>>> < HTTP/1.1 200 OK
>>> < Date: Mon, 28 Mar 2022 13:48:23 GMT
>>> < Server: Apache/2.5.1-dev (Unix) OpenSSL/1.1.1n
>>> < Last-Modified: Fri, 25 Mar 2022 15:47:39 GMT
>>> < ETag: "bf-5db0ce1e1e93e"
>>> < Accept-Ranges: bytes
>>> < Content-Length: 191
>>> < Content-Type: text/html
>>>
>>> +++
>>> http/2:
>>> +++
>>> < HTTP/2 200
>>> < last-modified: Fri, 25 Mar 2022 15:47:39 GMT
>>> < etag: "bf-5db0ce1e1e93e"
>>> < accept-ranges: bytes
>>> < content-length: 191
>>> < content-type: text/html
>>> +++
>>>
>>> Did I miss something?
>> No, you found something. The generic server headers are not applied, it seems. Will look into this and add a test.
>>> --
>>> Cheers
>>>
>>> Jean-Frederic
>>>
>
> I think we have NO http/2 tests in the httpd-framework test, correct?

Correct. When I first tried, the perl http2 framework was not very mature and I turned to what ultimately became the pytest suite.

>
> --
> Cheers
>
> Jean-Frederic
>
Re: HTTP and HTTP/1.x separation [ In reply to ]
On 28/03/2022 17:25, Stefan Eissing wrote:
> Correct. When I first tried, the perl http2 framework was not very mature

Yep the perl http2 module looks abandoned :-(

--
Cheers

Jean-Frederic
Re: HTTP and HTTP/1.x separation [ In reply to ]
> Am 28.03.2022 um 15:52 schrieb jean-frederic clere <jfclere@gmail.com>:
>
> On 24/03/2022 13:21, Stefan Eissing wrote:
>> You are invited to have a look at my PR for separating HTTP/1.x processing from
>> generic HTTP protocol handling and verification:
>> https://github.com/apache/httpd/pull/291
>> I made a description of the changes in the PR that helps reviewing it (I hope).
>> "Changes appear larger than they really are"
>> A lot is code split+move from mod_http to mod_http1. In mod_http2, changes are
>> mainly removals of quirks necessary so far.
>> Kind Regards,
>> Stefan
>
> Something fishy:
> http/1.1:
> +++
>
> < HTTP/1.1 200 OK
> < Date: Mon, 28 Mar 2022 13:48:23 GMT
> < Server: Apache/2.5.1-dev (Unix) OpenSSL/1.1.1n
> < Last-Modified: Fri, 25 Mar 2022 15:47:39 GMT
> < ETag: "bf-5db0ce1e1e93e"
> < Accept-Ranges: bytes
> < Content-Length: 191
> < Content-Type: text/html
>
> +++
> http/2:
> +++
> < HTTP/2 200
> < last-modified: Fri, 25 Mar 2022 15:47:39 GMT
> < etag: "bf-5db0ce1e1e93e"
> < accept-ranges: bytes
> < content-length: 191
> < content-type: text/html
> +++
>
> Did I miss something?

Just added the fix to the PR:

*) core, mod_http1, mod_http: moved the handling of the standard
response headers `Date` and `Server` from mod_http1 into the
generic HTTP protocol handling.
Response buckets not always carry those headers (values preserved
from proxied responses), irregardless of the HTTP protocol
versions involved.
mod_http1: the serialization of response header into HTTP/1.x
format always writes `Date` and `Server` first if present. This
assured backward compatibility with clients who are accustomed
to this order.

Kind Regards,

Stefan

>
> --
> Cheers
>
> Jean-Frederic
>
Re: HTTP and HTTP/1.x separation [ In reply to ]
On 30/03/2022 11:11, Stefan Eissing wrote:
>
>
>> Am 28.03.2022 um 15:52 schrieb jean-frederic clere <jfclere@gmail.com>:
>>
>> On 24/03/2022 13:21, Stefan Eissing wrote:
>>> You are invited to have a look at my PR for separating HTTP/1.x processing from
>>> generic HTTP protocol handling and verification:
>>> https://github.com/apache/httpd/pull/291
>>> I made a description of the changes in the PR that helps reviewing it (I hope).
>>> "Changes appear larger than they really are"
>>> A lot is code split+move from mod_http to mod_http1. In mod_http2, changes are
>>> mainly removals of quirks necessary so far.
>>> Kind Regards,
>>> Stefan
>>
>> Something fishy:
>> http/1.1:
>> +++
>>
>> < HTTP/1.1 200 OK
>> < Date: Mon, 28 Mar 2022 13:48:23 GMT
>> < Server: Apache/2.5.1-dev (Unix) OpenSSL/1.1.1n
>> < Last-Modified: Fri, 25 Mar 2022 15:47:39 GMT
>> < ETag: "bf-5db0ce1e1e93e"
>> < Accept-Ranges: bytes
>> < Content-Length: 191
>> < Content-Type: text/html
>>
>> +++
>> http/2:
>> +++
>> < HTTP/2 200
>> < last-modified: Fri, 25 Mar 2022 15:47:39 GMT
>> < etag: "bf-5db0ce1e1e93e"
>> < accept-ranges: bytes
>> < content-length: 191
>> < content-type: text/html
>> +++
>>
>> Did I miss something?
>
> Just added the fix to the PR:
>
> *) core, mod_http1, mod_http: moved the handling of the standard
> response headers `Date` and `Server` from mod_http1 into the
> generic HTTP protocol handling.
> Response buckets not always carry those headers (values preserved
> from proxied responses), irregardless of the HTTP protocol
> versions involved.
> mod_http1: the serialization of response header into HTTP/1.x
> format always writes `Date` and `Server` first if present. This
> assured backward compatibility with clients who are accustomed
> to this order.

Thanks my tests are passing now.

>
> Kind Regards,
>
> Stefan
>
>>
>> --
>> Cheers
>>
>> Jean-Frederic
>>
>


--
Cheers

Jean-Frederic
Re: HTTP and HTTP/1.x separation [ In reply to ]
just a heads up: I will replace this PR with a series of smaller ones.

The accumulated changes are too large to make someone review and have
an opinion about it in reasonable time. I will therefore introduce the
changes in small steps, trying to make them each easier to read.

I have the first one sitting here locally and will publish that once
our CI is working again (and I can be sure that they do as well).

Kind Regards,
Stefan


> Am 31.03.2022 um 09:40 schrieb jean-frederic clere <jfclere@gmail.com>:
>
> On 30/03/2022 11:11, Stefan Eissing wrote:
>>> Am 28.03.2022 um 15:52 schrieb jean-frederic clere <jfclere@gmail.com>:
>>>
>>> On 24/03/2022 13:21, Stefan Eissing wrote:
>>>> You are invited to have a look at my PR for separating HTTP/1.x processing from
>>>> generic HTTP protocol handling and verification:
>>>> https://github.com/apache/httpd/pull/291
>>>> I made a description of the changes in the PR that helps reviewing it (I hope).
>>>> "Changes appear larger than they really are"
>>>> A lot is code split+move from mod_http to mod_http1. In mod_http2, changes are
>>>> mainly removals of quirks necessary so far.
>>>> Kind Regards,
>>>> Stefan
>>>
>>> Something fishy:
>>> http/1.1:
>>> +++
>>>
>>> < HTTP/1.1 200 OK
>>> < Date: Mon, 28 Mar 2022 13:48:23 GMT
>>> < Server: Apache/2.5.1-dev (Unix) OpenSSL/1.1.1n
>>> < Last-Modified: Fri, 25 Mar 2022 15:47:39 GMT
>>> < ETag: "bf-5db0ce1e1e93e"
>>> < Accept-Ranges: bytes
>>> < Content-Length: 191
>>> < Content-Type: text/html
>>>
>>> +++
>>> http/2:
>>> +++
>>> < HTTP/2 200
>>> < last-modified: Fri, 25 Mar 2022 15:47:39 GMT
>>> < etag: "bf-5db0ce1e1e93e"
>>> < accept-ranges: bytes
>>> < content-length: 191
>>> < content-type: text/html
>>> +++
>>>
>>> Did I miss something?
>> Just added the fix to the PR:
>> *) core, mod_http1, mod_http: moved the handling of the standard
>> response headers `Date` and `Server` from mod_http1 into the
>> generic HTTP protocol handling.
>> Response buckets not always carry those headers (values preserved
>> from proxied responses), irregardless of the HTTP protocol
>> versions involved.
>> mod_http1: the serialization of response header into HTTP/1.x
>> format always writes `Date` and `Server` first if present. This
>> assured backward compatibility with clients who are accustomed
>> to this order.
>
> Thanks my tests are passing now.
>
>> Kind Regards,
>> Stefan
>>>
>>> --
>>> Cheers
>>>
>>> Jean-Frederic
>>>
>
>
> --
> Cheers
>
> Jean-Frederic