DXA 1.2 - Les requêtes Http probe échouent en l'absence de paramètre Accept ou Content-Type dans l'en-tête


6

Après avoir récemment effectué une mise à niveau vers DXA 1.2, vous avez remarqué que PageController a introduit handleGetPageFormatted() qui est supposé être utilisé pour répondre avec formaté (principalement autre que du texte/html) pour une ressource demandée.

Cela fonctionne très bien la plupart du temps, sauf dans le cas où il n'y a pas de paramètre d'en-tête Accept dans la requête. getHtmlAcceptScore() donne une exception null pointeur, en l'absence de Accept paramètre d'en-tête.

Dans notre, nous utilisons Varnish Cache, qui est configuré dans le cadre de notre configuration de l'équilibreur de charge. Ce cache de vernis sonde les zones d'application pour la disponibilité. Si les serveurs ne répondent pas à la sonde, ils sont marqués malades et inaccessibles. Après enquête a compris que par défaut, il n'envoie aucun en-tête. Paramètres ci-dessous pour une sonde:

backend www1 { 
    .host = "xx.xx.xx.xx"; 
    .port = "80"; 
    .probe = { 
    .url = "/"; 
    .interval = 5s; 
    .timeout = 3s; 
    .window = 5; 
    .threshold = 3; 
    } 
} 

En ayant un attribut défini consume l » @RequestMappinghandleGetPageFormatted(), pourrait résoudre le problème. Comme cela signifierait seulement mapper la demande qui accepte un type particulier de type de média.

Je vais essayer ceci et mettre à jour ce cas.

Est-ce que quelqu'un a fait face au même problème.

Modifier: Une autre façon d'adresser pourrait être en envoyant l'en-tête Accept dans le cadre de la requête de sonde elle-même, ce qui n'était pas l'exigence dans la version antérieure de DXA. Exemple ci-dessous:

.request = 
    "GET /probe.cgi HTTP/1.1" 
    "Host: 127.0.0.2" 
    "Connection: close" 
    "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" 
    "Accept-Encoding: foo/bar" ;  
+1

Problème bien analysé! Veuillez signaler ces problèmes sur GitHub: http://www.github.com/sdl/dxa-web-application-java/issues s'il est possible d'inclure un en-tête Accept dans la requête de sonde, je recommanderais cela comme solution de contournement plutôt que de modifier vous-même le code du framework DXA. 04 janv.. 162016-01-04 18:52:16

  0

a signalé cela comme un [problème] (https://github.com/sdl/dxa-web-application-java/issues/8) 05 janv.. 162016-01-05 09:30:35

4

Correction du problème de pointeur nul ci-dessus en effectuant une vérification null sur l'en-tête Accept. Les modifications doivent être effectuées dans les opérations DefaultDataFormattergetHtmlAcceptScore() et BaseFormattergetValidTypes(List<String> allowedTypes).

Maintenant, Varnish cache est capable de tester l'application avec succès. Nous n'avons pas besoin de changer @RequestMapping ou dans Varnish cache maintenant.