Page 1 sur 1

Plantage programme CGI

Posté : mer. 19 juil. 2017, 08:04:54
par Athalaric44
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 !

Entetes

Posté : mer. 19 juil. 2017, 14:32:04
par cmasse
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 ?

Plantage programme CGI

Posté : mer. 30 août 2017, 13:42:18
par kokoemi
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?

timeout

Posté : mer. 30 août 2017, 13:52:59
par cmasse
Ca peut aussi être du à un trop long temps de traitement de la part du pgm

http://www.lansa.com/support/notes/p0334.htm

deux retours chariot ?

Posté : mer. 30 août 2017, 13:54:32
par cmasse
Sinon, vous avez bien deux retours chariot en fin de script ?

Posté : mer. 30 août 2017, 14:00:59
par kokoemi
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;

Posté : mer. 30 août 2017, 15:01:18
par cmasse
deux retour chariot en fin de script !!

et en augmentant le timeout comme indiqué sur le site de Lansa ?