[cgiapp] Moving to PSGI: Issues with $ENV
    Mike Tonks 
    fluffymike at googlemail.com
       
    Mon Oct 15 08:42:49 EDT 2012
    
    
  
Another issue that has come up along the way is using $ENV
While this is fine under apache it doesn't seem to work with PSGI
A common occurence is using $ENV{REMOTE_ADDR} for a user IP Address,
but this is easily solved by using $self->query->remote_addr which
does the right thing in both environments.
However today I stumbled across an issue with
CGI::Application::Plugin::DetectAjax
  my $header = 'HTTP_X_REQUESTED_WITH';
  if (exists $ENV{$header} && lc $ENV{$header} eq 'xmlhttprequest') {
    return 1;
  }
  else {
    return 0;
  }
This does not work under PSGI.
Looking at CGI::PSGI the correct approach seems to be:
$self->env->{$header}
so a possible patch would look something like:
  my $header = 'HTTP_X_REQUESTED_WITH';
  my $header_value = $self->{__IS_PSGI} ? $self->env->{$header} : $ENV{$header};
  if ($header_value && lc $header_value eq 'xmlhttprequest') {
    return 1;
  }
  else {
    return 0;
  }
Can anyone help / confirm / improve on this?
Regards,
mike
    
    
More information about the cgiapp
mailing list