Mojo::Headers - ヘッダ
使い方
use Mojo::Headers; # 解析 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; # 構築 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);
最大ラインバイトサイズ。デフォルトはMOJO_MAX_LINE_SIZE
の値か、8192
(8KB)です。
max_lines
my $num = $headers->max_lines; $headers = $headers->max_lines(200);
ヘッダーの行の最大数。デフォルトは、 MOJO_MAX_LINES
環境変数の値、 あるいは100
。
メソッド
Mojo::Headers は Mojo::Base の全てのメソッドを継承しており、 以下の新しいメソッドを実装しています。
accept
my $accept = $headers->accept; $headers = $headers->accept('application/json');
ヘッダの値を取得あるいは置換します。Accept
ヘッダのショートカット
accept_charset
my $charset = $headers->accept_charset; $headers = $headers->accept_charset('UTF-8');
ヘッダの値を取得あるいは置換します。Accept-Charset
ヘッダのショートカット。
accept_encoding
my $encoding = $headers->accept_encoding; $headers = $headers->accept_encoding('gzip');
ヘッダの値を取得あるいは置換します。Accept-Encoding
ヘッダのショートカット。
accept_language
my $accept_language = $headers->accept_language; $headers = $headers->accept_language('de, en');
ヘッダの値を取得あるいは置換します。Accept-Language
ヘッダへのショートカット。
accept_ranges
my $ranges = $headers->accept_ranges; $headers = $headers->accept_ranges('bytes');
ヘッダの値を取得あるいは置換します。Accept-Ranges
ヘッダへのショートカット。
access_control_allow_origin
my $origin = $headers->access_control_allow_origin; $headers = $headers->access_control_allow_origin('*');
ヘッダの値を取得あるいは置換します。Access-Control-Allow-Origin
ヘッダのショートカット。 Cross-Origin Resource Sharingより。
add
$headers = $headers->add(Foo => 'one value'); $headers = $headers->add(Foo => 'first value', 'second value');
1行または複数のヘッダ行を追加します。
# "Vary: Accept" # "Vary: Accept-Encoding" $headers->vary('Accept')->add(Vary => 'Accept-Encoding')->to_string;
allow
my $allow = $headers->allow; $headers = $headers->allow('GET, POST');
ヘッダの値を取得あるいは置換します。Allow
ヘッダのショートカット。
append
$headers = $headers->append(Vary => 'Accept-Encoding');
値をヘッダに追加して、必要であればフラットにします。
# "Vary: Accept" $headers->append(Vary => 'Accept')->to_string; # "Vary: Accept, Accept-Encoding" $headers->vary('Accept')->append(Vary => 'Accept-Encoding')->to_string;
append
$headers = $headers->append(Vary => 'Accept-Encoding');
値をヘッダに追加して、必要であれば平らにします。
# "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==');
ヘッダの値を取得あるいは置換します。Authorization
ヘッダへのショートカット。
cache_control
my $cache_control = $headers->cache_control; $headers = $headers->cache_control('max-age=1, no-cache');
ヘッダの値を取得あるいは置換します。Cache-Control
ヘッダへのショートカット。
clone
ヘッダを複製します。
connection
my $connection = $headers->connection; $headers = $headers->connection('close');
ヘッダの値を取得あるいは置換します。Connection
ヘッダへのショートカット。
content_disposition
my $content_disposition = $headers->content_disposition; $headers = $headers->content_disposition('foo');
ヘッダの値を取得あるいは置換します。Content-Disposition
ヘッダへのショートカット。
content_encoding
my $encoding = $headers->content_encoding; $headers = $headers->content_encoding('gzip');
ヘッダの値を取得あるいは置換します。Content-Encoding
ヘッダのショートカット。
content_language
my $language = $headers->content_language; $headers = $headers->content_language('en');
ヘッダの値を取得あるいは置換します。Content-Language
ヘッダのショートカット.
content_length
my $content_length = $headers->content_length; $headers = $headers->content_length(4000);
ヘッダの値を取得あるいは置換します。Content-Length
ヘッダへのショートカット。
content_location
my $location = $headers->content_location; $headers = $headers->content_location('http://127.0.0.1/foo');
ヘッダの値を取得あるいは置換します。Content-Location
ヘッダのショートカット.
content_range
my $range = $headers->content_range; $headers = $headers->content_range('bytes 2-8/100');
ヘッダの値を取得あるいは置換します。Content-Range
ヘッダへのショートカット。
content_security_policy
my $policy = $headers->content_security_policy; $headers = $headers->content_security_policy('default-src https:');
ヘッダの値を取得あるいは置換します。Content-Security-Policy
ヘッダのショートカット。 Content Security Policy 1.0より。
content_type
my $content_type = $headers->content_type; $headers = $headers->etag('"abc321"');
ヘッダの値を取得あるいは置換します。Content-Type
ヘッダへのショートカット。
cookie
my $cookie = $headers->cookie; $headers = $headers->cookie('$Version=1; f=b; $Path=/');
ヘッダの値を取得あるいは置換します。RFC 6265のCookie
ヘッダへのショートカット。
date
my $date = $headers->date; $headers = $headers->date('Sun, 17 Aug 2008 16:27:35 GMT');
ヘッダの値を取得あるいは置換します。Date
ヘッダへのショートカット。
dnt
my $dnt = $headers->dnt; $headers = $headers->dnt(1);
DNT
(Do Not Track)ヘッダへのショートカット。 これは仕様に規定されていませんが、 一般的に利用されています。
etag
my $etag = $headers->etag; $headers = $headers->etag('abc321');
ヘッダの値を取得あるいは置換します。ETag
ヘッダのショートカット。
every_header
my $all = $headers->every_header('Location');
「header」と似ていますが、同じ名前で共有しているすべてのヘッダを、配列のリファレンスで返します。
# 最初のヘッダの値を取得 say $headers->every_header('Location')->[0];
expect
my $expect = $headers->expect; $headers = $headers->expect('100-continue');
ヘッダの値を取得あるいは置換します。Expect
ヘッダへのショートカット。
expires
my $expires = $headers->expires; $headers = $headers->expires('Thu, 01 Dec 1994 16:00:00 GMT');
ヘッダの値を取得あるいは置換します。Expires
ヘッダへのショートカット。
from_hash
$headers = $headers->from_hash({'Cookie' => 'a=b'}); $headers = $headers->from_hash({'Cookie' => ['a=b', 'c=d']}); $headers = $headers->from_hash({});
ハッシュからヘッダを解析します。 空のタグはすべてのヘッダを削除します。
header
my $value = $headers->header('Foo'); $headers = $headers->header(Foo => 'one value'); $headers = $headers->header(Foo => 'first value', 'second value');
現在のヘッダの値を取得または置換します。
host
my $host = $headers->host; $headers = $headers->host('127.0.0.1');
ヘッダの値を取得あるいは置換します。Host
ヘッダへのショートカット。
if_modified_since
my $m = $headers->if_modified_since; $headers = $headers->if_modified_since('Sun, 17 Aug 2008 16:27:35 GMT');
ヘッダの値を取得あるいは置換します。If-Modified-Since
ヘッダへのショートカット。
if_none_match
my $etag = $headers->if_none_match; $headers = $headers->if_none_match('"abc321"');
ヘッダの値を取得あるいは置換します。If-None-Match
ヘッダのショートカット。
is_finished
my $bool = $headers->is_finished;
ヘッダの解析が終了したかどうかをチェックします。
is_limit_exceeded
my $bool = $headers->is_limit_exceeded;
ヘッダがmax_line_size
あるいはmax_lines
を超えたかどうかをチェックします。
last_modified
my $m = $headers->last_modified; $headers = $headers->last_modified('Sun, 17 Aug 2008 16:27:35 GMT');
ヘッダの値を取得あるいは置換します。Last-Modified
ヘッダへのショートカット。
leftovers
my $leftovers = $headers->leftovers;
ヘッダーパーサーが、レフトオーバーしたデータを取得し、取り除きます。
link
my $link = $headers->link; $headers = $headers->link('<http://127.0.0.1/foo/3>; rel="next"');
ヘッダの値を取得あるいは置換します。RFC 5988のLink
ヘッダのショートカット。
link
my $link = $headers->link; $headers = $headers->link('<http://127.0.0.1/foo/3>; rel="next"');
ヘッダの値を取得あるいは置換します。RFC 5988
のLink
ヘッダへのショートカット。
location
my $location = $headers->location; $headers = $headers->location('http://127.0.0.1/foo');
ヘッダの値を取得あるいは置換します。Location
ヘッダへのショートカット。
names
my $names = $headers->names;
すべての現在定義されているヘッダの一覧を返却します。
# すべてのヘッダの名前 say for @{$headers->names};
origin
my $origin = $headers->origin; $headers = $headers->origin('http://example.com');
ヘッダの値を取得あるいは置換します。RFC 6454のOrigin
ヘッダのショートカット。
parse
$headers = $headers->parse("Content-Type: text/plain\x0d\x0a\x0d\x0a");
整形されたヘッダを解析します。
proxy_authenticate
my $authenticate = $headers->proxy_authenticate; $headers = $headers->proxy_authenticate('Basic "realm"');
ヘッダの値を取得あるいは置換します。Proxy-Authenticate
ヘッダへのショートカット。
proxy_authorization
my $proxy_authorization = $headers->proxy_authorization; $headers = $headers->proxy_authorization('Basic Zm9vOmJhcg==');
ヘッダの値を取得あるいは置換します。Proxy-Authorization
ヘッダへのショートカット。
range
my $range = $headers->range; $headers = $headers->range('bytes=2-8');
ヘッダの値を取得あるいは置換します。Range
ヘッダへのショートカット。
referrer
my $referrer = $headers->referrer; $headers = $headers->referrer('http://mojolicio.us');
Referer
ヘッダへのショートカット。RFC 2068 には誤植があり、 その結果 Referer
が公式なヘッダとなっています。
remove
$headers = $headers->remove('Foo');
ヘッダを除去します。
sec_websocket_accept
my $accept = $headers->sec_websocket_accept; $headers = $headers->sec_websocket_accept('s3pPLMBiTxaQ9kYGzzhZRbK+xOo=');
ヘッダの値を取得あるいは置換します。Sec-WebSocket-Accept
ヘッダへのショートカット。
sec_websocket_extensions
my $extensions = $headers->sec_websocket_extensions; $headers = $headers->sec_websocket_extensions('foo');
ヘッダの値を取得あるいは置換します。RFC 6455のSec-WebSocket-Extensions
ヘッダのショートカット。
sec_websocket_key
my $key = $headers->sec_websocket_key; $headers = $headers->sec_websocket_key('dGhlIHNhbXBsZSBub25jZQ==');
ヘッダの値を取得あるいは置換します。RFC 6455のSec-WebSocket-Key
ヘッダへのショートカット。
sec_websocket_protocol
my $protocol = $headers->sec_websocket_protocol; $headers = $headers->sec_websocket_protocol('sample');
ヘッダの値を取得あるいは置換します。RFC 6455のSec-WebSocket-Protocol
ヘッダへのショートカット。
sec_websocket_version
my $version = $headers->sec_websocket_version; $headers = $headers->sec_websocket_version(13);
ヘッダの値を取得あるいは置換します。RFC 6455のSec-WebSocket-Version
ヘッダへのショートカット。
server
my $server = $headers->server; $headers = $headers->server('Mojo');
ヘッダの値を取得あるいは置換します。Server
ヘッダへのショートカット。
set_cookie
my $set_cookie = $headers->set_cookie; $headers = $headers->set_cookie('f=b; Version=1; Path=/');
ヘッダの値を取得あるいは置換します。Set-Cookie
ヘッダへのショートカット。
status
my $status = $headers->status; $headers = $headers->status('200 OK');
ヘッダの値を取得あるいは置換します。RFC 3875のStatus
ヘッダへのショートカット。
strict_transport_security
my $policy = $headers->strict_transport_security; $headers = $headers->strict_transport_security('max-age=31536000');
ヘッダの値を取得あるいは置換します。Strict-Transport-Security
ヘッダのショートカット。 RFC 6797より。
te
my $te = $headers->te; $headers = $headers->te('chunked');
ヘッダの値を取得あるいは置換します。TE
ヘッダのショートカット。
to_hash
my $single = $headers->to_hash; my $multi = $headers->to_hash(1);
ヘッダをハッシュとして整形します。 複数行の値を、配列リファレンスをとして 出力することはデフォルトでは、無効になっています。
say $headers->to_hash->{DNT};
to_string
my $string = $headers->to_string;
ヘッダを、HTTPメッセージに適切に整形します。
trailer
my $trailer = $headers->trailer; $headers = $headers->trailer('X-Foo');
ヘッダの値を取得あるいは置換します。Trailer
ヘッダへのショートカット。
transfer_encoding
my $transfer_encoding = $headers->transfer_encoding; $headers = $headers->transfer_encoding('chunked');
ヘッダの値を取得あるいは置換します。Transfer-Encoding
ヘッダへのショートカット。
upgrade
my $upgrade = $headers->upgrade; $headers = $headers->upgrade('WebSocket');
ヘッダの値を取得あるいは置換します。Upgrade
ヘッダへのショートカット。
user_agent
my $user_agent = $headers->user_agent; $headers = $headers->user_agent('Mojo/1.0');
ヘッダの値を取得あるいは置換します。User-Agent
ヘッダへのショートカット。
vary
my $vary = $headers->vary; $headers = $headers->vary('*');
ヘッダの値を取得あるいは置換します。Vary
ヘッダのショートカット。
www_authenticate
my $authenticate = $headers->www_authenticate; $headers = $headers->www_authenticate('Basic "realm"');
ヘッダの値を取得あるいは置換します。WWW-Authenticate
ヘッダへのショートカット。
参考
Mojolicious, Mojolicious::Guides, http://mojolicio.us.
(Mojolicious 8.12を反映。2019年5月16日更新)