Bonjour,
nous utilisons avec succès des services rest 400 grâce au serveur Apache de l'iBM i et CGIDEV2.
Cependant, de façon aléatoire, certains programme CGI plantent avec l'erreur :
[Tue Jul 18 17:23:58 2017] [error] [client 172.30.0.178] ZSRV_MSG0107: Premature end of script headers: File name is sin00278.pgm
Apparemment la cause de cette erreur peut être multiple (message très générique)
Ma question est : comment connaitre avec précision la cause de l'erreur ? Les logs du serveur Apache sont bien trop succinctes...
Si j'utilise les commandes suivantes, vais-je avoir plus d'infos ?
chgjobd qhttpsvr/qzhbhttp log(4 00 *seclvl) inqmsgrpy(*dft)
endtcpsvr server(*http) httpsvr(RESTAS400)
strtcpsvr server(*http) httpsvr(RESTAS400)
Merci pour votre aide !
Plantage programme CGI
-
- Site Admin
- Messages : 813
- Enregistré le : mer. 14 févr. 2007, 18:00:03
- Localisation : Nantes
- Contact :
Entetes
Il semble que vous n'envoyez pas les entêtes HTTP (particulièrement content-type), voyez http://www.perlmonks.org/?node_id=24447
ou bien les retours chariots sont mal interprétés....
Pouvez nous mettre un bout du code RPG ?
ou bien les retours chariots sont mal interprétés....
Pouvez nous mettre un bout du code RPG ?
Christian Massé (Volubis.fr)
Plantage programme CGI
Bonjour,
J'ai, moi aussi eu le même type d'erreur.
[Wed Aug 30 13:56:54 2017] [error] [client 172.30.141.55] CGI PROGRAM /QSYS.LIB/WWADHESI.LIB/ADH00293.PGM RETURNED EXCEPTION ID MCH3401
[Wed Aug 30 13:56:54 2017] [error] [client 172.30.141.55] ZSRV_MSG0107: Premature end of script headers: File name is ADH00293.pgm
J'ai regardé les entêtes HTTP et le retour chariot utilisé.
Ici un bout de code des déclarations:
dcl-c c_refcomm const('refcomm');
//Caractère "Retour chariot"
dcl-c cCRLF const(x'0d25');
//Header JSON
dcl-c cHeaderJson const('Content-type: text/plain');
//Header HTML
dcl-c cHeaderHTML const('Content-type: text/html');
//Erreur HTTP 404
dcl-c cError404 const('Status: 404 Not Found');
//Erreur HTTP 500
dcl-c cError500 const('Status: 500 Internal Server Error');
Aurez-vous une idée du problème?
J'ai, moi aussi eu le même type d'erreur.
[Wed Aug 30 13:56:54 2017] [error] [client 172.30.141.55] CGI PROGRAM /QSYS.LIB/WWADHESI.LIB/ADH00293.PGM RETURNED EXCEPTION ID MCH3401
[Wed Aug 30 13:56:54 2017] [error] [client 172.30.141.55] ZSRV_MSG0107: Premature end of script headers: File name is ADH00293.pgm
J'ai regardé les entêtes HTTP et le retour chariot utilisé.
Ici un bout de code des déclarations:
dcl-c c_refcomm const('refcomm');
//Caractère "Retour chariot"
dcl-c cCRLF const(x'0d25');
//Header JSON
dcl-c cHeaderJson const('Content-type: text/plain');
//Header HTML
dcl-c cHeaderHTML const('Content-type: text/html');
//Erreur HTTP 404
dcl-c cError404 const('Status: 404 Not Found');
//Erreur HTTP 500
dcl-c cError500 const('Status: 500 Internal Server Error');
Aurez-vous une idée du problème?
-
- Site Admin
- Messages : 813
- Enregistré le : mer. 14 févr. 2007, 18:00:03
- Localisation : Nantes
- Contact :
timeout
Ca peut aussi être du à un trop long temps de traitement de la part du pgm
http://www.lansa.com/support/notes/p0334.htm
http://www.lansa.com/support/notes/p0334.htm
Christian Massé (Volubis.fr)
-
- Site Admin
- Messages : 813
- Enregistré le : mer. 14 févr. 2007, 18:00:03
- Localisation : Nantes
- Contact :
deux retours chariot ?
Sinon, vous avez bien deux retours chariot en fin de script ?
Christian Massé (Volubis.fr)
Oui, on a bien deux chariots .
Par exemple, pour poster une erreur, on a ce code:
wData = cError404;
wHeader = cHeaderHTML;
wText = %subst(cError404:13);
exsr trt_error;
begsr trt_error;
wText = '<html><body>' + %trim(wText) + '</body></html>';
//Postage de l'erreur
wData = %trim(wData) + cCRLF
+ %trim(wHeader) + cCRLF + cCRLF
+ %trim(wText);
exsr trt_postrep;
endsr;
Par exemple, pour poster une erreur, on a ce code:
wData = cError404;
wHeader = cHeaderHTML;
wText = %subst(cError404:13);
exsr trt_error;
begsr trt_error;
wText = '<html><body>' + %trim(wText) + '</body></html>';
//Postage de l'erreur
wData = %trim(wData) + cCRLF
+ %trim(wHeader) + cCRLF + cCRLF
+ %trim(wText);
exsr trt_postrep;
endsr;