2009-11-05 5 views
1

Je développe une API RESTful et j'ai écrit un gestionnaire mod_perl2 qui s'occupe de la requête.Comment supprimer le document d'erreur apache par défaut dans mod_perl?

Mes offres de gestionnaire avec des codes d'erreur en définissant $r->status($http_code) et return $http_code;

Tout va bien, sauf un petit problème: quand mon HTTP_CODE est différent de 200 (par exemple 404), apache ajoute un document d'erreur HTML par défaut à mon propre réponse générée.

Par exemple:

GET /foo 

donne:

$VAR1 = bless({ 
       'status' => 404, 
       'data' => {}, 
       'message' => 'Resource not found for foo' 
       }, 'My::Response'); 
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<html><head> 
<title>404 Not Found</title> 
</head><body> 
<h1>Not Found</h1> 
<p>The requested URL /foo was not found on this server.</p> 
<p>Additionally, a 404 Not Found 
error was encountered while trying to use an ErrorDocument to handle the request.</p> 
<hr> 
<address>Apache/2.0.54 (Fedora) Server at localhost Port 80</address> 
</body></html> 

Comment puis-je me débarrasser de ce code HTML généré par apache?

MISE À JOUR: Ma faute. Mon gestionnaire mod_perl2 renvoyait un code HTTP_ * au lieu de Apache2 :: Const :: OK.

+0

Comment aborderiez-vous ce problème avec Apache 1.3 et mod_perl 1.xx lorsque Apache :: Constantes ne supporte pas les codes de statut HTTP comme 201? –

Répondre

1

Voir Apache2::Response. Je n'ai pas le temps d'expérimenter maintenant, mais cela devrait fonctionner.

+0

C'est l'idée, mais j'ai cette erreur de Apache: ErrorDocument prend deux arguments, Changer les réponses pour les erreurs HTTP Tout moyen de désactiver les documents d'erreur apache? Je ne pense pas que ce soit un problème puisque le code de retour est conservé. Certains navigateurs choisissent d'afficher leurs propres documents d'erreur au lieu de ceux d'Apache par exemple. – jeje

0

Demandez-vous comment ne pas envoyer de corps de message dans votre réponse?

Si vous voulez quelque chose d'autre que ce que Apache va faire pour vous, vous devez gérer la demande vous-même. À quoi ressemble le reste de votre gestionnaire? Le code d'affichage nous empêche de deviner ce que vous faites.

La valeur de retour de votre gestionnaire permet à Apache de savoir si vous avez traité la demande vous-même ou si elle doit faire quelque chose de plus en votre nom. Je devine que tu fais le dernier.

0

Je cherchais aussi cela. Et le tour était assez simple:

$r->status(HTTP_NOT_FOUND); 
$r->custom_response(404, ""); 
return OK; 

où r $ est Apache2 :: objet Response.

Questions connexes