Apache2-API
view release on metacpan or search on metacpan
lib/Apache2/API/Headers/Accept.pm view on Meta::CPAN
=head2 1. More specific beats wildcard at same q
my $a = Apache2::API::Headers::Accept->new( 'text/html;q=0.9, text/*;q=0.9' );
$a->match( [ 'text/plain', 'text/html' ] );
# "text/html"
=head2 2. */* is a fallback only
my $a = Apache2::API::Headers::Accept->new( '*/*;q=0.9, application/json;q=0.9' );
$a->match( [ 'image/png', 'text/html', 'application/json' ] );
# "application/json"
=head2 3. */* with higher q wins and chooses first supported
my $a = Apache2::API::Headers::Accept->new( '*/*;q=1.0, application/json;q=0.9' );
$a->match( [ 'image/png', 'text/html', 'application/json' ] );
# "image/png"
=head1 LEGACY MATCH PRIORITY
Set C<$Apache2::API::Headers::Accept::MATCH_PRIORITY_0_01_STYLE> to true to make equal-C<q> ties follow the order of your offers (the array reference of supported medias), instead of the header order. Full matches still outrank partial ones. Wildcard...
=head1 PERFORMANCE
The matchers called with L<Apache2::API::Headers::AcceptCommon/match> loops through the array reference of supported medias times the number of parsed acceptable medias as submitted by the client.
Typical HTTP C<Accept> headers are small, so the performance should be very good.
lib/Apache2/API/Request/Upload.pm view on Meta::CPAN
print( "Is it encoded in utf8? ", $file->charset == 8 ? 'yes' : 'no', "\n" );
my $field_header = $file->info;
# Returns the APR::Brigade object content for file_upload
my $brigade = $field->bucket
printf( "File name provided by client is: %s\n", $file->filename );
# link to the temporary file or make a copy if on different file system
$file->link( '/to/my/temp/file.png' );
my $buff;
# Read in our buffer if this is less than 500Kb
$file->slurp( $buff ) if( $file->length < 512000 );
print( "Uploaded data is %d bytes big\n, $file->length );
print( "MIME type of uploaded data is: %s\n", $file->type );
print( "Temporary file name is: %s\n", $file->tempname );
lib/Apache2/API/Request/Upload.pm view on Meta::CPAN
May also be called as B<size>
=head2 link
Provided with a file path and this will link the file-upload content with the local file named $path. Creates a hard-link if the spoolfile's (see upload_tempname) temporary directory is on the same device as $path; otherwise this writes a copy.
This is useful to avoid recreating the data. This works on *nix-like systems
my $up = $req->param( 'file_upload' );
$up->link( '/to/my/location.png' ) ||
die( sprintf( "Cannot symlink from %s: $!\n", $up->tempname ) );
=head2 make
Fast XS param constructor.
my $param = Apache2::API::Request::Param::Upload->make( $pool, $name, $value );
=head2 name
lib/Apache2/API/Status.pm view on Meta::CPAN
=head2 HTTP_VARIANT_ALSO_VARIES (506)
See L<rfc 2295 on Transparant Ngttn|https://tools.ietf.org/html/rfc2295>
This is returned in the context of Transparent Content Negotiation when there is a server-side misconfiguration that leads the chosen variant itself to also engage in content negotiation, thus looping.
For example:
GET / HTTP/1.1
Host: www.example.org
Accept: text/html; image/png; text/*; q=0.9
Accept-Language: en-GB; en
Accept-Charset: UTF-8
Accept-Encoding: gzip, deflate, br
=head2 HTTP_INSUFFICIENT_STORAGE (507)
See L<rfc 4918, section 11.5 on WebDAV|https://tools.ietf.org/html/rfc4918#section-11.5>
This is returned in the context of WebDav protocol when a C<POST> or C<PUT> request leads to storing data, but the operations fails, because the resource is too large to fit on the remaining space on the server disk.
t/07.accept.t view on Meta::CPAN
'text/html;q=0.5, application/json;q=0.9',
[ 'text/html', 'application/json' ],
'application/json',
'Higher q wins'
);
# Test type wildcard
# type/* wins over */* and specificity considered
is_match(
'text/*;q=0.7, */*;q=0.2, application/json;q=0.9',
[ 'image/png', 'application/json', 'text/html' ],
'application/json',
'Specific type beats ranges via q'
);
# Test wildcard
# */* returns first supported
is_match(
'*/*;q=0.3',
[ 'application/json', 'text/html' ],
'application/json',
t/07.accept.t view on Meta::CPAN
local $Apache2::API::Headers::Accept::MATCH_PRIORITY_0_01_STYLE = 1;
$ac = Apache2::API::Headers::Accept->new( 'text/html;q=0.5,application/json;q=0.5', debug => $DEBUG );
is( $ac->match( ['application/json', 'text/html'] ), 'application/json', '0.01 style: supported order' );
}
# Wildcard and specific at the same q -> prefer the specific (modern mode)
{
local $Apache2::API::Headers::AcceptCommon::MATCH_PRIORITY_0_01_STYLE = 0;
my $ac = Apache2::API::Headers::Accept->new( '*/*;q=0.9, application/json;q=0.9', debug => $DEBUG );
is(
$ac->match( [ 'image/png', 'text/html', 'application/json' ] ),
'application/json',
'Equal q: specific beats wildcard in modern mode'
);
}
# Wildcard higher q than specific -> wildcard wins (first supported)
{
local $Apache2::API::Headers::AcceptCommon::MATCH_PRIORITY_0_01_STYLE = 0;
my $ac = Apache2::API::Headers::Accept->new( '*/*;q=1.0, application/json;q=0.9', debug => $DEBUG );
is(
$ac->match( [ 'image/png', 'text/html', 'application/json' ] ),
'image/png',
'Higher q wildcard chooses first supported'
);
}
};
subtest 'preferences consistency' => sub
{
my $ac = Apache2::API::Headers::Accept->new( 'text/plain;q=0.4, text/html;q=0.9, application/json', debug => $DEBUG );
my $prefs = $ac->preferences;
isa_ok( $prefs, 'ARRAY', 'Accept::preferences returns arrayref (first call)' );
( run in 0.641 second using v1.01-cache-2.11-cpan-df04353d9ac )