• 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:

    Willingness to look stupid

    People frequently1 think that I'm very stupid. I don't find this surprising, since I don't mind if other people think I'm stupid, which means that I don't adjust my behavior to avoid seeming stupid, which results in people thinking tha…

    via Posts on Dan Luu October 21, 2021

    Experiences in raising children in shared housing

    Sometimes I see posts about people’s hope to raise children in a group housing situation, and it often seems overly optimistic to me. In particular they seem to expect that there will be more shared childcare than I think should be expected. Today I talke…

    via The whole sky October 18, 2021

    EDT with updating double counts

    I recently got confused thinking about the following case: Calculator bet: I am offered the opportunity to bet on a mathematical statement X to which I initially assign 50% probability (perhaps X = 139926 is a quadratic residue modulo 314159). I have acce…

    via The sideways view October 12, 2021

    more     (via openring)


  • Posts
  • RSS
  • ◂◂RSS
  • Contact