Site icon Blog ARC Optimizer

Correction des réponses 404 pour les images versionnées dans Experience Edge / Blogs / Perficient

Correction des réponses 404 pour les images versionnées dans Experience Edge / Blogs / Perficient


Introduction 📖

Mon Ă©quipe et moi avons rĂ©cemment rencontrĂ© un problĂšme alors que nous travaillions sur un projet Sitecore XM Cloud qui s’est avĂ©rĂ© assez intĂ©ressant. Le problĂšme Ă©tait liĂ© au fait que les images publiĂ©es sur Experience Edge ne se chargeaient pas comme prĂ©vu dans certains rendus. Les requĂȘtes GET pour ces images dans Experience Edge renverraient un 404 code d’état plutĂŽt que le code attendu 200. Ce problĂšme ne semblait se produire que pour les images rĂ©cemment mises Ă  jour et les nouvelles images rĂ©cemment publiĂ©es sur Experience Edge. De plus (et cela prĂȘte Ă  confusion), des images plus anciennes et existantes (qui n’étaient pas rĂ©cemment publiĂ©) toujours chargĂ© comme prĂ©vu.

Pour le contexte, notre solution XM Cloud propose une application principale Next.js hébergée sur Vercel en utilisant la version Next.js 12.2.5 et @sitecore-jss/sitecore-jss-nextjs version 21.0.0. Notre solution utilise exclusivement la langue anglaise (en).

EnquĂȘte 🔎

AprĂšs avoir exclu les Ă©lĂ©ments typiques comme s’assurer que tout a Ă©tĂ© publiĂ© (et republiĂ©), vĂ©rifier les associations aux Ă©lĂ©ments de source de donnĂ©es, vĂ©rifier la rĂ©ponse GraphQL du service de mise en page et mĂȘme vider le cache Experience Edge, nous avons choisi d’ouvrir un ticket avec Sitecore. Je voulais voir si d’autres membres de la communautĂ© Sitecore avaient vĂ©cu quelque chose de similaire, j’ai donc posĂ© une question dans la communautĂ© Sitecore Slack et j’ai finalement créé un message correspondant. question sur Échange de pile Sitecore.

Pendant que le ticket Sitecore mijotait, notre Ă©quipe a continuĂ© Ă  dĂ©panner les URL des images. L’URL provenant du service de mise en page ressemblait Ă  ceci (Ă  titre d’exemple) :

https://edge.sitecorecloud.io/<tenant>/media/foo.jpg?h=495&iar=0&w=692&sc_lang=en ✅(200)

D’accord, cool ; cette URL a Ă©tĂ© rĂ©solue lors de la navigation directe. En regardant le balisage rendu sur les pages problĂ©matiques, il a Ă©tĂ© notĂ© que seuls les composants utilisant des images rĂ©actives (rĂ©fĂ©rence) a exposĂ© le problĂšme. Le Image composant (du @sitecore-jss/sitecore-jss-nextjs forfait) comprend une propriĂ©tĂ©, srcSet, pour prendre en charge les images rĂ©actives. Le rendu <img> la balise ressemblait Ă  ceci :

<img ... width="692" height="495" class="img-responsive" loading="lazy" srcset="https://edge.sitecorecloud.io/<tenant>/media/foo.jpg?mw=991 991w" src="https://edge.sitecorecloud.io/<tenant>/media/foo.jpg?h=495&amp;iar=0&amp;w=692&amp;sc_lang=en">

Le src L’URL de l’attribut a Ă©tĂ© rĂ©solue comme prĂ©vu. Cependant, le srcset Attribut d’URL associĂ© au 991 largeur n’a pas rĂ©soudre comme prĂ©vu :

https://edge.sitecorecloud.io/<tenant>/media/foo.jpg?mw=991 ❌(404)

Fait intĂ©ressant, aprĂšs avoir ajoutĂ© manuellement le sc_lang paramĂštre Ă  l’URL, il a fait rĂ©soudre comme prĂ©vu :

https://edge.sitecorecloud.io/<tenant>/media/foo.jpg?mw=991&sc_lang=en ✅(200)

Pourquoi serait sc_lang ĂȘtre obligĂ© de rĂ©cupĂ©rer des images alors que cela ne l’était pas auparavant ? Eh bien, le support Sitecore avait une rĂ©ponse : une correction de bug affectant versionnĂ© des Ă©lĂ©ments multimĂ©dias ont rĂ©cemment Ă©tĂ© dĂ©ployĂ©s sur Experience Edge. En regardant le journal des modifications de XM Cloud (ici), JE pense ce Ă©tait la mise Ă  jour spĂ©cifique ; cependant, je n’en suis pas sĂ»r car il y a plusieurs entrĂ©es apparemment adjacentes dans le journal des modifications.

Si languageEmbedding est réglé sur jamais dans le urlbuilder.config déposer, mediaItem les entités renvoient désormais le sc_lang paramÚtre.

Le changement tel qu’expliquĂ© par le support Sitecore :

[In Experience Edge] Lorsqu’un Ă©lĂ©ment multimĂ©dia est publiĂ©, un MediaItem l’entitĂ© est gĂ©nĂ©rĂ©e par la mĂ©thode suivante sur CM : Sitecore.ExperienceEdge.Connector.EntityGenerator.MediaDeliveryEntityGenerator.GenerateMediaEntity(...)

Ce MediaItem l’entitĂ© comporte plusieurs champs contenant des URL et des chemins d’accĂšs aux mĂ©dias.

Pour les éléments multimédias versionnés, chacun de ces champs doit contenir le sc_lang paramÚtre.

Sortie nette : Depuis environ 2 mois, si vous le souhaitez versionnĂ© images publiĂ©es sur Experience Edge pour se charger correctement, vous avoir pour inclure le sc_lang paramĂštre. Experience Edge n’est pas par dĂ©faut en et n’inclut pas de solution de secours dans le cas contraire, si sc_lang n’est pas prĂ©sent, vous obtiendrez un 404.

Ce changement, associé au fait que le Image composant dans le @sitecore-jss/sitecore-jss-nextjs emballer se déshabille le sc_lang paramÚtre lors de la résolution des différents srcset Les URL signifiaient que nos images versionnées utilisées comme images réactives ne se chargeaient pas correctement sur le front-end.

C’était en quelque sorte une tempĂȘte parfaite compte tenu des Ă©lĂ©ments suivants :

  • Le correctif Experience Edge pour les Ă©lĂ©ments multimĂ©dias versionnĂ©s a probablement Ă©tĂ© publiĂ© fin fĂ©vrier.
  • Notre Ă©quipe de dĂ©veloppement et les auteurs de contenu n’avaient pas mis Ă  jour, ajoutĂ© ou publiĂ© des Ă©lĂ©ments multimĂ©dias depuis un certain temps, le problĂšme n’a donc pas Ă©tĂ© immĂ©diatement remarquĂ©. En d’autres termes, peu d’images versionnĂ©es ont Ă©tĂ© publiĂ©es sur Experience Edge.
  • Le Image Composants srcSet la propriĂ©tĂ© Ă©tait utilisĂ©e, ce qui transformait en consĂ©quence l’URL provenant du service de mise en page, mais, ce faisant, supprimait le (maintenant requis) sc_lang paramĂštre. 😑

La solution ⛑

Forts de la connaissance qu’à l’avenir, les images versionnĂ©es publiĂ©es sur Experience Edge exiger le sc_lang paramĂštre, j’ai commencĂ© Ă  implĂ©menter un correctif pour nos rendus en utilisant le srcSet propriĂ©tĂ© du Image composant. J’ai fini par crĂ©er une petite fonction d’assistance pour faire abstraction de l’analyse de la chaĂźne de requĂȘte et de l’inclusion conditionnelle du sc_lang paramĂštre dans le tableau passĂ© dans le srcSet propriĂ©tĂ© (comme recommandĂ© par le support Sitecore). La fonction d’assistance ressemblait Ă  ceci :

export const buildSrcSetParams = (imageSizeParameters: ImageSizeParameters[] | undefined, image: ImageField): ImageSizeParameters[] | undefined => {
  let retVal = imageSizeParameters;
  if (!image?.value?.src) {
    return retVal;
  }
  const queryParams = new URLSearchParams(image.value.src.split('?')[1]);
  const scLangParam = queryParams.get('sc_lang');
  if (retVal && scLangParam) {
    // add sc_lang parameter
    retVal = retVal.map((isp) => ({
      ...isp,
      sc_lang: scLangParam,
    }));
  }
  return retVal;
};

Auparavant, le Image les composants ressemblaient à ceci :

<Image field={props?.fields?.Image} srcSet={ [ { mw: 991 } ] } ... />

En utilisant la nouvelle fonction d’assistance, ils ressemblaient à ceci :

<Image field={props?.fields?.Image} srcSet={buildSrcSetParams([ { mw: 991 } ], props?.fields?.Image) } ... />

Maintenant, au lieu du srcset URL résolue en :

https://edge.sitecorecloud.io/<tenant>/media/foo.jpg?mw=991 ❌(404)

Il a résolu de :

https://edge.sitecorecloud.io/<tenant>/media/foo.jpg?mw=991&sc_lang=en ✅(200)

PensĂ©es finales 💭

De toute Ă©vidence, devoir apporter, tester et dĂ©ployer une modification de code en production en rĂ©ponse Ă  un correctif de bogue Experience Edge n’était pas gĂ©nial. On peut soutenir que Experience Edge reviendrait Ă  une langue par dĂ©faut configurable (par exemple en) ou vers une image non versionnĂ©e, si disponible.

Depuis le 17/04/2024, le support Sitecore a confirmĂ© que ce scĂ©nario Ă©tait reproductible en utilisant la version 21.6.0 de la @sitecore-jss/sitecore-jss-nextjs package et que l’équipe produit examinerait plus en dĂ©tail.

Le 23/04/2024, le support Sitecore a reconnu ce problÚme comme un bug et a émis un numéro de référence : JSS-1902.

Les produits SaaS de Sitecore tels que XM Cloud et Experience Edge Ă©voluent et s’amĂ©liorent constamment, ce qui est formidable ; en fait, c’est un argument de vente majeur lorsqu’il s’agit d’adopter XM Cloud. IdĂ©alement, notre Ă©quipe aurait eu connaissance ou aurait Ă©tĂ© informĂ©e de ce changement radical Ă  l’avance. Comment aurions-nous fait cela ? Je ne suis pas sĂ»r, sauf peut-ĂȘtre en suivant d’un peu plus prĂšs le journal des modifications de XM Cloud 😅.






Source link
Quitter la version mobile