Mise à jour pour passer du Poc à la version de prod
This commit is contained in:
@@ -149,18 +149,19 @@ static QString chaine_longitude(double lon)
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Ajoute l'en-tête CORS à une réponse - indispensable puisque le client WASM
|
||||
// (servi par nginx sur un port distinct) et cette API (port 8080) constituent
|
||||
// deux origines différentes du point de vue du navigateur. Sans cet en-tête,
|
||||
// les requêtes aboutissent bien côté serveur (visibles dans les logs) mais
|
||||
// leur réponse est bloquée silencieusement côté client.
|
||||
// TODO : restreindre à l'origine réelle du client en production plutôt que
|
||||
// '*', une fois l'authentification (cf "Architecture cible") en place.
|
||||
// En-têtes communs à toutes les réponses de l'API.
|
||||
// NB (synthèse §49) : le nom "withCors" est historique. L'en-tête CORS
|
||||
// "Access-Control-Allow-Origin: *" a été RETIRÉ : le client WASM appelle
|
||||
// désormais l'API sous /api, sur la MÊME origine que la page (relais nginx du
|
||||
// CM5, et Traefik avec vérification de la session Live à distance) - il n'y a
|
||||
// plus de requête entre origines. Le conserver aurait permis à n'importe quel
|
||||
// site ouvert dans le navigateur d'un utilisateur de lire les réponses de
|
||||
// l'API. Les appels du VPS (archives) ne passent pas par un navigateur et ne
|
||||
// sont pas concernés par CORS.
|
||||
// ----------------------------------------------------------------------------
|
||||
static QHttpServerResponse withCors(QHttpServerResponse &&resp)
|
||||
{
|
||||
QHttpHeaders headers = resp.headers();
|
||||
headers.append(QHttpHeaders::WellKnownHeader::AccessControlAllowOrigin, "*");
|
||||
// Empêche le navigateur de mettre en cache les réponses - sans ça, des
|
||||
// requêtes identiques répétées (rafraîchissement périodique) pourraient
|
||||
// recevoir une réponse mise en cache plutôt que la valeur réellement à
|
||||
@@ -714,20 +715,8 @@ int main(int argc, char *argv[])
|
||||
return withCors(QHttpServerResponse(QJsonDocument(reponse).toJson()));
|
||||
});
|
||||
|
||||
// Réponse au "preflight" CORS (requête OPTIONS automatique du navigateur
|
||||
// avant tout PATCH avec Content-Type: application/json) - sans elle, le
|
||||
// navigateur abandonne silencieusement la vraie requête PATCH avant même
|
||||
// de l'envoyer.
|
||||
server.route("/elements/circuit/<arg>", QHttpServerRequest::Method::Options,
|
||||
[](int) {
|
||||
QHttpServerResponse resp(QHttpServerResponder::StatusCode::NoContent);
|
||||
QHttpHeaders headers = resp.headers();
|
||||
headers.append(QHttpHeaders::WellKnownHeader::AccessControlAllowOrigin, "*");
|
||||
headers.append(QHttpHeaders::WellKnownHeader::AccessControlAllowMethods, "GET, PATCH, OPTIONS");
|
||||
headers.append(QHttpHeaders::WellKnownHeader::AccessControlAllowHeaders, "Content-Type");
|
||||
resp.setHeaders(std::move(headers));
|
||||
return resp;
|
||||
});
|
||||
// NB : la route OPTIONS ("preflight" CORS, avant un PATCH venant d'une autre origine) a été retirée - plus de
|
||||
// requête entre origines depuis que l'API est servie sous /api, sur l'origine de la page (synthèse §49).
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
// GET /mesures?type=<capteurs|reservoirs>&id=<id>&periode=<0-3>
|
||||
|
||||
Reference in New Issue
Block a user