Uname: Linux web3.us.cloudlogin.co 5.10.226-xeon-hst #2 SMP Fri Sep 13 12:28:44 UTC 2024 x86_64
Software: Apache
PHP version: 8.1.31 [ PHP INFO ] PHP os: Linux
Server Ip: 162.210.96.117
Your Ip: 18.188.203.186
User: edustar (269686) | Group: tty (888)
Safe Mode: OFF
Disable Function:
NONE

name : RearrangeHeaders.pm
package Plack::Middleware::RearrangeHeaders;
use strict;
use warnings;
use parent qw( Plack::Middleware );

use HTTP::Headers;

sub call {
    my $self = shift;

    my $res = $self->app->(@_);
    $self->response_cb($res, sub {
        my $res = shift;

        my $h = HTTP::Headers->new(@{$res->[1]});
        my @new_headers;
        $h->scan(sub { push @new_headers, @_ });

        $res->[1] = \@new_headers;
    });
}

1;

__END__

=head1 NAME

Plack::Middleware::RearrangeHeaders - Reorder HTTP headers for buggy clients

=head1 SYNOPSIS

  use Plack::Builder;

  my $app = sub {
      return [ 200, [
          'Last-Modified' => 'Wed, 23 Sep 2009 13:36:33 GMT',
          'Content-Type' => 'text/plain',
          'ETag' => 'foo bar',
      ], [ 'Hello Foo' ] ];
  };

  builder {
      enable "Plack::Middleware::RearrangeHeaders";
      $app;
  };

=head1 DESCRIPTION

Plack::Middleware::RearrangeHeaders sorts HTTP headers based on "Good Practice" i.e.:

  # "Good Practice" order of HTTP message headers:
  #    - Response-Headers
  #    - Entity-Headers

to work around buggy clients like very old MSIE or broken HTTP proxy
servers. Most clients today don't (and shouldn't) care about HTTP
header order but if you're too pedantic or have some environments
where you need to deal with buggy clients like above, this might be
useful.

=head1 AUTHOR

Tatsuhiko Miyagawa

=head1 SEE ALSO

L<HTTP::Headers>

=cut
© 2025 GrazzMean