Schrift
[thread]11727[/thread]

Content-Length falsch berechnet / Browser angewand



<< >> 3 Einträge, 1 Seite
burnersk
 2008-04-30 16:04
#109027 #109027
User since
2008-03-25
83 Artikel
BenutzerIn
[default_avatar]
Hi.

Momentan sieht mein Header so aus:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  my $args = undef;
     $args = shift if $_[0];
  my @date = gmtime(time);
  my @month = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
  my @days = qw( Sun Mon Tue Wed Thu Fri Sat );

  print 'Date: '.$days[$date[6]].', '.
               sprintf("%02d", $date[3]).' '.
               $month[$date[4]].' '.
               (sprintf("%02d", $date[5])+1900).' '.
               sprintf("%02d", $date[2]).':'.
               sprintf("%02d", $date[1]).':'.
               sprintf("%02d", $date[0]).' GMT', "\n";
  print 'Server: Reifensuchmaske', "\n";
  print 'Cache-Control: private, s-maxage=0, max-age=0, must-revalidate', "\n";
  print 'Content-Type: application/x-www-form-urlencoded; charset=iso-8859-1', "\n";
  print "\n";
  print $args->{content};


Wenn ich zwischen Cache-Control und Content-Type Content-Length hinzufüge, etwa:
Code (perl): (dl )
  print 'Content-Length: '.length($args->{content}), "\n";

Wird bei FF und IE7, wenn die Rückgabe größer 100bytes ist, der untere teil des contents abgehackt.

Habe vorher $args->{content} mit dem oben angegeben Zeichensatz encoded



Wie kann ich das abhacken verhindern?
renee
 2008-04-30 16:30
#109029 #109029
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hat zwar nix mit Deinem Problem zu tun, aber warum verwendest Du zigmal sprintf?

Man kann ganz bequem so etwas machen:

Aus

Code (perl): (dl )
1
2
3
4
5
6
7
print 'Date: '.$days[$date[6]].', '.
             sprintf("%02d", $date[3]).' '.
             $month[$date[4]].' '.
             (sprintf("%02d", $date[5])+1900).' '.
             sprintf("%02d", $date[2]).':'.
             sprintf("%02d", $date[1]).':'.
             sprintf("%02d", $date[0]).' GMT', "\n";


wird
Code (perl): (dl )
1
2
3
print sprintf "Date: %s, %02d %s %04d %02d:%02d:%02d GMT",
      $days[$date[6]], $date[3], $month[$date[4]], $date[5]+1900, 
      $date[2], $date[1], $date[0];


Hat den Vorteil, dass es lesbarer wird und schneller ersichtlich ist, wie der String am Ende aussehen soll.

Genauso kann man einige prints sparen:

statt
Code (perl): (dl )
1
2
3
print "...";
print "...";
print "...";


einfach
Code (perl): (dl )
1
2
3
print "...",
     "...",
     "...";

schreiben.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
burnersk
 2008-04-30 16:38
#109030 #109030
User since
2008-03-25
83 Artikel
BenutzerIn
[default_avatar]
renee+2008-04-30 14:30:10--
Code (perl): (dl )
1
2
3
print sprintf "Date: %s, %02d %s %04d %02d:%02d:%02d GMT",
      $days[$date[6]], $date[3], $month[$date[4]], $date[5]+1900, 
      $date[2], $date[1], $date[0];

Stimmt, Danke!
So wird es wirklich mal schön :)
<< >> 3 Einträge, 1 Seite



View all threads created 2008-04-30 16:04.