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;
        }