Reconsidered server_tokens with an empty value.

An empty value will be treated as "off".
diff --git a/src/http/ngx_http_header_filter_module.c b/src/http/ngx_http_header_filter_module.c
index 45a8b6c..86bcabc 100644
--- a/src/http/ngx_http_header_filter_module.c
+++ b/src/http/ngx_http_header_filter_module.c
@@ -295,12 +295,12 @@
                 return NGX_ERROR;
             }
 
-            if (tokens.len == 3
-                && ngx_strncmp(tokens.data, "off", 3) == 0)
+            if (tokens.len == 0
+                || (tokens.len == 3 && ngx_strncmp(tokens.data, "off", 3) == 0))
             {
                 ngx_str_set(&tokens, ngx_http_server_string);
 
-            } else if (tokens.len) {
+            } else {
                 ngx_str_set(&tokens, ngx_http_server_full_string);
             }
         }
@@ -481,7 +481,7 @@
     }
     *b->last++ = CR; *b->last++ = LF;
 
-    if (r->headers_out.server == NULL && tokens.len) {
+    if (r->headers_out.server == NULL) {
         b->last = ngx_cpymem(b->last, tokens.data, tokens.len);
     }
 
diff --git a/src/http/ngx_http_special_response.c b/src/http/ngx_http_special_response.c
index 7987309..70fdf44 100644
--- a/src/http/ngx_http_special_response.c
+++ b/src/http/ngx_http_special_response.c
@@ -32,12 +32,6 @@
 ;
 
 
-static u_char ngx_http_error_no_tail[] =
-"</body>" CRLF
-"</html>" CRLF
-;
-
-
 static u_char ngx_http_msie_padding[] =
 "<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
 "<!-- a padding to disable MSIE and Chrome friendly error page -->" CRLF
@@ -638,16 +632,13 @@
                 return NGX_ERROR;
             }
 
-            if (tokens.len == 3
-                && ngx_strncmp(tokens.data, "off", 3) == 0)
+            if (tokens.len == 0
+                || (tokens.len == 3 && ngx_strncmp(tokens.data, "off", 3) == 0))
             {
                 ngx_str_set(&tail, ngx_http_error_tail);
 
-            } else if (tokens.len) {
-                ngx_str_set(&tail, ngx_http_error_full_tail);
-
             } else {
-                ngx_str_set(&tail, ngx_http_error_no_tail);
+                ngx_str_set(&tail, ngx_http_error_full_tail);
             }
         }
 
diff --git a/src/http/v2/ngx_http_v2_filter_module.c b/src/http/v2/ngx_http_v2_filter_module.c
index 235a006..624ef1e 100644
--- a/src/http/v2/ngx_http_v2_filter_module.c
+++ b/src/http/v2/ngx_http_v2_filter_module.c
@@ -252,14 +252,14 @@
                 return NGX_ERROR;
             }
 
-            if (tokens.len == 3
-                && ngx_strncmp(tokens.data, "off", 3) == 0)
+            if (tokens.len == 0
+                || (tokens.len == 3 && ngx_strncmp(tokens.data, "off", 3) == 0))
             {
                 server_tokens = 0;
                 len += 1 + sizeof(nginx);
                 ngx_str_set(&tokens, "nginx");
 
-            } else if (tokens.len) {
+            } else {
                 server_tokens = 1;
                 len += 1 + nginx_ver_len;
                 ngx_str_set(&tokens, NGINX_VER);
@@ -468,7 +468,7 @@
         pos = ngx_sprintf(pos, "%03ui", r->headers_out.status);
     }
 
-    if (r->headers_out.server == NULL && tokens.len) {
+    if (r->headers_out.server == NULL) {
         ngx_log_debug1(NGX_LOG_DEBUG_HTTP, fc->log, 0,
                        "http2 output header: \"server: %V\"",
                        &tokens);