没有合适的资源?快使用搜索试试~ 我知道了~
详解nginx请求头数据读取流程
9 下载量 70 浏览量
2020-09-29
20:04:55
上传
评论
收藏 77KB PDF 举报
温馨提示
试读
4页
主要介绍了详解nginx请求头数据读取流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
资源推荐
资源详情
资源评论
详解详解nginx请求头数据读取流程请求头数据读取流程
主要介绍了详解nginx请求头数据读取流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一
定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
在上一篇文章中,我们讲解了nginx是如何读取请求行的数据,并且解析请求行的。本文我们则主要讲解nginx是如何读取客户
端发送来的请求头的数据,并且解析这些数据的。本质上来讲,请求行的数据和请求头的数据读取流程是基本一致的,因为其
都面临着如何从间断的数据流中读取到数据,也面临着如何对数据进行处理的问题。
1. 请求头读取主流程请求头读取主流程
在介绍请求头的读取流程之前,我们首先展示一个http请求报文的示例:
POST /web/book/read HTTP/1.1
Host: localhost
Connection: keep-alive
Content-Length: 365
Accept: application/json, text/plain, */*
示例中的第一行数据就是请求行,而后面的几行都是请求头。每一个请求头都是以name: value的格式组装的,并且每一个请
求头都占用一行。 在上一篇介绍请求行读取流程的文章中,我们讲到,一旦请求行读取完成,nginx就会将当前读取事件
的回调函数修改为ngx_http_process_request_headers()方法,并且直接调用该方法尝试读取请求头数据。这个方法就是读取
请求行数据的主流程,如下是该方法的源码:
/**
* 解析客户端发送来的header数据
*/
static void ngx_http_process_request_headers(ngx_event_t *rev) {
u_char *p;
size_t len;
ssize_t n;
ngx_int_t rc, rv;
ngx_table_elt_t *h;
ngx_connection_t *c;
ngx_http_header_t *hh;
ngx_http_request_t *r;
ngx_http_core_srv_conf_t *cscf;
ngx_http_core_main_conf_t *cmcf;
c = rev->data;
r = c->data;
if (rev->timedout) {
ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out");
c->timedout = 1;
ngx_http_close_request(r, NGX_HTTP_REQUEST_TIME_OUT);
return;
}
cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
rc = NGX_AGAIN;
for (;;) {
if (rc == NGX_AGAIN) {
// 如果当前header缓冲区中没有剩余空间,则申请新的空间
if (r->header_in->pos == r->header_in->end) {
// 申请新的空间
rv = ngx_http_alloc_large_header_buffer(r, 0);
if (rv == NGX_ERROR) {
ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
return;
}
// 客户端发送的header太长,超出了large_client_header_buffers指定的最大大小
if (rv == NGX_DECLINED) {
p = r->header_name_start;
r->lingering_close = 1;
if (p == NULL) {
ngx_log_error(NGX_LOG_INFO, c->log, 0, "client sent too large request");
ngx_http_finalize_request(r, NGX_HTTP_REQUEST_HEADER_TOO_LARGE);
return;
}
len = r->header_in->end - p;
if (len > NGX_MAX_ERROR_STR - 300) {
len = NGX_MAX_ERROR_STR - 300;
}
资源评论
weixin_38633475
- 粉丝: 3
- 资源: 946
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功