public void Write(HttpResponse response) { StreamWriter writer = new StreamWriter(InputStream); Headers.Set("Connection", "Close"); Headers.Set("Content-Length", response.stream.Length); writer.Write("HTTP/1.1 {0} {1}\r\n{2}\r\n\r\n", response.statusCode, response.message, response.headers); response.stream.Seek(0, SeekOrigin.Begin); StreamReader reader = new StreamReader(response.stream); writer.Write(reader.ReadToEnd()); writer.Flush(); }
private void WriteBytes(Response response) { BinaryWriter binWriter = new BinaryWriter(stream); headers.Set("Connection", "Close"); headers.Set("Content-Length", response.stream.Length); // ===== Super tricky here ===== // Note: // 1. The header string using BinaryWriter has 1 less line \r\n // than when using StreamWriter // 2. If we don't convert string to bytes array and write directly // it works on other browsers, not Safari string headerStr = string.Format("HTTP/1.1 {0} {1}\r\n{2}\r\n", response.statusCode, response.message, response.headers); byte[] headerBytes = Encoding.ASCII.GetBytes(headerStr); binWriter.Write(headerBytes); // write response binWriter.Write(response.dataBytes); binWriter.Flush(); }
void WriteHeaders() { if (Headers.Get("Connection") == null) { Headers.Set("Connection", "Close"); } // See https://stackoverflow.com/questions/3033771 const int BUFSIZ = 1024; using (var headerWriter = new StreamWriter(OutputStream, HeaderEncoding, BUFSIZ, true)) { headerWriter.Write("HTTP/1.1 {0} {1}\r\n{2}\r\n\r\n", StatusCode, StatusDescription, Headers); // Automatically flushed to the OutputStream } }