名前

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::HeadersRFC 7230RFC 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::HeadersMojo::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 5988Linkヘッダへのショートカット。

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日更新)

関連情報