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

Langage PHP Discussion :

Serialisation, codage et transmission du résultat via une URL


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 253
    Points : 84
    Points
    84
    Par défaut Serialisation, codage et transmission du résultat via une URL
    Bonjour,

    Je ne savais pas tellement où poser cette question. Travaillant en PHP sur ce projet, ce forum est surement le plus adapté.

    Je suis contraint de transmettre une structure JSON via une requête HTTP GET, donc exclusivement dans l'URL de la requête.
    La représentation texte de cette structure comporte moult caractères qui perturberaient la bonne compréhension de l'URL, je suis donc obligé de l'encoder dans un format à l'alphabet alphanumérique. J'ai pensé à la base64.

    Les URL possédant une longueur fixe, je souhaiterais par la même occasion pouvoir minimiser la longueur de la chaine de texte à transmettre.
    Or le codage base64 ne permet pas tellement de réduire la longueur de la chaine, il l'augmente même.

    Existerait-il d'autres solutions pour satisfaire à la fois la contrainte de l'alphabet et de la longueur ?


    Par ailleurs, cette structure vient en paramètre et non en donnée vis à vis du serveur, il est donc exclus de faire une requête POST/PUT pour la fournir dans le corps de la requête.


    En vous remerciant par avance pour toute idée.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    L'encapsulation de ta chaine donnera forcement une chaine plus longue.
    Par ailleurs il existe déjà des normes pour transmettre des caractères spéciaux dans des URL (cf. la fonction rawurlencore()).

    Sur le fond de ton problème, le problème de taille des URL pour les serveurs et les navigateurs ne bougera pas ; c'est donc ta solution, quelque soit la raison de ta contrainte, qu'il va falloir changer.

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 253
    Points : 84
    Points
    84
    Par défaut
    Merci pour cette réponse.

    Citation Envoyé par sabotage Voir le message
    L'encapsulation de ta chaine donnera forcement une chaine plus longue.
    Par ailleurs il existe déjà des normes pour transmettre des caractères spéciaux dans des URL (cf. la fonction rawurlencore()).
    Oui, j'y ai pensé également.
    Mais j'ai en 1er lieu eu des soucis avec mon URLRewriting et j'ai abandonné cette idée.
    Depuis j'ai une solution pour cela alors je peux y revenir "par défaut".

    Sur le fond de ton problème, le problème de taille des URL pour les serveurs et les navigateurs ne bougera pas ; c'est donc ta solution, quelque soit la raison de ta contrainte, qu'il va falloir changer.
    Je suis face à un dilemme : je travaille avec un service REST.
    On a donc pas droit aux session (pour envoyer les données en plusieurs fois) ou d'utiliser le corps d'une requête puisque je suis obligé d'utiliser GET d'après mon propre formalisme.

    Il faut donc transmettre dans l'URL ou dans un header.
    Le header je n'y ai même pas pensé, je ne sais pas néanmoins si la taille des valeurs est limitée.

    Par ailleurs, réduire la taille de la chaine reviendrait à en produire un hash... qu'il est difficile de décoder côté serveur ensuite puisque ca n'est pas un processus bijectif.

    Bref, si je résumé c'est soit rawurlencode ou dans une en-tête de la requête.
    Je ne peux pas me passer de ce paramètre et je ne connais pas plus léger que le JSON.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par fanfouer Voir le message
    Bref, si je résume c'est rawurlencode
    oui

Discussions similaires

  1. Transmission de données via une liaison port USB
    Par samuela dans le forum MATLAB
    Réponses: 0
    Dernier message: 10/08/2014, 21h51
  2. Réponses: 3
    Dernier message: 17/02/2012, 18h40
  3. Passer deux variables via une URL
    Par 123quatre dans le forum Langage
    Réponses: 8
    Dernier message: 28/06/2007, 19h02
  4. Accéder au contenu d'un fichier via une URL en mode binaire
    Par sbelli dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 11/10/2005, 10h25
  5. [net] recuperer les proprietes d'un File via une URL
    Par mma dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 06/05/2004, 12h45

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