2009-05-26 2 views
0

J'ai un problème étrange, peut-être quelque chose à voir avec Apache plus que Perl. Dans mon code quand j'écris:Pourquoi mon en-tête CGI s'imprime-t-il dans le corps?

print "content-type: text/html\n\n"; 

l'imprime avec le code. Mais quand je tape:

$c = new CGI; $c->header(); 

cela fonctionne très bien et affiche la sortie rendue HTML.

Quel pourrait être le problème?

Merci

+0

Réduisez votre programme au plus petit exemple démontrant le problème, puis montrez-le. Il y a tellement de choses qui pourraient se passer que de tirer quelques lignes ne va pas nous aider à vous aider. :) –

Répondre

1

Gardez à l'esprit, RFC HTTP spécifie que

\r\n 

est utilisé pour délimiteurs de ligne, non

\n 

si vous voulez être émettre

print "Content-Type: text/html\r\n\r\n"; 

lieu.

Vous devriez simplement utiliser ->headers pour faire cela pour vous.

En outre, note j'ai utilisé Camel-Case au lieu de minuscule. Bien que les deux devraient fonctionner, le Camel-Case est la notation utilisée dans la spécification, ce qui est préférable et plus susceptible de fonctionner sur des UA étranges.

2

est le "type de contenu: text/html" la première chose qui est sortie? Utilisez wget ou similaire pour vérifier la sortie réelle; ne faites pas confiance à vos yeux ou à la source de vue du navigateur.

Notez également que sous mod_perl, CGI appelle la méthode send_cgi_header de la requête au lieu de simplement imprimer les en-têtes.

Est-il possible que vous utilisiez l'en-tête de CGI() dans plus d'un endroit? C'est inoffensif, mais le remplacement d'un seul appel header() par l'impression explicite de l'en-tête donnerait les résultats que vous voyez.

+0

oui le même code fonctionne avec l'utilisation cgi. donc c'est étrange :( –

+0

@Alec Smart: ce commentaire ne semble pas être une réponse à ce que j'ai dit ?? – ysth