HTTP Headers--类封装HTTP消息头:
require HTTP::Headers;
$h = HTTP::Headers->new;
$h->header('Content-Type' => 'text/plain'); # set
$ct = $h->header('Content-Type'); # get
$h->remove_header('Content-Type'); # delete
描述:
HTTP::Headers class 类封装了HTTP-style 消息的headers. the headers 有属性值对也叫做字段组成,
可以是重复的,可以是按特定的顺序。 字段名字是不区分的,
这个类的实例是通常用于创建HTTP::Request and HTTP::Response类的成员变量,内部类
下面的方法是可用的:
$h = HTTP::Headers->new
构造一个新的 HTTP::Headers对象。你可以通过一些初始属性值对作为参数传递到构造。
$h = HTTP::Headers->new(
Date => 'Thu, 03 Feb 1994 00:00:00 GMT',
Content_Type => 'text/html; version=3.2',
Content_Base => 'http://www.perl.org/');
构造的参数被传递到header方法,描述如下:
$h->clone
返回一个HTTP::Headers object.的拷贝
$h->header( $field )
$h->header( $field => $value )
$h->header( $f1 => $v1, $f2 => $v2, ... )
Get 或者设置一个或者多个header 域的值。 header firld 名字($field) 是不区分大小写的,
为了生活更容易对于Perl 用户 需要避免引用在=>操作符前,你可以使用'_' 作为替换'-' 在header names里
header() 方法接收多个($field => $value)对,这意味着你可以用单个请求更新多个域值
$value 参数可能是一个纯字符串或者而一个引用到一个字符串数组。
如果$value 是被提供为undef 那么域值会被删除, 如果$value 没有给定,那么header 域仍旧保持不变。
最后的header firlds 的老的值(或者值组)返回后,如果没有这样的域存在 undef会被返回。
一个多值域会被返回作为单独的值在列表开和回被连接用"," 作为标量上下文的分隔符。
HTTP 规范(RFC 2616)允许连接多个值以这种方式不会改变header 域的语义,
但在实践中有类似的老式的cookies(see HTTP::Cookies) ","是用于作为语法的一部分在单个域值里
Examples:
$header->header(MIME_Version => '1.0',
User_Agent => 'My-Web-Client/0.01');
$header->header(Accept => "text/html, text/plain, image/*");
$header->header(Accept => [qw(text/html text/plain image/*)]);
@accepts = $header->header('Accept'); # get multiple values
$accepts = $header->header('Accept'); # get values as a single string
$h->push_header( $field => $value )
$h->push_header( $f1 => $v1, $f2 => $v2, ... )
为一个指定的header 域增加一个新的域值,先前的值对于相同的域是被保留的。
至于header()方法,域值($field) 是不区分大小洗的,"_" 可以用来替代"-"
$value 的值可以是一个标量或者而一个标量数组的引用
$header->push_header(Accept => 'image/jpeg');
$header->push_header(Accept => [map "image/$_", qw(gif png tiff)]);
$h->init_header( $field => $value )
设置特定的header 对于给定的值,但是只有没有先前的值(域被设置)
header 域名字($field) 是不区分大小写的,'_' 可以用来替换"-"
$value 参数可以是一个标量或者一个标量数组的引用
$h->remove_header( $field, ... )
这个函数删除指定的header 域
header 域名字($field) 是不区分大小写的,"_" 可以用来替换"-"
返回值是域被删除的值,在标量上下面 返回的是删除的域的数目
zjzc01:/root/perl# cat t1.pl
require HTTP::Headers;
$h = HTTP::Headers->new(
Date => 'Thu, 03 Feb 1994 00:00:00 GMT',
Content_Type => 'text/html; version=3.2',
Content_Base => 'http://www.perl.org/');
print $h->remove_header( Date );
zjzc01:/root/perl# perl t1.pl
Thu, 03 Feb 1994 00:00:00 GMTzjzc01:/root/perl#
zjzc01:/root/perl# perl t1.pl
便利方法:
最经常被使用的headers 可以通过以下方式访问。 大多数方法可以用于read和设置header 的值。
header 值是被设置如果你传递一个参数到这个方法。老的header值也会被返回,
如果给定的header 不存在 那么返回undef
zjzc01:/root/perl# cat t1.pl
require HTTP::Headers;
$h = HTTP::Headers->new(
Date => 'Thu, 03 Feb 1994 00:00:00 GMT',
Content_Type => 'text/html; version=3.2',
Content_Base => 'http://www.perl.org/');
$h->push_header( Date => 'xxxx' );
print $h->header( Date );
zjzc01:/root/perl# perl t1.pl
Thu, 03 Feb 1994 00:00:00 GMTxxxxzjzc01:/root/perl#
处理时间的方法总是转换它们的值为system time (seconds since Jan 1, 1970)
它们也总是期望这种类型的值当header value被设置
$h->date
header 表明了日期和时间
$h->date(time); # set current date
$h->expires header 给出了date和time 实体应该被考虑为过期的
$h->if_modified_since
$h->if_unmodified_since
那些 header 域 是用于一个请求条件,如果请求的资源已经被修改自从域中指定的时间,
server 会返回一个304 不修改响应代替文档本身