loopback-next icon indicating copy to clipboard operation
loopback-next copied to clipboard

[bug] getting "HTTP/1.1 501 Not Implemented"

Open elyran opened this issue 1 year ago • 4 comments

Describe the bug

hi, i like the idea of your proxy, but, getting HTTP/1.1 501 Not Implemented for curl -v --proxy http://localhost:8080 -k https://worldtimeapi.org/api/timezone/Asia/Jerusalem. what am i missing? how can i make it work?

Logs

user1@user1-pc:~/Downloads$ curl -v --proxy http://localhost:8080 -k https://worldtimeapi.org/api/timezone/Asia/Jerusalem
*   Trying 127.0.0.1:8080...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
* allocate connect buffer!
* Establish HTTP proxy tunnel to worldtimeapi.org:443
> CONNECT worldtimeapi.org:443 HTTP/1.1
> Host: worldtimeapi.org:443
> User-Agent: curl/7.68.0
> Proxy-Connection: Keep-Alive
> 
< HTTP/1.1 501 Not Implemented
< 
* Received HTTP code 501 from proxy after CONNECT
* CONNECT phase completed!
* Closing connection 0
curl: (56) Received HTTP code 501 from proxy after CONNECT

Additional information

see Reproduction url for code

Reproduction

https://jsfiddle.net/g2fk1vph/

elyran avatar May 13 '24 21:05 elyran

I believe it's not a bug but rather a feature that this library doesn't (yet?) support. There's different methods to proxy HTTP requests, it can be done using the HTTP method CONNECT (https://en.wikipedia.org/wiki/HTTP_tunnel) or it can be done by supplying the full url instead of just a path in the HTTP request (https://en.wikipedia.org/wiki/Proxy_server#Web_proxy_servers). It seems this library supports the latter method but not the former.

# Start the proxy server
node -e 'const {HttpCachingProxy} = require("@loopback/http-caching-proxy"); const proxy = new HttpCachingProxy({cachePath: "/tmp/.proxy-cache", port: 3000}); proxy.start().then(() => console.log(`Proxy started at ${proxy.url}`))'

# Send a request 
curl -v --request-target 'https://worldtimeapi.org/api/timezone/Asia/Jerusalem' -H "Host: worldtimeapi.org" http://localhost:3000

Personally I'd love to see this library support the HTTP tunnel proxy method (that's what I was looking for when I came across this library) so maybe this ticket can be turned from a bug ticket into a feature request?

callumgare avatar May 16 '24 12:05 callumgare

Oh, I've just realised that I think the HTTP tunnel method would be largely useless since for HTTPS requests the proxy would just be transparently forwarding encrypted HTTPS traffic and thus would not be able to cache any content.

callumgare avatar May 16 '24 12:05 callumgare

I also vote for a feature request. Thank you, appreciate you trying to help out

elyran avatar May 16 '24 14:05 elyran

@elyran I came up with an ugly workaround which may or may not work in your situation. It's detailed in the snippets of code at the end of this post: https://github.com/apify/got-scraping/issues/140#issuecomment-2126865698

callumgare avatar May 23 '24 11:05 callumgare