summaryrefslogtreecommitdiff
path: root/libsoup/soup-message-server-io.c
diff options
context:
space:
mode:
Diffstat (limited to 'libsoup/soup-message-server-io.c')
-rw-r--r--libsoup/soup-message-server-io.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/libsoup/soup-message-server-io.c b/libsoup/soup-message-server-io.c
index 71e943b6..e80e5511 100644
--- a/libsoup/soup-message-server-io.c
+++ b/libsoup/soup-message-server-io.c
@@ -266,7 +266,16 @@ get_response_headers (SoupMessage *msg, GString *headers,
else
*encoding = claimed_encoding;
- if (claimed_encoding == SOUP_ENCODING_CONTENT_LENGTH &&
+
+ /* Per rfc 7230:
+ * A server MUST NOT send a Content-Length header field in any response
+ * with a status code of 1xx (Informational) or 204 (No Content).
+ */
+
+ if (msg->status_code == SOUP_STATUS_NO_CONTENT ||
+ SOUP_STATUS_IS_INFORMATIONAL (msg->status_code)) {
+ soup_message_headers_remove (msg->response_headers, "Content-Length");
+ } else if (claimed_encoding == SOUP_ENCODING_CONTENT_LENGTH &&
!soup_message_headers_get_content_length (msg->response_headers)) {
soup_message_headers_set_content_length (msg->response_headers,
msg->response_body->length);