简介
use Mojo::Headers;
# Parse
my $headers = Mojo::Headers->new;
$headers->parse("Content-Length: 42\x0d\x0a");
$headers->parse("Content-Type: text/html\x0d\x0a\x0d\x0a");
say $headers->content_length;
say $headers->content_type;
# Build
my $headers = Mojo::Headers->new;
$headers->content_length(42);
$headers->content_type('text/plain');
say $headers->to_string;
Mojo :: Headers是基于RFC 7230和RFC 7231的 HTTP头的容器。
属性
Mojo::Headers实现了以下属性。
max_line_size
my $size = $headers->max_line_size;
$headers = $headers->max_line_size(1024);
获取或设置HTTP头中每一项的最大长度,以字节为单位。默认使用MOJO_MAX_LINE_SIZE环境变量的值或8192(8KiB)。
max_lines
my $num = $headers->max_lines;
$headers = $headers->max_lines(200);
获取或设置HTTP头部的最大行数,默认为MOJO_MAX_LINES环境变量的值或100。
方法
Mojo::Headers继承了Mojo::Base中的所有方法,并实现了以下方法。
accept
my $accept = $headers->accept;
$headers = $headers->accept('application/json');
获取或设置HTTP头中Accept字段的值。
accept_charset
my $charset = $headers->accept_charset;
$headers = $headers->accept_charset('UTF-8');
获取或设置HTTP头中Accept-Charset字段的值。
accept_encoding
my $encoding = $headers->accept_encoding;
$headers = $headers->accept_encoding('gzip');
获取或设置HTTP头中Accept-Encoding字段的值。
accept_language
my $language = $headers->accept_language;
$headers = $headers->accept_language('de, en');
获取或设置HTTP头中Accept-Language字段的值。
accept_ranges
my $ranges = $headers->accept_ranges;
$headers = $headers->accept_ranges('bytes');
获取或设置HTTP头中Accept-Ranges字段的值。
access_control_allow_origin
my $origin = $headers->access_control_allow_origin;
$headers = $headers->access_control_allow_origin('*');
获取或设置HTTP头中Access-Control-Allow-Origin字段的值。对跨域共享资源进行描述性配置。
add
$headers = $headers->add(Foo => 'one value');
$headers = $headers->add(Foo => 'first value', 'second value');
向HTTP头中添加配置行,可以为同一个HTTP头部字段添加一个或多个值。
# "Vary: Accept
# Vary: Accept-Encoding"
$headers->add(Vary => 'Accept')->add(Vary => 'Accept-Encoding')->to_string;
allow
my $allow = $headers->allow;
$headers = $headers->allow('GET, POST');
获取或设置HTTP头中Allow字段的值。
append
$headers = $headers->append(Vary => 'Accept-Encoding');
在HTTP头部字段的值后面(同一行)加入新的值。
# "Vary: Accept"
$headers->append(Vary => 'Accept')->to_string;
# "Vary: Accept, Accept-Encoding"
$headers->vary('Accept')->append(Vary => 'Accept-Encoding')->to_string;
authorization
my $authorization = $headers->authorization;
$headers = $headers->authorization('Basic Zm9vOmJhcg==');
获取或设置HTTP头中Authorization字段的值。
cache_control
my $cache_control = $headers->cache_control;
$headers = $headers->cache_control('max-age=1, no-cache');
获取或设置HTTP头中Cache-Control字段的值。
clone
my $clone = $headers->clone;
复制出来一个与$headers完全一样的Mojo::Headers对象。
connection
my $connection = $headers->connection;
$headers = $headers->connection('close');
获取或设置HTTP头中Connection字段的值。
content_disposition
my $disposition = $headers->content_disposition;
$headers = $headers->content_disposition('foo');
获取或设置HTTP头中Content-Disposition字段的值。
content_encoding
my $encoding = $headers->content_encoding;
$headers = $headers->content_encoding('gzip');
获取或设置HTTP头中Content-Encoding字段的值。
content_language
my $language = $headers->content_language;
$headers = $headers->content_language('en');
获取或设置HTTP头中Content-Language字段的值。
content_length
my $len = $headers->content_length;
$headers = $headers->content_length(4000);
获取或设置HTTP头中Content-Length字段的值。
content_location
my $location = $headers->content_location;
$headers = $headers->content_location('http://127.0.0.1/foo');
获取或设置HTTP头中Content-Location字段的值。
content_range
my $range = $headers->content_range;
$headers = $headers->content_range('bytes 2-8/100');
获取或设置HTTP头中Content-Range字段的值。
content_security_policy
my $policy = $headers->content_security_policy;
$headers = $headers->content_security_policy('default-src https:');
获取或设置HTTP头中Content-Security-Policy字段的值。
content_type
my $type = $headers->content_type;
$headers = $headers->content_type('text/plain');
获取或设置HTTP头中Content-Type字段的值。
cookie
my $cookie = $headers->cookie;
$headers = $headers->cookie('f=b');
获取或设置HTTP头中Cookie字段的值。
date
my $date = $headers->date;
$headers = $headers->date('Sun, 17 Aug 2008 16:27:35 GMT');
获取或设置HTTP头中Date字段的值。
dnt
my $dnt = $headers->dnt;
$headers = $headers->dnt(1);
获取或设置HTTP头中DNT(Do Not Track)字段的值。这个头部字段虽然没有在HTTP的规范之中,但是非常有用。
etag
my $etag = $headers->etag;
$headers = $headers->etag('"abc321"');
获取或设置HTTP头中ETag 字段的值。
every_header
my $all = $headers->every_header('Location');
与header
方法类似,但返回的是一个数组引用,里面包含共享同一HTTP头部字段的所有值。
# Get first header value
say $headers->every_header('Location')->[0];
expect
my $expect = $headers->expect;
$headers = $headers->expect('100-continue');
获取或设置HTTP头中Expect字段的值。
expires
my $expires = $headers->expires;
$headers = $headers->expires('Thu, 01 Dec 1994 16:00:00 GMT');
获取或设置HTTP头中Expires字段的值。
from_hash
$headers = $headers->from_hash({'Cookie' => 'a=b'});
$headers = $headers->from_hash({'Cookie' => ['a=b', 'c=d']});
$headers = $headers->from_hash({});
从一个哈希引用解析HTTP头信息并设置HTTP头。如果传一个空哈希引用,则会清空当前Mojo::Headers对象中HTTP头的原有设置,如果传的是一个非空的哈希引用,则用把哈希引用中的内容添加到当前Mojo::Headers中。
header
my $value = $headers->header('Foo');
$headers = $headers->header(Foo => 'one value');
$headers = $headers->header(Foo => 'first value', 'second value');
获取或设置指定的HTTP头部信息。
host
my $host = $headers->host;
$headers = $headers->host('127.0.0.1');
获取或设置HTTP头中Host字段的值。
if_modified_since
my $date = $headers->if_modified_since;
$headers = $headers->if_modified_since('Sun, 17 Aug 2008 16:27:35 GMT');
获取或设置HTTP头中If-Modified-Since字段的值。
if_none_match
my $etag = $headers->if_none_match;
$headers = $headers->if_none_match('"abc321"');
获取或设置HTTP头中If-None-Match字段的值。
is_finished
my $bool = $headers->is_finished;
检查HTTP头是否解析完成。
is_limit_exceeded
my $bool = $headers->is_limit_exceeded;
检查对HTTP头的设置是否超过了max_line_size和max_lines的限制。
last_modified
my $date = $headers->last_modified;
$headers = $headers->last_modified('Sun, 17 Aug 2008 16:27:35 GMT');
获取或设置HTTP头中Last-Modified字段的值。
leftovers
my $bytes = $headers->leftovers;
从HTTP头获取并删除剩余的还没有被解析的数据。
link
my $link = $headers->link;
$headers = $headers->link('<http://127.0.0.1/foo/3>; rel="next"');
获取或设置HTTP头中Link字段的值。
location
my $location = $headers->location;
$headers = $headers->location('http://127.0.0.1/foo');
获取或设置HTTP头中Location字段的值。
names
my $names = $headers->names;
返回一个数组的引用,里面包含所有已经设备的HTTP头的字段名。
# Names of all headers
say for @{$headers->names};
origin
my $origin = $headers->origin;
$headers = $headers->origin('http://example.com');
获取或设置HTTP头中Origin字段的值。
parse
$headers = $headers->parse("Content-Type: text/plain\x0d\x0a\x0d\x0a");
解析格式化的HTTP 头部信息。
proxy_authenticate
my $authorization = $headers->proxy_authorization;
$headers = $headers->proxy_authorization('Basic Zm9vOmJhcg==');
获取或设置HTTP头中Proxy-Authorization字段的值。
range
my $range = $headers->range;
$headers = $headers->range('bytes=2-8');
获取或设置HTTP头中Range字段的值。
referrer
my $referrer = $headers->referrer;
$headers = $headers->referrer('http://example.com');
获取或设置HTTP头中Referer字段的值。因在RFC 2068中有一个打字错误,导致Referer成为官方HTTP头。
remove
$headers = $headers->remove('Foo');
删除指定名称的HTTP头部。
sec_websocket_accept
my $accept = $headers->sec_websocket_accept;
$headers = $headers->sec_websocket_accept('s3pPLMBiTxaQ9kYGzzhZRbK+xOo=');
获取或设置HTTP头中Sec-WebSocket-Accept字段的值。
sec_websocket_extensions
my $extensions = $headers->sec_websocket_extensions;
$headers = $headers->sec_websocket_extensions('foo');
获取或设置HTTP头中Sec-WebSocket-Extensions字段的值。
sec_websocket_key
my $key = $headers->sec_websocket_key;
$headers = $headers->sec_websocket_key('dGhlIHNhbXBsZSBub25jZQ==');
获取或设置HTTP头中Sec-WebSocket-Key字段的值。
sec_websocket_protocol
my $proto = $headers->sec_websocket_protocol;
$headers = $headers->sec_websocket_protocol('sample');
获取或设置HTTP头中Sec-WebSocket-Protocol字段的值。
sec_websocket_version
my $version = $headers->sec_websocket_version;
$headers = $headers->sec_websocket_version(13);
获取或设置HTTP头中Sec-WebSocket-Version字段的值。
server
my $server = $headers->server;
$headers = $headers->server('Mojo');
获取或设置HTTP头中Server字段的值。
set_cookie
my $cookie = $headers->set_cookie;
$headers = $headers->set_cookie('f=b; path=/');
获取或设置HTTP头中Set-Cookie字段的值。
status
my $status = $headers->status;
$headers = $headers->status('200 OK');
获取或设置HTTP头中Status字段的值。
strict_transport_security
my $policy = $headers->strict_transport_security;
$headers = $headers->strict_transport_security('max-age=31536000');
获取或设置HTTP头中Strict-Transport-Security字段的值。
te
my $te = $headers->te;
$headers = $headers->te('chunked');
获取或设置HTTP头中TE字段的值。
to_hash
my $single = $headers->to_hash;
my $multi = $headers->to_hash(1);
将Mojo::Headers对象中存储的HTTP头部信息转换为一个hashref类型的数据。默认情况下禁用相同名称的多个头部信息的数组引用形式。只有传一个true作为参数时才启用,启用后当一个HTTP头对应多个值时返回的hashref中对应的key指向的是一个数组的引用,数组引用中包含所有该HTTP头字段在当前Mojo::Headers对象中对应的值。禁用时,当一个HTTP头对应多个值时返回的hashref中对应key指向的是一个字符串,字符串中包含所有该HTTP头字符在当前Mojo::Headers对象中对应的值,各个值之间用逗号分隔。
say $headers->to_hash->{DNT};
to_string
my $str = $headers->to_string;
将Mojo::Headers对象转换成字符串,字符串可以直接用于HTTP头部信息。
trailer
my $trailer = $headers->trailer;
$headers = $headers->trailer('X-Foo');
获取或设置HTTP头中Trailer字段的值。
transfer_encoding
my $encoding = $headers->transfer_encoding;
$headers = $headers->transfer_encoding('chunked');
获取或设置HTTP头中Transfer-Encoding字段的值。
upgrade
my $upgrade = $headers->upgrade;
$headers = $headers->upgrade('websocket');
获取或设置HTTP头中Upgrade字段的值。
user_agent
my $agent = $headers->user_agent;
$headers = $headers->user_agent('Mojo/1.0');
获取或设置HTTP头中User-Agent字段的值。
vary
my $vary = $headers->vary;
$headers = $headers->vary('*');
获取或设置HTTP头中Vary字段的值。
www_authenticate
my $authenticate = $headers->www_authenticate;
$headers = $headers->www_authenticate('Basic realm="realm"');
获取或设置HTTP头中WWW-Authenticate字段的值。
网友评论