⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ngx_http_header_filter_module.c

📁 Nginx是一个高性能的HTTP和反向代理服务器
💻 C
📖 第 1 页 / 共 2 页
字号:
            host = cscf->server_name;        } else if (r->headers_in.host) {            host.len = r->headers_in.host_name_len;            host.data = r->headers_in.host->value.data;        } else {            host.data = addr;            if (ngx_http_server_addr(r, &host) != NGX_OK) {                return NGX_ERROR;            }        }#if (NGX_HTTP_SSL)        if (r->connection->ssl) {            len += sizeof("Location: https://") - 1                   + host.len                   + r->headers_out.location->value.len + 2;            if (clcf->port_in_redirect && r->port != 443) {                len += r->port_text->len;            }        } else#endif        {            len += sizeof("Location: http://") - 1                   + host.len                   + r->headers_out.location->value.len + 2;            if (clcf->port_in_redirect && r->port != 80) {                len += r->port_text->len;            }        }    } else {        host.len = 0;        host.data = NULL;    }    if (r->chunked) {        len += sizeof("Transfer-Encoding: chunked" CRLF) - 1;    }    if (r->keepalive) {        len += sizeof("Connection: keep-alive" CRLF) - 1;        /*         * MSIE and Opera ignore the "Keep-Alive: timeout=<N>" header.         * MSIE keeps the connection alive for about 60-65 seconds.         * Opera keeps the connection alive very long.         * Mozilla keeps the connection alive for N plus about 1-10 seconds.         * Konqueror keeps the connection alive for about N seconds.         */        if (clcf->keepalive_header) {            len += sizeof("Keep-Alive: timeout=") - 1 + NGX_TIME_T_LEN + 2;        }    } else {        len += sizeof("Connection: closed" CRLF) - 1;    }    part = &r->headers_out.headers.part;    header = part->elts;    for (i = 0; /* void */; i++) {        if (i >= part->nelts) {            if (part->next == NULL) {                break;            }            part = part->next;            header = part->elts;            i = 0;        }        if (header[i].hash == 0) {            continue;        }        len += header[i].key.len + sizeof(": ") - 1 + header[i].value.len               + sizeof(CRLF) - 1;    }    b = ngx_create_temp_buf(r->pool, len);    if (b == NULL) {        return NGX_ERROR;    }    /* "HTTP/1.x " */    b->last = ngx_cpymem(b->last, "HTTP/1.1 ", sizeof("HTTP/1.x ") - 1);    /* status line */    if (r->headers_out.status_line.len) {        b->last = ngx_copy(b->last, r->headers_out.status_line.data,                           r->headers_out.status_line.len);    } else {        b->last = ngx_copy(b->last, ngx_http_status_lines[status].data,                           ngx_http_status_lines[status].len);    }    *b->last++ = CR; *b->last++ = LF;    if (r->headers_out.server == NULL) {        if (clcf->server_tokens) {            p = (u_char *) ngx_http_server_full_string;            len = sizeof(ngx_http_server_full_string) - 1;        } else {            p = (u_char *) ngx_http_server_string;            len = sizeof(ngx_http_server_string) - 1;        }        b->last = ngx_cpymem(b->last, p, len);    }    if (r->headers_out.date == NULL) {        b->last = ngx_cpymem(b->last, "Date: ", sizeof("Date: ") - 1);        b->last = ngx_cpymem(b->last, ngx_cached_http_time.data,                             ngx_cached_http_time.len);        *b->last++ = CR; *b->last++ = LF;    }    if (r->headers_out.content_type.len) {        b->last = ngx_cpymem(b->last, "Content-Type: ",                             sizeof("Content-Type: ") - 1);        p = b->last;        b->last = ngx_copy(b->last, r->headers_out.content_type.data,                           r->headers_out.content_type.len);        if (r->headers_out.content_type_len == r->headers_out.content_type.len            && r->headers_out.charset.len)        {            b->last = ngx_cpymem(b->last, "; charset=",                                 sizeof("; charset=") - 1);            b->last = ngx_copy(b->last, r->headers_out.charset.data,                               r->headers_out.charset.len);            /* update r->headers_out.content_type for possible logging */            r->headers_out.content_type.len = b->last - p;            r->headers_out.content_type.data = p;        }        *b->last++ = CR; *b->last++ = LF;    }    if (r->headers_out.content_length == NULL        && r->headers_out.content_length_n >= 0)    {        b->last = ngx_sprintf(b->last, "Content-Length: %O" CRLF,                              r->headers_out.content_length_n);    }    if (r->headers_out.last_modified == NULL        && r->headers_out.last_modified_time != -1)    {        b->last = ngx_cpymem(b->last, "Last-Modified: ",                             sizeof("Last-Modified: ") - 1);        b->last = ngx_http_time(b->last, r->headers_out.last_modified_time);        *b->last++ = CR; *b->last++ = LF;    }    if (host.data) {        p = b->last + sizeof("Location: ") - 1;        b->last = ngx_cpymem(b->last, "Location: http",                             sizeof("Location: http") - 1);#if (NGX_HTTP_SSL)        if (r->connection->ssl) {            *b->last++ ='s';        }#endif        *b->last++ = ':'; *b->last++ = '/'; *b->last++ = '/';        b->last = ngx_copy(b->last, host.data, host.len);        if (clcf->port_in_redirect) {#if (NGX_HTTP_SSL)            if (r->connection->ssl) {                if (r->port != 443) {                    b->last = ngx_copy(b->last, r->port_text->data,                                       r->port_text->len);                }            } else#endif            {                if (r->port != 80) {                    b->last = ngx_copy(b->last, r->port_text->data,                                       r->port_text->len);                }            }        }        b->last = ngx_copy(b->last, r->headers_out.location->value.data,                           r->headers_out.location->value.len);        /* update r->headers_out.location->value for possible logging */        r->headers_out.location->value.len = b->last - p;        r->headers_out.location->value.data = p;        r->headers_out.location->key.len = sizeof("Location: ") - 1;        r->headers_out.location->key.data = (u_char *) "Location: ";        *b->last++ = CR; *b->last++ = LF;    }    if (r->chunked) {        b->last = ngx_cpymem(b->last, "Transfer-Encoding: chunked" CRLF,                             sizeof("Transfer-Encoding: chunked" CRLF) - 1);    }    if (r->keepalive) {        b->last = ngx_cpymem(b->last, "Connection: keep-alive" CRLF,                             sizeof("Connection: keep-alive" CRLF) - 1);        if (clcf->keepalive_header) {            b->last = ngx_sprintf(b->last, "Keep-Alive: timeout=%T" CRLF,                                  clcf->keepalive_header);        }    } else {        b->last = ngx_cpymem(b->last, "Connection: close" CRLF,                             sizeof("Connection: close" CRLF) - 1);    }    part = &r->headers_out.headers.part;    header = part->elts;    for (i = 0; /* void */; i++) {        if (i >= part->nelts) {            if (part->next == NULL) {                break;            }            part = part->next;            header = part->elts;            i = 0;        }        if (header[i].hash == 0) {            continue;        }        b->last = ngx_copy(b->last, header[i].key.data, header[i].key.len);        *b->last++ = ':' ; *b->last++ = ' ' ;        b->last = ngx_copy(b->last, header[i].value.data, header[i].value.len);        *b->last++ = CR; *b->last++ = LF;    }    ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,                   "%*s\n", (size_t) (b->last - b->pos), b->pos);    /* the end of HTTP header */    *b->last++ = CR; *b->last++ = LF;    r->header_size = b->last - b->pos;    if (r->header_only) {        b->last_buf = 1;    }    out.buf = b;    out.next = NULL;    return ngx_http_write_filter(r, &out);}static ngx_int_tngx_http_header_filter_init(ngx_conf_t *cf){    ngx_http_top_header_filter = ngx_http_header_filter;    return NGX_OK;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -