IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

Unexpected paquet FIN,ACK pendant un upload depuis un client mobile


Sujet :

Apache

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2008
    Messages : 33
    Par défaut Unexpected paquet FIN,ACK pendant un upload depuis un client mobile
    Bonjour,

    Je sollicite votre aide car je me confronte à un problème et commence à manquer d'idées.

    L'environnement :
    - un serveur : apache2 avec soit mod_php, mod_python ou encore mod_wsgi
    - un client : opera 9.51b2 (version mobile) sur le réseau gprs

    Le but :
    - réaliser un upload d'images à l'aide de la méthode POST multipart/form-data

    Le problème :
    - je recois un connection closed by remote server

    Voici le début de l'échange:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    POST /example.com/upload<CRLF>
    HTTP 1.1<CRLF>
    User-Agent: Opera/ 9.51 Beta (Microsoft Windows; PPC; MDA Vario/2.0 Profile/MIDP-2.0 Configuration/ CLDC-1.1; Opera Mobi/15894; U; en) Presto/2.1.0<CRLF>
    Accept: text/html,application/xml;q=0.9,application/xhtml+xml, image/png,image/jpeg,image/gif,image/x-xbit maps,*/*;q=0.1
    <CRLF>
    Accept-Language: en-GB,en;q=0.9<CRLF>
    Accept-Charset: ISO-8859-1,utf-8;utf-16,*;q=0.1<CRLF>
    Accept-Encoding: deflate,gzip,x-gzip,identity,*,q=0<CRLF>
    Referer: http://example.com/upload/<CRLF>
    Cookie: sessionid=7b25200b8b9a3bc99625c458e1603805
    <CRLF>
    Cookie2: $Version=1<CRLF>
    Content-Length: 27619<CRLF>
    Content-type: multipart/form-data; boudary=----------Mp0B5uY8ApW0FvaeHxvps<CRLF>
    Host: example.com<CRLF>
    Cache-Control: max-age=43200<CRLF>
    Connection: keep-alive<CRLF><CRLF>
    A la suite de ce paquet je recois un ACK du serveur, le client semble envoyer quelques données avec à chaque fois une réponse ACK du serveur, puis le client ferme la connection (FIN, ACK) et la requête est incomplète...
    Le serveur lui envoie la réponse un HTTP 200 mais qui est ignorée par le client.

    Est-il normale d'avoir l'en-tête Head, Cache-Control et Connection juste après le Content-type ?
    Enfin pourquoi ce navigateur envoie-t-il un EOF avant la fin du contenu >

    En faisant un test avec Firefox 3 et Opera 10 il apparaît que ces en-têtes soient avant le Content-Length et qu'ils n'envoient pas un packet FIN avant la fin de l'échange.

    Si besoin je peux détailler plus l'échange entre le client et le serveur

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2008
    Messages : 33
    Par défaut
    Re-bonjour,

    Il semblerait que le problème ne soit pas où est placé Content-type dans le header mais bel et bien le fait que le navigateur envoie un paquet ACK, FIN avant la fin des données du formulaire.
    Je viens de réaliser un test avec IE5 version mobile en GPRS.

    Autre précision : ce problème n'apparaît pas avec une connection Wifi sauf lors d'un très faible signal.

    Auriez-vous des pistes pour creuser ce problème ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2008
    Messages : 33
    Par défaut
    Sur deux tests que j'ai pu effectuer avec Opera avec une connexion GPRS, j'observe que la connexion est fermée par le navigateur après 17000 bytes.

    Je suis donc en train de chercher le pourquoi de cette erreur autour des 17ko.

    J'ai toujours une solution alternative (faire un chunk des données envoyées côté client) mais il apparaît que ce problème est similaire sur différents téléphones, différentes versions de WM, différents opérateurs (vodafone, t-mobile, o2...) mais toujours avec Opera 9.51b et supérieur.

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Je n'ai pas bien compris : le pb n'existe qu'avec Opera 9 ?

    Un problème de latence, peut-être, qui déclencherait un timeout TCP côté client ? Combien de temps s'écoule entre le ACK du serveur précédent et le FIN,ACK du client ?

    A tout hasard, mais tout dépend de la techno utilisée pour le développement du site, désactive le buffer de la réponse, histoire que le serveur envoie des données au client tout de suite et au fur et à mesure.

    Il y a un répartiteur de charge (type Alteon) devant le serveur Web ? Tu les as peut-être mais il faudrait que tu récupères des traces TCP côté client ET côté serveur et que tu les compares. Le problème peut provenir d'un équipement intermédiaire.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2008
    Messages : 33
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Je n'ai pas bien compris : le pb n'existe qu'avec Opera 9 ?

    Un problème de latence, peut-être, qui déclencherait un timeout TCP côté client ? Combien de temps s'écoule entre le ACK du serveur précédent et le FIN,ACK du client ?

    A tout hasard, mais tout dépend de la techno utilisée pour le développement du site, désactive le buffer de la réponse, histoire que le serveur envoie des données au client tout de suite et au fur et à mesure.

    Il y a un répartiteur de charge (type Alteon) devant le serveur Web ? Tu les as peut-être mais il faudrait que tu récupères des traces TCP côté client ET côté serveur et que tu les compares. Le problème peut provenir d'un équipement intermédiaire.
    Merci __Mac__, je vais regarder celà de plus près, dès que je peux trouver un moyen de capturer les paquets envoyés depuis Windows Mobile, il me semble qu'il existe un sniffer (vxSniffer).

    Pour répondre à tes questions il se passe très peu de temps entre le dernier ACK envoyé par le serveur et le FIN, ACK envoyé par le navigateur, soit : moins d'une seconde et à vrai dire depuis le clique sur le bouton envoyé et jusque l'erreur il se passe un peu moins de deux secondes.

    ---

    Sinon pour récapituler le problème de "Connection Closed by Remote Server" ne se pose qu'avec Opera Mobile 9.51b1 et supérieur (jusque 9.7, je n'ai pas encore eu le temps de tester sous Opera 10) lors d'un upload et seulement avec un réseau de type GPRS, 3g, etc...
    Effectivement en wifi, je n'ai aucun problème.

    De même si j'ai une erreur qui apparaît avec Opera en mode GPRS et que je teste avec Internet Explorer, je n'ai aucun problème.

    Le problème surgit quelque soit l'opérateur (o2, vodafone, orange)

    Ma plus grosse interrogation se porte donc sur le signal : pourquoi Opera Mobile agit-il si différement avec le type de réseau ? Et s'il s'agissait d'un problème de réseau pourquoi Internet Explorer est-il capable d'envoyer des données en GPRS ?

    Il doit y avoir quelque part une variable que je ne capte pas

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2008
    Messages : 33
    Par défaut
    Je n'ai pas encore eu le temps de capturer les données sur la cible et la source mais je pense avoir décelé un pattern quand la connexion échoue.

    (L'upload que j'envoie est supérieur aux données ci-dessous.)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    Le client envoie un paquet de 1460 octets
    Le serveur répond par un ACK
    Le client envoie un paquet de 1460 octets
    Le serveur répond par un ACK
    Le client envoie un paquet de 1460 octets
    Le serveur répond par un ACK
    Le client envoie un paquet de 1176 octets
    Le serveur répond par un ACK
    Le client envoie un paquet de 284 octets
    Le serveur répond par un ACK
    Le client envoie un paquet de 1460 octets
    Le serveur répond par un ACK
    Le client envoie un paquet de 1460 octets
    Le serveur répond par un ACK
    Le client envoie un paquet de 1460 octets
    Le serveur répond par un ACK
    Le client envoie un paquet de 1460 octets
    Le serveur répond par un ACK
    Le client envoie un paquet de 1460 octets
    Le serveur répond par un ACK
    Le client envoie un paquet de 1460 octets
    Le serveur répond par un ACK
    Le client envoie un paquet de 1460 octets
    Le serveur répond par un ACK
    Le client envoie un paquet de 1460 octets
    Le serveur répond par un ACK
    Le client envoie un paquet de 244 octets
    Le serveur répond par un ACK
    Le client envoie un paquet FIN, ACK
    Le serveur envoie un HTTP 200 ignoré par le client (car affiche déjà un connection closed)
    Le serveur envoie un paquet FIN, ACK
    Le client répond par un RST, ACK
    Mon dernier paquet est toujours de 244 octets avant de planter

Discussions similaires

  1. [GD] Retailler l'image pendant l'upload
    Par tsunamichups dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 25/11/2010, 09h40
  2. Quels sont les fichiers à uploader depuis la pre prod?
    Par Arthis dans le forum Intégration Continue
    Réponses: 2
    Dernier message: 28/04/2009, 17h33
  3. [MIME] Problème d'upload depuis MacOS/X Firefox
    Par GLDavid dans le forum Apple
    Réponses: 2
    Dernier message: 16/01/2008, 14h59
  4. close(socket) sans emission FIN,ACK
    Par chico31 dans le forum Développement
    Réponses: 1
    Dernier message: 23/10/2007, 19h31
  5. Réponses: 4
    Dernier message: 15/11/2005, 12h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo