acl  3.5.3.0
acl::http_header类 参考

#include <http_header.hpp>

+ 类 acl::http_header 继承关系图:
+ acl::http_header 的协作图:

Public 成员函数

 http_header (dbuf_guard *dbuf=NULL)
 
 http_header (const char *url, dbuf_guard *dbuf=NULL, bool encoding=true)
 
 http_header (int status, dbuf_guard *dbuf=NULL)
 
 http_header (const HTTP_HDR_RES &hdr_res, dbuf_guard *dbuf=NULL)
 
 http_header (const HTTP_HDR_REQ &hdr_req, dbuf_guard *dbuf=NULL)
 
virtual ~http_header (void)
 
void reset (void)
 
http_headerset_proto_version (const char *version)
 
http_headerset_request_mode (bool onoff)
 
http_headeradd_entry (const char *name, const char *value, bool replace=true)
 
const char * get_entry (const char *name) const
 
http_headerset_content_length (long long int n)
 
long long int get_content_length () const
 
http_headerset_range (long long from, long long to)
 
http_headerset_range_total (long long total)
 
void get_range (long long int *from, long long int *to)
 
http_headerset_content_type (const char *value)
 
http_headerset_keep_alive (bool on)
 
bool get_keep_alive () const
 
http_headerset_upgrade (const char *value="websocket")
 
const char * get_upgrade (void) const
 
http_headeradd_cookie (const char *name, const char *value, const char *domain=NULL, const char *path=NULL, time_t expires=0)
 
http_headeradd_cookie (const HttpCookie *cookie)
 
const HttpCookieget_cookie (const char *name) const
 
bool is_request (void) const
 
bool build_request (string &buf) const
 
http_headerset_url (const char *url, bool encoding=true)
 
http_headerset_host (const char *value)
 
const char * get_host () const
 
http_headerset_method (http_method_t method)
 
http_headerset_method (const char *method)
 
http_method_t get_method (string *buf=NULL) const
 
http_headeraccept_gzip (bool on)
 
http_headerset_param_override (bool yes)
 
http_headeradd_param (const char *name, const char *value)
 
http_headeradd_int (const char *name, short value)
 
http_headeradd_int (const char *name, int value)
 
http_headeradd_int (const char *name, long value)
 
http_headeradd_int (const char *name, unsigned short value)
 
http_headeradd_int (const char *name, unsigned int value)
 
http_headeradd_int (const char *name, unsigned long value)
 
http_headeradd_format (const char *name, const char *fmt,...) ACL_CPP_PRINTF(3
 
http_header http_headeradd_int (const char *name, long long int value)
 
http_headeradd_int (const char *name, unsigned long long int value)
 
http_headerset_ws_origin (const char *url)
 
http_headerset_ws_key (const void *key, size_t len)
 
http_headerset_ws_key (const char *key)
 
http_headerset_ws_protocol (const char *proto)
 
http_headerset_ws_version (int ver)
 
const char * get_ws_origin (void) const
 
const char * get_ws_key (void) const
 
const char * get_ws_protocol (void) const
 
int get_ws_version (void) const
 
http_headerset_ws_accept (const char *key)
 
const char * get_ws_accept (void) const
 
bool redirect (const char *url)
 
http_headerset_redirect (unsigned int n=5)
 
unsigned int get_redirect (void) const
 
virtual void redicrect_reset (void)
 
bool build_response (string &buf) const
 
http_headerset_status (int status)
 
int get_status (void) const
 
http_headerset_chunked (bool on)
 
bool chunked_transfer (void) const
 
http_headerset_cgi_mode (bool on)
 
bool is_cgi_mode () const
 
http_headerset_transfer_gzip (bool on)
 
bool is_transfer_gzip () const
 
- Public 成员函数 继承自 acl::dbuf_obj
 dbuf_obj (dbuf_guard *guard=NULL)
 
virtual ~dbuf_obj ()
 
int pos () const
 
dbuf_guardget_guard () const
 

静态 Public 成员函数

static void date_format (char *out, size_t size, time_t t)
 
static void uri_unsafe_correct (bool on)
 

详细描述

HTTP 头类,可以构建请求头或响应头

在文件 http_header.hpp19 行定义.

构造及析构函数说明

◆ http_header() [1/5]

acl::http_header::http_header ( dbuf_guard dbuf = NULL)

构造函数

参数
dbuf{dbuf_guard*} 非空时将做为内存分配池

◆ http_header() [2/5]

acl::http_header::http_header ( const char *  url,
dbuf_guard dbuf = NULL,
bool  encoding = true 
)

HTTP 请求头构造函数

参数
url{const char*} 请求的 URL,url 格式示例如下: http://www.test.com/ /cgi-bin/test.cgi http://www.test.com/cgi-bin/test.cgi http://www.test.com/cgi-bin/test.cgi?name=value /cgi-bin/test.cgi?name=value 如果该 url 中有主机字段,则内部自动添加主机; 如果该 url 中有参数字段,则内部自动进行处理并调用 add_param 方法; 调用该函数后用户仍可以调用 add_param 等函数添加其它参数; 当参数字段只有参数名没有参数值时,该参数将会被忽略,所以如果想 单独添加参数名,应该调用 add_param 方法来添加
dbuf{dbuf_guard*} 非空时将做为内存分配池
encoding{bool} 是否对存在于 url 中的参数进行 url 编码,如果为 true 则会重新解析 url 并重新对 url 中的参数进行编码,否则则 url 保持原样

◆ http_header() [3/5]

acl::http_header::http_header ( int  status,
dbuf_guard dbuf = NULL 
)

HTTP 响应头构造函数

参数
status{int} 状态字如:1xx, 2xx, 3xx, 4xx, 5xx
dbuf{dbuf_guard*} 非空时将做为内存分配池

◆ http_header() [4/5]

acl::http_header::http_header ( const HTTP_HDR_RES hdr_res,
dbuf_guard dbuf = NULL 
)

根据 C语言 的 HTTP 响应头进行构造

参数
hdr_res{const HTTP_HDR_RES&}
dbuf{dbuf_guard*} 非空时将做为内存分配池

◆ http_header() [5/5]

acl::http_header::http_header ( const HTTP_HDR_REQ hdr_req,
dbuf_guard dbuf = NULL 
)

根据 C语言 的 HTTP 请求头进行构造

参数
hdr_req{const HTTP_HDR_REQ&}
dbuf{dbuf_guard*} 非空时将做为内存分配池

◆ ~http_header()

virtual acl::http_header::~http_header ( void  )
virtual

成员函数说明

◆ accept_gzip()

http_header& acl::http_header::accept_gzip ( bool  on)

设置 HTTP 请求头中是否允许接收压缩数据,对应的 HTTP 头字段为: Accept-Encoding: gzip, deflate,但目前仅支持 gzip 格式

参数
on{bool} 如果为 true 则自动添加 HTTP 压缩头请求
返回
{http_header&} 返回本对象的引用,便于用户连续操作

◆ add_cookie() [1/2]

http_header& acl::http_header::add_cookie ( const char *  name,
const char *  value,
const char *  domain = NULL,
const char *  path = NULL,
time_t  expires = 0 
)

向 HTTP 头中添加 cookie

参数
name{const char*} cookie 名
value{const char*} cookie 值
domain{const char*} 所属域
path{const char*} 存储路径
expires{time_t} 过期时间,当该值为 0 时表示不过期,

0 时,则从现在起再增加 expires 即为过期时间,单位为秒

返回
{http_header&} 返回本对象的引用,便于用户连续操作

◆ add_cookie() [2/2]

http_header& acl::http_header::add_cookie ( const HttpCookie cookie)

向 HTTP 头中添加 cookie

参数
cookie{const http_cookie*} cookie 对象
返回
{http_header&} 返回本对象的引用,便于用户连续操作

◆ add_entry()

http_header& acl::http_header::add_entry ( const char *  name,
const char *  value,
bool  replace = true 
)

向 HTTP 头中添加字段

参数
name{const char*} 字段名,非空指针
value{const char*} 字段值,非空指针
replace{bool} 如果存在重复项时是否自动覆盖旧数据
返回
{http_header&} 返回本对象的引用,便于用户连续操作

◆ add_format()

http_header& acl::http_header::add_format ( const char *  name,
const char *  fmt,
  ... 
)

◆ add_int() [1/8]

http_header& acl::http_header::add_int ( const char *  name,
short  value 
)

◆ add_int() [2/8]

http_header& acl::http_header::add_int ( const char *  name,
int  value 
)

◆ add_int() [3/8]

http_header& acl::http_header::add_int ( const char *  name,
long  value 
)

◆ add_int() [4/8]

http_header& acl::http_header::add_int ( const char *  name,
unsigned short  value 
)

◆ add_int() [5/8]

http_header& acl::http_header::add_int ( const char *  name,
unsigned int  value 
)

◆ add_int() [6/8]

http_header& acl::http_header::add_int ( const char *  name,
unsigned long  value 
)

◆ add_int() [7/8]

http_header http_header& acl::http_header::add_int ( const char *  name,
long long int  value 
)

◆ add_int() [8/8]

http_header& acl::http_header::add_int ( const char *  name,
unsigned long long int  value 
)

◆ add_param()

http_header& acl::http_header::add_param ( const char *  name,
const char *  value 
)

向请求的 URL 中添加参数对,当只有参数名没有参数值时则: 1、参数名非空串,但参数值为空指针,则 URL 参数中只有:{name} 2、参数名非空串,但参数值为空串,则 URL参数中为:{name}=

参数
name{const char*} 参数名,不能为空指针
value{const char*} 参数值,当为空指针时,仅添加参数名,
返回
{http_header&} 返回本对象的引用,便于用户连续操作

◆ build_request()

bool acl::http_header::build_request ( string buf) const

创建 HTTP 请求头数据

参数
buf{string&} 存储结果数据
返回
{bool} 创建请求头中否成功

◆ build_response()

bool acl::http_header::build_response ( string buf) const

创建 HTTP 响应头数据

参数
buf{string&} 存储结果数据
返回
{bool} 创建响应头中否成功

◆ chunked_transfer()

bool acl::http_header::chunked_transfer ( void  ) const
inline

判断当前 HTTP 传输是否采用 chunked 传输方式

返回
{bool}

在文件 http_header.hpp456 行定义.

457  {
458  return chunked_transfer_;
459  }

◆ date_format()

static void acl::http_header::date_format ( char *  out,
size_t  size,
time_t  t 
)
static

将整型的日期转换为 rfc1123 字符串格式的日期

◆ get_content_length()

long long int acl::http_header::get_content_length ( ) const
inline

在文件 http_header.hpp129 行定义.

130  {
131  return content_length_;
132  }

◆ get_cookie()

const HttpCookie* acl::http_header::get_cookie ( const char *  name) const

从 HTTP 头中获得对应名称的 cookie 对象

参数
name{const char*} cookie 名
返回
{const HttpCookie*}

◆ get_entry()

const char* acl::http_header::get_entry ( const char *  name) const

从 HTTP 头中获得指定的头部字段

参数
name{const char*} 字段名,非空指针
返回
{const char*} 返回值 NULL 表示不存在

◆ get_host()

const char* acl::http_header::get_host ( ) const
inline

获得设置的 HTTP 请求头中的 HOST 字段

返回
{const char*} 返回空指针表示没有设置 HOST 字段

在文件 http_header.hpp290 行定义.

291  {
292  return host_[0] == 0 ? NULL : host_;
293  }

◆ get_keep_alive()

bool acl::http_header::get_keep_alive ( ) const
inline

检查当前头是否设置了保持长连接选项

在文件 http_header.hpp191 行定义.

192  {
193  return keep_alive_;
194  }

◆ get_method()

http_method_t acl::http_header::get_method ( string buf = NULL) const

当作为请求头时,本函数取得当前邮件头的请求方法

参数
buf{string*} 存储用字符串表示的请求方法
返回
{http_method_t}

◆ get_range()

void acl::http_header::get_range ( long long int *  from,
long long int *  to 
)

获得由 set_range 设置的分段请求位置值

参数
from{http_off_t*} 非空时存储起始位置偏移
to{http_off_t*} 非空时存储结束位置偏移

◆ get_redirect()

unsigned int acl::http_header::get_redirect ( void  ) const

获取通过 set_redirect 设置的允许的最大重定向次数

返回
{unsigned int}

◆ get_status()

int acl::http_header::get_status ( void  ) const
inline

获得响应头中的 HTTP 状态字

返回
{int} HTTP 响应状态码:1xx, 2xx, 3xx, 4xx, 5xx

在文件 http_header.hpp440 行定义.

441  {
442  return status_;
443  }

◆ get_upgrade()

const char* acl::http_header::get_upgrade ( void  ) const
inline

在文件 http_header.hpp197 行定义.

198  {
199  return upgrade_;
200  }

◆ get_ws_accept()

const char* acl::http_header::get_ws_accept ( void  ) const
inline

在文件 http_header.hpp385 行定义.

386  {
387  return ws_sec_accept_;
388  }

◆ get_ws_key()

const char* acl::http_header::get_ws_key ( void  ) const
inline

在文件 http_header.hpp369 行定义.

370  {
371  return ws_sec_key_;
372  }

◆ get_ws_origin()

const char* acl::http_header::get_ws_origin ( void  ) const
inline

在文件 http_header.hpp364 行定义.

365  {
366  return ws_origin_;
367  }

◆ get_ws_protocol()

const char* acl::http_header::get_ws_protocol ( void  ) const
inline

在文件 http_header.hpp374 行定义.

375  {
376  return ws_sec_proto_;
377  }

◆ get_ws_version()

int acl::http_header::get_ws_version ( void  ) const
inline

在文件 http_header.hpp379 行定义.

380  {
381  return ws_sec_ver_;
382  }

◆ is_cgi_mode()

bool acl::http_header::is_cgi_mode ( ) const
inline

是否设置了 CGI 模式

返回
{bool}

在文件 http_header.hpp472 行定义.

473  {
474  return cgi_mode_;
475  }

◆ is_request()

bool acl::http_header::is_request ( void  ) const

判断是否是 HTTP 请求头

返回
{bool} 返回 false 表明是 HTTP 响应头

◆ is_transfer_gzip()

bool acl::http_header::is_transfer_gzip ( ) const
inline

获得当前的数据传输是否设置了采用 gzip 压缩方式

返回
{bool}

在文件 http_header.hpp488 行定义.

489  {
490  return transfer_gzip_;
491  }

◆ redicrect_reset()

virtual void acl::http_header::redicrect_reset ( void  )
inlinevirtual

当需要重定向时,会主动调用此函数允许子类做一些重置工作

在文件 http_header.hpp416 行定义.

416 {}

◆ redirect()

bool acl::http_header::redirect ( const char *  url)

url 重定向

参数
url{const char*} 重定向的 URL,格式为: http://xxx.xxx.xxx/xxx 或 /xxx 如果是前者,则自动从中取出 HOST 字段,如果是后者,则 延用之前的 HOST

◆ reset()

void acl::http_header::reset ( void  )

重置 HTTP 头信息同时将上次的临时资源释放

◆ set_cgi_mode()

http_header& acl::http_header::set_cgi_mode ( bool  on)

设置是否用来生成 CGI 格式的响应头

参数
on{bool} 是否 CGI 格式响应头
返回
{http_header&} 返回本对象的引用,便于用户连续操作

◆ set_chunked()

http_header& acl::http_header::set_chunked ( bool  on)

设置 HTTP 响应头中的 chunked 传输标志

参数
on{bool}
返回
{http_header&}

◆ set_content_length()

http_header& acl::http_header::set_content_length ( long long int  n)

设置 HTTP 头中的 Content-Length 字段

参数
n{int64} 设置值
返回
{http_header&} 返回本对象的引用,便于用户连续操作

◆ set_content_type()

http_header& acl::http_header::set_content_type ( const char *  value)

设置 HTTP 头中的 Content-Type 字段

参数
value{const char*} 设置值
返回
{http_header&} 返回本对象的引用,便于用户连续操作

◆ set_host()

http_header& acl::http_header::set_host ( const char *  value)

设置 HTTP 请求头的 HOST 字段

参数
value{const char*} 请求头的 HOST 字段值
返回
{http_header&} 返回本对象的引用,便于用户连续操作

◆ set_keep_alive()

http_header& acl::http_header::set_keep_alive ( bool  on)

设置 HTTP 头中的 Connection 字段,是否保持长连接 不过,目前并未真正支持长连接,即使设置了该标志位, 则得到响应数据后也会主动关闭连接

参数
on{bool} 是否保持长连接
返回
{http_header&} 返回本对象的引用,便于用户连续操作

◆ set_method() [1/2]

http_header& acl::http_header::set_method ( http_method_t  method)

设置 HTTP 协议的请求方法,如果不调用此函数,则默认用 GET 方法

参数
method{http_method_t} HTTP 请求方法
返回
{http_header&} 返回本对象的引用,便于用户连续操作

◆ set_method() [2/2]

http_header& acl::http_header::set_method ( const char *  method)

设置 HTTP 协议的请求方法,本函数允许用户扩展 HTTP 请求方法, 通过该函数设置的请求方法仅影响 HTTP 请求过程

参数
method{const char*} 请求方法
返回
{http_header&} 返回本对象的引用,便于用户连续操作

◆ set_param_override()

http_header& acl::http_header::set_param_override ( bool  yes)

在调用下面的 add_param/add_int/add_format 时,是否允许覆盖同名参数, 内部缺省值为否,既不覆盖同名参数

参数
yes{bool}
返回
{http_header&}

◆ set_proto_version()

http_header& acl::http_header::set_proto_version ( const char *  version)

设置 HTTP 协议版本号

参数
version{const char*} HTTP 协议版本号,格式:1.0, 1.1
返回
{http_header&}

◆ set_range()

http_header& acl::http_header::set_range ( long long  from,
long long  to 
)

设置 HTTP 请求头(响应头)中的 Range 字段,用于分段请求(响应)数据, 多用于支持断点续传的 WEB 服务器中

参数
from{http_off_t} 起始偏移位置,下标从 0 开始,该 值当 >= 0 时才有效
to{http_off_t} 请求结束偏移位置,下标从 0 开始, 在请求头中当该值输入 < 0 时,则认为是请求从起始位置开始至最终长度位置
返回
{http_header&} 返回本对象的引用,便于用户连续操作

◆ set_range_total()

http_header& acl::http_header::set_range_total ( long long  total)

对于响应头在分段传输前需要调用此函数设置数据体总长度

参数
total{http_off_t} 仅对于响应头,该参数需要设为数据总长度
返回
{http_header&}

◆ set_redirect()

http_header& acl::http_header::set_redirect ( unsigned int  n = 5)

设置重定向次数,如果该值 == 0 则不主动进行重定向,否则 进行重定向且重定向的次数由该值决定

参数
n{int} 允许重定向的次数
返回
{http_header&} 返回本对象的引用,便于用户连续操作

◆ set_request_mode()

http_header& acl::http_header::set_request_mode ( bool  onoff)

设置 HTTP 头是客户端的请求头还是服务器的响应头

参数
onoff{bool} true 表示是请求头,否则表示响应头
返回
{http_header&} 返回本对象的引用,便于用户连续操作

◆ set_status()

http_header& acl::http_header::set_status ( int  status)

设置 HTTP 响应头中的响应状态字

参数
status{int} 状态字如:1xx, 2xx, 3xx, 4xx, 5xx
返回
{http_header&} 返回本对象的引用,便于用户连续操作

◆ set_transfer_gzip()

http_header& acl::http_header::set_transfer_gzip ( bool  on)

设置传输的数据是否采用 gzip 方式进行压缩

参数
on{bool}
返回
{http_header&}

◆ set_upgrade()

http_header& acl::http_header::set_upgrade ( const char *  value = "websocket")

◆ set_url()

http_header& acl::http_header::set_url ( const char *  url,
bool  encoding = true 
)

设置请求的 URL,url 格式示例如下: 1、http://www.test.com/ 2、/cgi-bin/test.cgi 3、http://www.test.com/cgi-bin/test.cgi 3、http://www.test.com/cgi-bin/test.cgi?name=value 4、/cgi-bin/test.cgi?name=value 5、http://www.test.com 如果该 url 中有主机字段,则内部自动添加主机; 如果该 url 中有参数字段,则内部自动进行处理并调用 add_param 方法; 调用该函数后用户仍可以调用 add_param 等函数添加其它参数; 当参数字段只有参数名没有参数值时,该参数将会被忽略,所以如果想 单独添加参数名,应该调用 add_param 方法来添加

参数
url{const char*} 请求的 url,非空指针
encoding{bool} 是否对存在于 url 中的参数进行 url 编码,如果为 true 则会重新解析 url 并重新对 url 中的参数进行编码,否则则 url 保持原样
返回
{http_header&} 返回本对象的引用,便于用户连续操作

◆ set_ws_accept()

http_header& acl::http_header::set_ws_accept ( const char *  key)

◆ set_ws_key() [1/2]

http_header& acl::http_header::set_ws_key ( const void *  key,
size_t  len 
)

◆ set_ws_key() [2/2]

http_header& acl::http_header::set_ws_key ( const char *  key)

◆ set_ws_origin()

http_header& acl::http_header::set_ws_origin ( const char *  url)

◆ set_ws_protocol()

http_header& acl::http_header::set_ws_protocol ( const char *  proto)

◆ set_ws_version()

http_header& acl::http_header::set_ws_version ( int  ver)

◆ uri_unsafe_correct()

static void acl::http_header::uri_unsafe_correct ( bool  on)
static

设置标志位,针对 HTTP 请求的 URI 中的 ? 问号被转义(即被转成 %3F)的请求是否 做兼容性处理,内部缺省为做兼容性处理

参数
on{bool} 为 true 表示做兼容性处理

该类的文档由以下文件生成: