mirror of
https://github.com/c-cube/tiny_httpd.git
synced 2025-12-06 11:15:35 -05:00
feat: use chunked encoding for large string responses, too
This commit is contained in:
parent
020dd056ac
commit
fdd97744e0
1 changed files with 7 additions and 4 deletions
|
|
@ -619,9 +619,12 @@ module Response = struct
|
||||||
|
|
||||||
let output_ (oc:out_channel) (self:t) : unit =
|
let output_ (oc:out_channel) (self:t) : unit =
|
||||||
Printf.fprintf oc "HTTP/1.1 %d %s\r\n" self.code (Response_code.descr self.code);
|
Printf.fprintf oc "HTTP/1.1 %d %s\r\n" self.code (Response_code.descr self.code);
|
||||||
let is_chunked = match self.body with
|
let body, is_chunked = match self.body with
|
||||||
| `String _ -> false
|
| `String s when String.length s > 1024 * 300 ->
|
||||||
| `Stream _ -> true
|
(* chunk-encode large bodies *)
|
||||||
|
`Stream (Byte_stream.of_string s), true
|
||||||
|
| `String _ as b -> b, false
|
||||||
|
| `Stream _ as b -> b, true
|
||||||
in
|
in
|
||||||
let headers =
|
let headers =
|
||||||
if is_chunked
|
if is_chunked
|
||||||
|
|
@ -630,7 +633,7 @@ module Response = struct
|
||||||
in
|
in
|
||||||
List.iter (fun (k,v) -> Printf.fprintf oc "%s: %s\r\n" k v) headers;
|
List.iter (fun (k,v) -> Printf.fprintf oc "%s: %s\r\n" k v) headers;
|
||||||
output_string oc "\r\n";
|
output_string oc "\r\n";
|
||||||
begin match self.body with
|
begin match body with
|
||||||
| `String "" -> ()
|
| `String "" -> ()
|
||||||
| `String s -> output_string oc s;
|
| `String s -> output_string oc s;
|
||||||
| `Stream str -> output_stream_chunked_ oc str;
|
| `Stream str -> output_stream_chunked_ oc str;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue