Content-Length trop grand dans une requête HTTP, et Apache attends
Bonjour,
Le titre de ce sujet n'évoque pas un problème en soi, mais quelque chose qui me semble logique.Si l'on envoie une requête HTTP à un serveur, en précisant dans son en-tête que le corps est d'une certaine taille, le serveur attendra de recevoir du client suffisamment de données pour atteindre cette taille.
La où le problème est, c'est si on envoie une requête dont le corps est d'une taille moins grande que celle annoncée dans le préambule.
Le serveur reçoit la totalité de la requête, mais est faussement informé par la requête elle-même qu'il doit encore en attendre d'autre, alors il attend.
Expérience testée avec la bibliothèque PHP php_curl pour contacter un serveur. Au bout de largement plus de 30 secondes, j'obtiens un retour :
Citation:
Fatal error: Maximum execution time of 30 seconds exceeded
Mais voilà, mon serveur à moi est un service web que je code. Je peux pas lui permettre de bloquer une connection pendant 30 secondes en attendant que des données n'arrivent pas.
Alors peut-on et comment modifier le comportement d'Apache pour lui dire qu'il ne faut pas attendre si longtemps ?
J'ai regardé dans le fichier httpd.conf of course, et donc j'ai trouvé une directive dont la valeur par défaut est 300, qui s'appelle TimeOut :
Citation:
Directive TimeOut
Syntaxe : TimeOut nombre
Défaut : TimeOut 300
Contexte : configuration serveur
Statut : noyau
La directive TimeOut définit la temporisation courante pendant laquelle Apache attendra l'une de ces trois choses :
1. Le temps total de réception d'une requête GET.
2. Le temps entre la réception de paquets TCP lors d'une requête POST ou PUT.
3. Le temps entre deux acquittements lors de la transmission de paquets TCP de réponse.
La valeur par défaut était de 1200 avant la version 1.2, mais a été abaissée à 300 depuis, ce qui est déjà largement plus que nécessaire dans la plupart des situations. Il n'est cependant pas réglé plus bas car il peut exister (encore) des portions de code un peu "floues" par lesquelles le temporisateur n'est pas remis à zéro lors de la transmission d'un paquet.
Bon ... Mais à combien je peux la mettre moi ? et est-ce que je dois faire ça, ou y a t'il une autre solution ?
En sachant que mon serveur est un mini-service web basé sur une architecture REST (donc que de l'HTTP pour lui causer). Ce serveur est actuellement la même machine que le client, mais ce ne sera pas toujours le cas.
Bonne journée :)