[GH-ISSUE #1555] Support HTTP/3 #1547

Open
opened 2026-03-03 19:52:20 +03:00 by kerem · 17 comments
Owner

Originally created by @colinhumber on GitHub (Feb 22, 2023).
Original GitHub issue: https://github.com/ProxymanApp/Proxyman/issues/1555

Originally assigned to: @NghiaTranUIT on GitHub.

Description

Support HTTP/3 (QUIC)

Why this feature/change is important?

Our web server uses HTTP/3 for our API and currently we're unable to use Proxyman to observe network requests.

Originally created by @colinhumber on GitHub (Feb 22, 2023). Original GitHub issue: https://github.com/ProxymanApp/Proxyman/issues/1555 Originally assigned to: @NghiaTranUIT on GitHub. ## Description Support HTTP/3 (QUIC) ## Why this feature/change is important? Our web server uses HTTP/3 for our API and currently we're unable to use Proxyman to observe network requests.
Author
Owner

@NghiaTranUIT commented on GitHub (Feb 23, 2023):

Thanks for the request @colinhumber. When the HTTP/2 is ready (Almost done), I will push up the HTTP/3 👍

<!-- gh-comment-id:1441273847 --> @NghiaTranUIT commented on GitHub (Feb 23, 2023): Thanks for the request @colinhumber. When the [HTTP/2 is ready](https://github.com/ProxymanApp/Proxyman/issues/416#issuecomment-1439878308) (Almost done), I will push up the HTTP/3 👍
Author
Owner

@NghiaTranUIT commented on GitHub (Feb 23, 2023):

Just wondering: Do you Server support HTTP/2 or HTTP/1 during the SSL Negotiation 🤔

Or your server always speaks HTTP/3.

<!-- gh-comment-id:1441274323 --> @NghiaTranUIT commented on GitHub (Feb 23, 2023): Just wondering: Do you Server support HTTP/2 or HTTP/1 during the SSL Negotiation 🤔 Or your server always speaks HTTP/3.
Author
Owner

@colinhumber commented on GitHub (Feb 23, 2023):

I'll be honest, I'm not entirely sure 😅 When making requests to our site using Chrome, the protocol listed for the requests are h2 but the responses include an `alt-svc: h3=":443", h3-29=":443".

<!-- gh-comment-id:1441961175 --> @colinhumber commented on GitHub (Feb 23, 2023): I'll be honest, I'm not entirely sure 😅 When making requests to our site using Chrome, the protocol listed for the requests are `h2` but the responses include an `alt-svc: h3=":443", h3-29=":443".
Author
Owner

@NghiaTranUIT commented on GitHub (Feb 24, 2023):

If you're able to load your website with Proxyman, I believe your website and Proxyman (HTTP/2 Beta) are working fine by using the HTTP/2. It's good 😄

It negociates down to H2 during the SSL Negotiation.

alt-svc: h3=":443", h3-29=":443". means they're using HTTP/2, so the server advertise there's alternative servers 👍

<!-- gh-comment-id:1442621122 --> @NghiaTranUIT commented on GitHub (Feb 24, 2023): If you're able to load your website with Proxyman, I believe your website and Proxyman (HTTP/2 Beta) are working fine by using the HTTP/2. It's good 😄 It negociates down to H2 during the SSL Negotiation. `alt-svc: h3=":443", h3-29=":443".` means they're using HTTP/2, so the server advertise there's alternative servers 👍
Author
Owner

@colinhumber commented on GitHub (Feb 24, 2023):

I should have mentioned we aren't able to view traffic from our iOS apps. I've ensured all the certs are loaded, etc and traffic to our main API doesn't appear in Proxyman, but other traffic does. Is there anything I might be missing?

<!-- gh-comment-id:1442622615 --> @colinhumber commented on GitHub (Feb 24, 2023): I should have mentioned we aren't able to view traffic from our iOS apps. I've ensured all the certs are loaded, etc and traffic to our main API doesn't appear in Proxyman, but other traffic does. Is there anything I might be missing?
Author
Owner

@NghiaTranUIT commented on GitHub (Feb 24, 2023):

If you can see other HTTPS traffic, it means your setup is correct.

The problem is from your APIs. There are many reasons that can cause the problem:

  • Your Request is WebSocket => URLSessionWebsocket doesn't use the system Proxy
  • is called from the WKWebview/JavascriptCore => WKWebview doesn't use the System Proxy
  • Is called by using the 3rd-party networking library => It might bypass the System Proxy, you have to manually config.
  • Is it not HTTP/HTTPS protocol? Maybe TCP/UDP or gRPC.
  • Is from not a native iOS app (e.g. Flutter, React Native) -> Not use the System Proxy.

Can you elaborate on what your traffic is?

<!-- gh-comment-id:1442629542 --> @NghiaTranUIT commented on GitHub (Feb 24, 2023): If you can see other HTTPS traffic, it means your setup is correct. The problem is from your APIs. There are many reasons that can cause the problem: - Your Request is WebSocket => URLSessionWebsocket doesn't use the system Proxy - is called from the WKWebview/JavascriptCore => WKWebview doesn't use the System Proxy - Is called by using the 3rd-party networking library => It might bypass the System Proxy, you have to manually config. - Is it not HTTP/HTTPS protocol? Maybe TCP/UDP or gRPC. - Is from not a native iOS app (e.g. Flutter, React Native) -> Not use the System Proxy. Can you elaborate on what your traffic is?
Author
Owner

@colinhumber commented on GitHub (Feb 24, 2023):

Your Request is WebSocket => URLSessionWebsocket doesn't use the system Proxy

We're using a normal URLSession setup with URLSessionDataTask

is called from the WKWebview/JavascriptCore => WKWebview doesn't use the System Proxy

We're not using either of these in the main parts of the app

Is called by using the 3rd-party networking library => It might bypass the System Proxy, you have to manually config.

Our networking stack is in-house but nothing out of the ordinary, from what I can tell. Anything here we should keep an eye out for that might be causing issues?

Is it not HTTP/HTTPS protocol? Maybe TCP/UDP or gRPC.

All traffic is hitting HTTPS endpoints

Is from not a native iOS app (e.g. Flutter, React Native) -> Not use the System Proxy

The app is a normal UIKit/SwiftUI app.

One thing I just noticed was accessing our web app through Mobile Safari captures the API traffic, so it does seem like it's something with the app. Is there anything offhand you can think of from a configuration perspective that might be causing issues?

<!-- gh-comment-id:1442684052 --> @colinhumber commented on GitHub (Feb 24, 2023): > Your Request is WebSocket => URLSessionWebsocket doesn't use the system Proxy We're using a normal URLSession setup with URLSessionDataTask > is called from the WKWebview/JavascriptCore => WKWebview doesn't use the System Proxy We're not using either of these in the main parts of the app > Is called by using the 3rd-party networking library => It might bypass the System Proxy, you have to manually config. Our networking stack is in-house but nothing out of the ordinary, from what I can tell. Anything here we should keep an eye out for that might be causing issues? > Is it not HTTP/HTTPS protocol? Maybe TCP/UDP or gRPC. All traffic is hitting HTTPS endpoints > Is from not a native iOS app (e.g. Flutter, React Native) -> Not use the System Proxy The app is a normal UIKit/SwiftUI app. One thing I just noticed was accessing our web app through Mobile Safari captures the API traffic, so it does seem like it's something with the app. Is there anything offhand you can think of from a configuration perspective that might be causing issues?
Author
Owner

@colinhumber commented on GitHub (Feb 24, 2023):

I just tried accessing one of our endpoints in a test app just to rule out any specific configuration issues with our networking stack and the request was not logged 😞

<!-- gh-comment-id:1442693394 --> @colinhumber commented on GitHub (Feb 24, 2023): I just tried accessing one of our endpoints in a test app just to rule out any specific configuration issues with our networking stack and the request was not logged 😞
Author
Owner

@NghiaTranUIT commented on GitHub (Feb 24, 2023):

Do you use physical device with iOS 16 or iOS Simulator 🤔

If you can log your API traffic from the Mobile Safari, it means there is something odd with the app. Or the Simulator.

<!-- gh-comment-id:1442695186 --> @NghiaTranUIT commented on GitHub (Feb 24, 2023): Do you use physical device with iOS 16 or iOS Simulator 🤔 If you can log your API traffic from the Mobile Safari, it means there is something odd with the app. Or the Simulator.
Author
Owner

@NghiaTranUIT commented on GitHub (Feb 24, 2023):

To workaround, you can use the Atlantis framework: https://github.com/ProxymanApp/atlantis

It performs the Method Swizelling on all URLSession APIs, so you 100% can see the traffic.

One drawback of the Atlantis is that it's only for Inspector. Map Local or Breakpoint doesn't work.

<!-- gh-comment-id:1442696262 --> @NghiaTranUIT commented on GitHub (Feb 24, 2023): To workaround, you can use the Atlantis framework: https://github.com/ProxymanApp/atlantis It performs the Method Swizelling on all URLSession APIs, so you 100% can see the traffic. One drawback of the Atlantis is that it's only for Inspector. Map Local or Breakpoint doesn't work.
Author
Owner

@colinhumber commented on GitHub (Feb 24, 2023):

Ok, so this is really odd...

I was trying to capture traffic on the simulator with no luck. I installed the app on a physical device and setup the certificate and everything. The physical device successfully captured the traffic. Then I reset the simulator to make sure everything was green and now traffic is being captured on the simulator 😅

image
<!-- gh-comment-id:1442701926 --> @colinhumber commented on GitHub (Feb 24, 2023): Ok, so this is really odd... I was trying to capture traffic on the simulator with no luck. I installed the app on a physical device and setup the certificate and everything. The physical device successfully captured the traffic. Then I reset the simulator to make sure everything was green and now traffic is being captured on the simulator 😅 <img width="644" alt="image" src="https://user-images.githubusercontent.com/104855/221075668-406fc682-603b-4324-b6d6-f373d5063bdf.png">
Author
Owner

@NghiaTranUIT commented on GitHub (Feb 24, 2023):

@colinhumber if you don't mind, let;s try this build: https://download.proxyman.io/beta/Proxyman_4.3.1_Add_some_traffic_log.dmg

I added some production logs, which you can enable in the Help Menu -> Advanced -> Enable Debug Mode.

Then, quit the app, and re-open it via the terminal /Applications/Proxyman.app/Contents/MacOS/Proxyman

It would log all traffic that goes through the Proxyman Proxy Server (Before the SSL Handshake happens). This log is added during the CONNECT request.

Screenshot 2023-02-24 at 09 47 23

I guess we can verify whether or not your API traffic is:

  • Go through the Proxyman app, but it doesn't show on the Main Table View -> Proxyman Bug
  • Or, it never goes through the Proxyman app -> Apple Bug or some sort
<!-- gh-comment-id:1442723636 --> @NghiaTranUIT commented on GitHub (Feb 24, 2023): @colinhumber if you don't mind, let;s try this build: https://download.proxyman.io/beta/Proxyman_4.3.1_Add_some_traffic_log.dmg I added some production logs, which you can enable in the Help Menu -> Advanced -> Enable Debug Mode. Then, quit the app, and re-open it via the terminal `/Applications/Proxyman.app/Contents/MacOS/Proxyman` It would log all traffic that goes through the Proxyman Proxy Server (Before the SSL Handshake happens). This log is added during the CONNECT request. <img width="682" alt="Screenshot 2023-02-24 at 09 47 23" src="https://user-images.githubusercontent.com/5878421/221079802-1a8aa525-0c68-4561-8fc5-082c62f3c3d9.png"> -------------- I guess we can verify whether or not your API traffic is: - Go through the Proxyman app, but it doesn't show on the Main Table View -> Proxyman Bug ❌ - Or, it never goes through the Proxyman app -> Apple Bug or some sort ❌
Author
Owner

@colinhumber commented on GitHub (Feb 24, 2023):

Something odd is going on. It definitely seems like a simulator issue. I can still capture traffic from a device but simulator traffic is no longer being captured.

When testing with debug mode on with my device I see the traffic come through on the console and the app. Initially I wasn't able to see traffic on the simulator, but after restarting the simulator a number of times it eventually works, but seems very flaky. Sometimes it captures, sometimes it doesn't.

<!-- gh-comment-id:1442766312 --> @colinhumber commented on GitHub (Feb 24, 2023): Something odd is going on. It definitely seems like a simulator issue. I can still capture traffic from a device but simulator traffic is no longer being captured. When testing with debug mode on with my device I see the traffic come through on the console and the app. Initially I wasn't able to see traffic on the simulator, but after restarting the simulator a number of times it eventually works, but seems very flaky. Sometimes it captures, sometimes it doesn't.
Author
Owner

@NghiaTranUIT commented on GitHub (Feb 24, 2023):

So, it's an Apple Simulator Bug.

There is similar report on the iOS 16 Simulator: https://github.com/ProxymanApp/Proxyman/issues/1268#issuecomment-1238595340

Basically, some API is missing, some are shown. Restart the Simulator might fix it.

<!-- gh-comment-id:1442767615 --> @NghiaTranUIT commented on GitHub (Feb 24, 2023): So, it's an Apple Simulator Bug. There is similar report on the iOS 16 Simulator: https://github.com/ProxymanApp/Proxyman/issues/1268#issuecomment-1238595340 Basically, some API is missing, some are shown. Restart the Simulator might fix it.
Author
Owner

@colinhumber commented on GitHub (Feb 24, 2023):

Ah I must have totally missed that ticket. Yeah definitely seems like it. Thanks for all the help! I really appreciate it!

<!-- gh-comment-id:1442770681 --> @colinhumber commented on GitHub (Feb 24, 2023): Ah I must have totally missed that ticket. Yeah definitely seems like it. Thanks for all the help! I really appreciate it!
Author
Owner

@djtarazona commented on GitHub (Apr 9, 2023):

Thanks for the request @colinhumber. When the HTTP/2 is ready (Almost done), I will push up the HTTP/3 👍

Thanks @NghiaTranUIT! ❤️ We're looking forward to HTTP/3 support as well. 🙏

<!-- gh-comment-id:1501228808 --> @djtarazona commented on GitHub (Apr 9, 2023): > Thanks for the request @colinhumber. When the [HTTP/2 is ready](https://github.com/ProxymanApp/Proxyman/issues/416#issuecomment-1439878308) (Almost done), I will push up the HTTP/3 👍 Thanks @NghiaTranUIT! ❤️ We're looking forward to HTTP/3 support as well. 🙏
Author
Owner

@marcelocecin commented on GitHub (Oct 6, 2024):

https://mitmproxy.org/posts/releases/mitmproxy-11/

<!-- gh-comment-id:2395430284 --> @marcelocecin commented on GitHub (Oct 6, 2024): https://mitmproxy.org/posts/releases/mitmproxy-11/
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/Proxyman#1547
No description provided.