Hacker News new | ask | show | jobs
by tomxor 2254 days ago
> With HTTP/2, any interruption (packet loss) in the TCP connection blocks all streams (Head of line blocking).

This issue is really noticeable on my crappy home mobile internet when loading web pages, in combination with the timeout being absurdly long for reasons I don't understand.

4 comments

Same here. My Internet was so bad the other day that loading a web article that was already in my cache would hang indefinitely. I enabled "Offline mode" in my browser, and it loaded the article instantly. On macOS, launching Firefox or Chrome would just hang indefinitely (without displaying a window) when in lie-fi, presumably checking for updates or something.

I know there's a push to get software to support an offline mode, but I wish there was a similar push to improve software when in lie-fi.

This is a major set back introduced with HTTP/2 and I'm not sure why this is not mentioned often.

Under firefox you can set "network.http.sdpy.enable" to false to switch back to HTTP/1.

The improvement I have with HTTP2 is hardly noticeable, but HOL blocking is very tangible as soon as you have occasional random packet loss.

> Under firefox you can set "network.http.sdpy.enable" to false to switch back to HTTP/1.

Thanks! I might have to try that out, currently relegated to tunneling everything over sshuttle which of course makes things slower but reliable since it decompiles the TCP packets making them appear to work flawlessly to HTTP... HTTP1 may be a faster solution.

[edit]

Trying this now. Correction on parent comment for Firefox:

  goto:
  about:config

  search:
  network.http.spdy.enabled.http2
Is this necessarily true though? I know that TCP acks and seqs contain info about the packets that have already been seen, so if only one packet is missing, the client will tell the server almost immediately, at which point the onus is on the server to resend quickly. This would be at the Linux network layer however.

Found an article explaining the concept, called selective acknowledgment:

https://en.wikipedia.org/wiki/Transmission_Control_Protocol#...

Would reducing the retransmission delay be sufficient? Or simply letting the browser open two connections to a standard HTTP port?

So why are we doing DNS over HTTP?