# NAME Plack::Middleware::EmulateOPTIONS - handle OPTIONS requests as HEAD # VERSION version v0.2.0 # SYNOPSIS ```perl use Plack::Builder; builder { enable "EmulateOPTIONS", filter => sub { my $env = shift; return $env->{PATH_INFO} =~ m[^/static/]; }; ... }; ``` # DESCRIPTION This middleware adds support for handling HTTP `OPTIONS` requests, by internally rewriting them as `HEAD` requests. If the requests succeed, then it will add `Allow` headers using the ["callback"](#callback) method. If the requests do not succeed, then the responses are passed unchanged. You can add the ["filter"](#filter) attribute to determine whether it will proxy `HEAD` requests. # ATTRIBUTES ## filter This is an optional code reference for a function that takes the [PSGI](https://metacpan.org/pod/PSGI) environment and returns true or false as to whether the request should be proxied. For instance, if you have CORS handler for a specific path, you might return false for those requests. Alternatively, you might use the ["callback"](#callback). If you need a different value for the `Allow` headers, then you should handle the requests separately. ## callback This is an optional code reference that modifies the response headers. By default, it sets the `Allow` header to "GET, HEAD, OPTIONS". If you override this, then you will need to manually set the header yourself, for example: ```perl use Plack::Util; enable "EmulateOPTIONS", callback => sub { my $res = shift; my $env = shift; my @allowed = qw( GET HEAD OPTIONS ); if ( $env->{PATH_INFO} =~ m[^/api/] ) { push @allowed, qw( POST PUT DELETE ); } Plack::Util::header_set( $res->[1], 'allow', join(", ", @allowed) ); }; ``` This was added in v0.2.0. # SEE ALSO [Plack](https://metacpan.org/pod/Plack) [PSGI](https://metacpan.org/pod/PSGI) # SOURCE The development version is on github at [https://github.com/robrwo/Plack-Middleware-EmulateOPTIONS](https://github.com/robrwo/Plack-Middleware-EmulateOPTIONS) and may be cloned from [git://github.com/robrwo/Plack-Middleware-EmulateOPTIONS.git](git://github.com/robrwo/Plack-Middleware-EmulateOPTIONS.git) # BUGS Please report any bugs or feature requests on the bugtracker website [https://github.com/robrwo/Plack-Middleware-EmulateOPTIONS/issues](https://github.com/robrwo/Plack-Middleware-EmulateOPTIONS/issues) When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature. # AUTHOR Robert Rothenberg # COPYRIGHT AND LICENSE This software is Copyright (c) 2022 by Robert Rothenberg. This is free software, licensed under: ``` The Artistic License 2.0 (GPL Compatible) ```