Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gh-66897: Upgrade HTTP CONNECT to protocol HTTP/1.1 #8305

Merged
merged 17 commits into from
Apr 5, 2023
Merged

gh-66897: Upgrade HTTP CONNECT to protocol HTTP/1.1 #8305

merged 17 commits into from
Apr 5, 2023

Conversation

handlerbot
Copy link
Contributor

@handlerbot handlerbot commented Jul 16, 2018

Use protocol HTTP/1.1 when sending HTTP CONNECT tunnelling requests; generate Host: headers if one is not already provided (required by HTTP/1.1), convert IDN domains to punycode in HTTP CONNECT requests.

This builds upon and obsoletes #742. cc @berkerpeksag who reviewed that PR.

(I have signed the CLA, but it was less than a day ago, so the human review may not yet be completed.)

https://bugs.python.org/issue22708

Use protocol HTTP/1.1 when sending HTTP CONNECT tunnelling requests;
generate Host: headers if one is not already provided (required by
HTTP/1.1), convert IDN domains to punycode in HTTP CONNECT requests.
@handlerbot
Copy link
Contributor Author

Working on fix for BytesWarning now.

@berkerpeksag berkerpeksag self-requested a review July 17, 2018 14:07
@berkerpeksag
Copy link
Member

Thanks for updating that PR, I've just added this to my TODO list, but it may take a while.

Lib/http/client.py Outdated Show resolved Hide resolved
@handlerbot
Copy link
Contributor Author

Hi @berkerpeksag, circling back to this one, do you still have time and interest in the topic, or should we find another reviewer?

@akhayyat
Copy link

akhayyat commented Jul 2, 2019

Is this going to be merged any time soon?

@csabella csabella requested review from berkerpeksag and removed request for berkerpeksag February 6, 2020 22:42
@berkerpeksag
Copy link
Member

Sorry, I will try to review this PR this weekend.

@keelson
Copy link

keelson commented Sep 2, 2020

any update?

this bug currently blocks any integretion with the linkerd2 proxy as this throws a 400 bad request for connections inititaded by python apps

https://github.com/linkerd/linkerd2/pull/1200/files

@merwok
Copy link
Member

merwok commented Sep 23, 2020

It crashes in _tunnel on response line:

Can you show the exact error for this?

«crash» usually describes a segfault of the interpreter, is that what happended or was it a regular Python exception?

@merwok
Copy link
Member

merwok commented Sep 23, 2020

Please answer: what exactly do you see when you say «it crashes»?

@handlerbot
Copy link
Contributor Author

Hi folks -- would love to try again to get this merged. :-) cc @berkerpeksag who I solicited the original review from, and tagging in @orsenthil and @SethMichaelLarson (I think this is the same GitHub identity for the person who approved #20959, that's who I am looking for, sorry if I tagged the wrong person) who have also reviewed PRs for Lib/http/client.py in the past...

@handlerbot
Copy link
Contributor Author

Sigh, I did mean @sethmlarson not @SethMichaelLarson, sorry about that, the GitHub autocompleter was determined to mislead me!

@orsenthil orsenthil self-assigned this Mar 5, 2021
@orsenthil
Copy link
Member

Hi Michael, Thanks for following up. I will be able to review and bring it to a closure.

Lib/http/client.py Outdated Show resolved Hide resolved
@yilinjuang
Copy link

any updates on this? would love to see this merge as it prevents our services from using certain proxies. thanks

Lib/http/client.py Outdated Show resolved Hide resolved
@lukaszgalezewski
Copy link

why this PR is still open and not merged? and when can be merged? :)

@merwok merwok requested a review from orsenthil January 12, 2023 15:25
@orsenthil
Copy link
Member

@handlerbot , @lukaszgalezewski - apologies. None of us go to it. I will review this in coming week and target for upcoming Python release (3.12, if features are allowed) otherwise we can go with 3.13.

@l8huang
Copy link

l8huang commented Mar 15, 2023

@orsenthil do you have any update on this? Hope this can be merged in python 3.12. I recently run into this issue, even latest python can't set protocol version for HTTP CONNECT is kind of embarrassment. Thanks.

@roman-vynar
Copy link

3.12, if features are allowed

It's not a feature, it's a shame. HTTP 1.0 is horribly obsolete, host header was added to HTTP 1.1 in 1997, this is 3000 years ago.
This ticket was open in 2018. Today we are in 2023. If this is merged into 3.12 for October it will be great.

@arhadthedev arhadthedev changed the title bpo-22708: Upgrade HTTP CONNECT to protocol HTTP/1.1 gh-66897: Upgrade HTTP CONNECT to protocol HTTP/1.1 Mar 22, 2023
@arhadthedev arhadthedev added the stdlib Python modules in the Lib dir label Mar 22, 2023
@arhadthedev
Copy link
Member

@vstinner @gpshead could you review and possible merge this PR please? (as committers into Lib/http/client.py)

Copy link
Member

@orsenthil orsenthil left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good to me.

I reviewed for the choices made for handling unicode, and sending Host with HTTP 1.1 for CONNECT, when not specified. And verified if it is backwards compatible.

The feedback in the comments seem to say this helps for folks who had a need too.

This change looks good to me.

Apologize for taking long time.

@orsenthil orsenthil merged commit 1a8f862 into python:main Apr 5, 2023
gaogaotiantian pushed a commit to gaogaotiantian/cpython that referenced this pull request Apr 8, 2023
* bpo-22708: Upgrade HTTP CONNECT to protocol HTTP/1.1 (GH-NNNN)

Use protocol HTTP/1.1 when sending HTTP CONNECT tunnelling requests;
generate Host: headers if one is not already provided (required by
HTTP/1.1), convert IDN domains to punycode in HTTP CONNECT requests.

* Refactor tests to pass under -bb (fix ByteWarnings); missed some lines >80.

* Use consistent 'tunnelling' spelling in Lib/http/client.py

* Lib/test/test_httplib: Remove remnant of obsoleted test.

* Use dict.copy() not copy.copy()

* fix version changed

* Update Lib/http/client.py

Co-authored-by: bgehman <bgehman@users.noreply.github.com>

* Switch to for/else: syntax, as suggested

* Don't use for: else:

* Sure, fine, w/e

* Oops

* 1nm to the left

---------

Co-authored-by: Éric <merwok@netwok.org>
Co-authored-by: bgehman <bgehman@users.noreply.github.com>
Co-authored-by: Oleg Iarygin <oleg@arhadthedev.net>
warsaw pushed a commit to warsaw/cpython that referenced this pull request Apr 11, 2023
* bpo-22708: Upgrade HTTP CONNECT to protocol HTTP/1.1 (GH-NNNN)

Use protocol HTTP/1.1 when sending HTTP CONNECT tunnelling requests;
generate Host: headers if one is not already provided (required by
HTTP/1.1), convert IDN domains to punycode in HTTP CONNECT requests.

* Refactor tests to pass under -bb (fix ByteWarnings); missed some lines >80.

* Use consistent 'tunnelling' spelling in Lib/http/client.py

* Lib/test/test_httplib: Remove remnant of obsoleted test.

* Use dict.copy() not copy.copy()

* fix version changed

* Update Lib/http/client.py

Co-authored-by: bgehman <bgehman@users.noreply.github.com>

* Switch to for/else: syntax, as suggested

* Don't use for: else:

* Sure, fine, w/e

* Oops

* 1nm to the left

---------

Co-authored-by: Éric <merwok@netwok.org>
Co-authored-by: bgehman <bgehman@users.noreply.github.com>
Co-authored-by: Oleg Iarygin <oleg@arhadthedev.net>
@hugovk
Copy link
Member

hugovk commented May 20, 2023

@orsenthil Shall we also backport this to 3.11?

@gpshead
Copy link
Member

gpshead commented May 20, 2023

@orsenthil Shall we also backport this to 3.11?

No, this is more of a feature. it's a notable behavior change, not a mere unintended behavior fix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
stdlib Python modules in the Lib dir
Projects
None yet
Development

Successfully merging this pull request may close these issues.