• Posts
  • RSS
  • ◂◂RSS
  • Contact

  • Debug Headers with GET

    November 17th, 2020
    tech  [html]
    HTTP offers a convenient way to download only the headers: send a HEAD request:
    $ telnet www.example.com 80
    Trying 93.184.216.34...
    Connected to www.example.com.
    Escape character is '^]'.
    HEAD / HTTP/1.1
    Host: www.example.com
    
    HTTP/1.1 200 OK
    Content-Encoding: gzip
    Accept-Ranges: bytes
    Age: 325063
    Cache-Control: max-age=604800
    Content-Type: text/html; charset=UTF-8
    Date: Tue, 17 Nov 2020 02:29:50 GMT
    Etag: "3147526947"
    Expires: Tue, 24 Nov 2020 02:29:50 GMT
    Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
    Server: ECS (dcb/7F82)
    X-Cache: HIT
    Content-Length: 648
    
    Of course you wouldn't usually manually type into telnet, you'd use something like curl:
    $ curl -I http://www.example.com
    HTTP/1.1 200 OK
    Accept-Ranges: bytes
    Age: 326121
    Cache-Control: max-age=604800
    Content-Type: text/html; charset=UTF-8
    Date: Tue, 17 Nov 2020 02:47:38 GMT
    Etag: "3147526947"
    Expires: Tue, 24 Nov 2020 02:47:38 GMT
    Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
    Server: ECS (dcb/7EC9)
    X-Cache: HIT
    Content-Length: 1256
    
    It's defined in RFC 7231:
    The HEAD method is identical to GET except that the server MUST NOT send a message body in the response (i.e., the response terminates at the end of the header section). The server SHOULD send the same header fields in response to a HEAD request as it would have sent if the request had been a GET, except that the payload header fields MAY be omitted.

    Unfortunately, HEAD is a trap. When you are trying to debug strange server behavior, it is much safer to send GET requests and throw away the body (ex, ex). Not only is "SHOULD" just a recommendation, but even if this were a "MUST" you could bet some servers would mishandle it. Counterfactuals are hard!

    While differences are rare, always debugging by requesting the body like a normal client would, and then discarding it, means one fewer way that your debug request differs from a real one:

    $ curl -sS -D- -o/dev/null http://www.example.com
    HTTP/1.1 200 OK
    Accept-Ranges: bytes
    Age: 326124
    Cache-Control: max-age=604800
    Content-Type: text/html; charset=UTF-8
    Date: Tue, 17 Nov 2020 02:47:41 GMT
    Etag: "3147526947"
    Expires: Tue, 24 Nov 2020 02:47:41 GMT
    Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
    Server: ECS (dcb/7EC9)
    Vary: Accept-Encoding
    X-Cache: HIT
    Content-Length: 1256
    

    Going farther in the same direction, it's even better to start with "Copy as cURL":

    And then add the -sS -D- -o/dev/null to get the headers if that's all you want.

    Comment via: facebook, lesswrong

    Recent posts on blogs I like:

    Governance in Rich Liberal American Cities

    Matt Yglesias has a blog post called Make Blue America Great Again, about governance in rich liberal states like New York and California. He talks about various good government issues, and he pays a lot of attention specifically to TransitMatters and our …

    via Pedestrian Observations November 19, 2020

    Collections: Why Military History?

    This week, I want to talk about the discipline of military history: what it is, why it is important and how I see my own place within it. This is going to be a bit of an unusual collections post as it is less about the past itself and more about how we st…

    via A Collection of Unmitigated Pedantry November 13, 2020

    Misalignment and misuse: whose values are manifest?

    Crossposted from world spirit sock puppet. AI related disasters are often categorized as involving misaligned AI, or misuse, or accident. Where: misuse means the bad outcomes were wanted by the people involved, misalignment means the bad outcomes were wan…

    via Meteuphoric November 13, 2020

    more     (via openring)


  • Posts
  • RSS
  • ◂◂RSS
  • Contact