Does you server barf if your clients close the connection before it's fully downloaded? Well, there's an easy way to find out. You can use this Python script:
import sys
import requests
url = sys.argv[1]
assert '://' in url, url
r = requests.get(url, stream=True)
if r.encoding is None:
r.encoding = 'utf-8'
for chunk in r.iter_content(1024, decode_unicode=True):
break
I use the xh
CLI tool a lot. It's like curl
but better in some things. By default, if you use --headers
it will make a regular GET
request but close the connection as soon as it has gotten all the headers. E.g.
▶ xh --headers https://www.peterbe.com HTTP/2.0 200 OK cache-control: public,max-age=3600 content-type: text/html; charset=utf-8 date: Wed, 30 Mar 2022 12:37:09 GMT etag: "3f336-Rohm58s5+atf5Qvr04kmrx44iFs" server: keycdn-engine strict-transport-security: max-age=63072000; includeSubdomains; preload vary: Accept-Encoding x-cache: HIT x-content-type-options: nosniff x-edge-location: usat x-frame-options: SAMEORIGIN x-middleware-cache: hit x-powered-by: Express x-shield: active x-xss-protection: 1; mode=block
That's not be confused with doing HEAD
like curl -I ...
.
So either with xh
or the Python script above, you can get that same effect. It's a useful trick when you want to make sure your (async) server doesn't attempt to do weird stuff with the "Response" object after the connection has closed.
Comments