public static Hashtable ReadHeaders(Stream input, int timeout = int.MaxValue) { var headers = new Hashtable(); do { var line = input.StreamReadLine(timeout); if (string.IsNullOrWhiteSpace(line)) { break; } var splittedHeaderLine = line.Split(':'); if (splittedHeaderLine.Length < 2) { throw new Exception("Invalid HTTP header: " + line); } var name = splittedHeaderLine[0].ToLower(); var value = string.Join(":", splittedHeaderLine.Skip(1)); headers[name] = value.Trim(); } while (true); return headers; }