Skip to content

Commit 5d18e0a

Browse files
committed
Conflicts fixed on "Fetch: Cross-Origin Requests" page in french
language
1 parent 64468de commit 5d18e0a

File tree

1 file changed

+7
-96
lines changed

1 file changed

+7
-96
lines changed

5-network/05-fetch-crossorigin/article.md

Lines changed: 7 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,7 @@ Plus sérieusement, faisons une très brève digression historique.
2828

2929
**Pendant de nombreuses années, un script d'un site n'a pas pu accéder au contenu d'un autre site.**
3030

31-
<<<<<<< HEAD
3231
Cette règle simple mais puissante a été le fondement de la sécurité Internet. Par exemple. un script malveillant du site Web `hacker.com` ne pouvait pas accéder à la boîte aux lettres de l'utilisateur sur le site Web `gmail.com`. Les gens se sentaient en sécurité.
33-
=======
34-
That simple, yet powerful rule was a foundation of the internet security. E.g. an evil script from website `hacker.com` could not access the user's mailbox at website `gmail.com`. People felt safe.
35-
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
3632

3733
JavaScript n'avait pas non plus de méthodes spéciales pour effectuer des requêtes réseau à l'époque. C'était un langage pour s'amuser à décorer une page Web.
3834

@@ -129,25 +125,15 @@ Contrairement à cela, les requêtes avec des en-têtes non standard ou par exem
129125

130126
Lorsque nous essayons de faire une requête non sécurisée, le navigateur envoie une demande spéciale de "contrôle en amont" qui demande au serveur -- accepte-t-il ou non ces requêtes cross-origin ?
131127

132-
<<<<<<< HEAD
133128
Et, à moins que le serveur ne confirme explicitement cela avec ces en-têtes, une demande non sécurisée n'est pas envoyée.
134-
=======
135-
And, unless the server explicitly confirms that with headers, an unsafe request is not sent.
136-
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
137129
138130
Nous allons maintenant entrer dans les détails.
139131
140132
## CORS pour des requêtes sécurisées
141133
142-
<<<<<<< HEAD
143134
Si une requête est une cross-origin, le navigateur lui ajoute toujours l'en-tête `Origin`.
144135

145136
Par exemple, si nous requêtons `https://anywhere.com/request` depuis `https://javascript.info/page`, les en-têtes ressembleront à cela :
146-
=======
147-
If a request is cross-origin, the browser always adds the `Origin` header to it.
148-
149-
For instance, if we request `https://anywhere.com/request` from `https://javascript.info/page`, the headers will look like:
150-
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
151137

152138
```http
153139
GET /request
@@ -158,15 +144,9 @@ Origin: https://javascript.info
158144
...
159145
```
160146

161-
<<<<<<< HEAD
162147
Comme vous pouvez le voir, l'en-tête `Origin` contient exactement l'origine (domaine/protocole/port), sans chemin.
163148

164-
Le serveur peut inspecter le `Origin` et, s'il est convenu d'accepter une telle demande, ajoute un en-tête spécial `Access-Control-Allow-Origin` à la réponse. Cet en-tête doit contenir l'origine autorisée (dans notre cas `https://javascript.info`), ou une étoile `*`. Ensuite, la réponse est réussie, sinon une erreur.
165-
=======
166-
As you can see, the `Origin` header contains exactly the origin (domain/protocol/port), without a path.
167-
168-
The server can inspect the `Origin` and, if it agrees to accept such a request, add a special header `Access-Control-Allow-Origin` to the response. That header should contain the allowed origin (in our case `https://javascript.info`), or a star `*`. Then the response is successful, otherwise it's an error.
169-
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
149+
Le serveur peut inspecter le `Origin` et, s'il est convenu d'accepter une telle demande, ajoute un en-tête spécial `Access-Control-Allow-Origin` à la réponse. Cet en-tête doit contenir l'origine autorisée (dans notre cas `https://javascript.info`), ou une étoile `*`. Ensuite, la réponse est réussie, sinon c'est une erreur.
170150

171151
Le navigateur joue ici le rôle d'un médiateur de confiance :
172152
1. Il garantit que l'`Origin` correcte est envoyée avec une requête cross-origin.
@@ -202,11 +182,7 @@ Il n'y a pas d'en-tête `Content-Length` dans la liste !
202182
Cet en-tête contient la longueur de réponse complète. Donc, si nous téléchargeons quelque chose et que nous souhaitons suivre le pourcentage de progression, une autorisation supplémentaire est requise pour accéder à cet en-tête (voir ci-dessous).
203183
```
204184

205-
<<<<<<< HEAD
206185
Pour accorder un accès JavaScript à tout autre en-tête de réponse, le serveur doit envoyer l'en-tête `Access-Control-Expose-Headers`. Il contient une liste séparée par des virgules de noms d'en-tête non sécurisés qui doivent être rendus accessibles.
207-
=======
208-
To grant JavaScript access to any other response header, the server must send the `Access-Control-Expose-Headers` header. It contains a comma-separated list of unsafe header names that should be made accessible.
209-
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
210186

211187
Par exemple :
212188

@@ -222,28 +198,17 @@ Access-Control-Expose-Headers: Content-Length,API-Key
222198
```
223199
Avec cet en-tête `Access-Control-Expose-Headers`, le script est autorisé à lire les en-têtes `Content-Length` et `API-Key` de la réponse.
224200

225-
<<<<<<< HEAD
226201
## Requêtes "Non-sécurisées"
227-
=======
228-
With such an `Access-Control-Expose-Headers` header, the script is allowed to read the `Content-Length` and `API-Key` headers of the response.
229-
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
230202

231203
Nous pouvons utiliser n'importe quelle méthode HTTP : pas seulement `GET/POST`, mais aussi `PATCH`, `DELETE` et d'autres.
232204

233205
Il y a quelque temps, personne ne pouvait même imaginer qu'une page Web puisse faire de telles demandes. Il peut donc toujours exister des services web qui traitent une méthode non standard comme un signal : "Ce n'est pas un navigateur". Ils peuvent en tenir compte lors de la vérification des droits d'accès.
234206
235207
Ainsi, pour éviter les malentendus, toute demande "non sûre" - qui ne pouvait pas être faite par le passé, le navigateur ne fait pas de telles demandes tout de suite. Avant d'envoyer une demande préliminaire, dite de "contrôle en amont", demandant l'autorisation.
236208
237-
<<<<<<< HEAD
238-
Une requête de contrôle en amont utilise la méthode `OPTIONS`, aucun corps et deux en-têtes :
209+
Ainsi, pour éviter les malentendus, toute demande "non sécurisée" - qui ne pouvait pas être faite par le passé, le navigateur ne fait pas de telles demandes tout de suite. Premièrement, il envoie une demande préliminaire, dite de "contrôle en amont", pour demander l'autorisation.
239210
240-
- l'en-tête `Access-Control-Request-Method` a la méthode de la requête non sécurisée.
241-
- l'en-tête `Access-Control-Request-Headers` fournit une liste séparée par des virgules de ses en-têtes HTTP non sécurisés.
242-
=======
243-
So, to avoid misunderstandings, any "unsafe" request -- that couldn't be done in the old times, the browser does not make such requests right away. First, it sends a preliminary, so-called "preflight" request, to ask for permission.
244-
245-
A preflight request uses the method `OPTIONS`, no body and two headers:
246-
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
211+
Une demande de contrôle en amont utilise la méthode `OPTIONS`, pas de corps et deux en-têtes :
247212
248213
Si le serveur accepte de répondre aux requêtes, il doit répondre avec un corps vide, le statut 200 et des en-têtes :
249214
@@ -254,11 +219,7 @@ Si le serveur accepte de répondre aux requêtes, il doit répondre avec un corp
254219
255220
![](xhr-preflight.svg)
256221
257-
<<<<<<< HEAD
258222
Voyons comment cela fonctionne étape par étape, par exemple, pour une requête cross-origin `PATCH` (cette méthode est souvent utilisée pour mettre à jour les données) :
259-
=======
260-
Let's see how it works step-by-step on the example of a cross-origin `PATCH` request (this method is often used to update data):
261-
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
262223
263224
```js
264225
let response = await fetch('https://site.com/service.json', {
@@ -277,11 +238,7 @@ Il y a trois raisons pour lesquelles la demande n'est pas sécurisée (une suffi
277238
278239
### Étape 1 (requête de contrôle en amont)
279240
280-
<<<<<<< HEAD
281241
Avant d'envoyer une telle requête, le navigateur envoie lui-même une requête de contrôle en amont qui ressemble à ceci :
282-
=======
283-
Prior to sending such a request, the browser, on its own, sends a preflight request that looks like this:
284-
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
285242
286243
```http
287244
OPTIONS /service.json
@@ -300,22 +257,14 @@ Access-Control-Request-Headers: Content-Type,API-Key
300257
301258
### Étape 2 (réponse en amont)
302259
303-
<<<<<<< HEAD
304260
Le serveur doit répondre avec le statut 200 et les en-têtes :
305-
=======
306-
The server should respond with status 200 and the headers:
307-
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
308261
- `Access-Control-Allow-Origin: https://javascript.info`
309262
- `Access-Control-Allow-Methods: PATCH`
310263
- `Access-Control-Allow-Headers: Content-Type,API-Key`.
311264
312265
Cela permet une communication future, sinon une erreur est déclenchée.
313266
314-
<<<<<<< HEAD
315-
Si le serveur attend d'autres méthodes et en-têtes à l'avenir, il est logique de les autoriser à l'avance en ajoutant à la liste.
316-
=======
317-
If the server expects other methods and headers in the future, it makes sense to allow them in advance by adding them to the list.
318-
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
267+
Si le serveur attend d'autres méthodes et en-têtes à l'avenir, il est logique de les autoriser à l'avance en les ajoutant à la liste.
319268
320269
Par exemple, cette réponse autorise également `PUT`, `DELETE` et des en-têtes supplémentaires :
321270
@@ -329,23 +278,13 @@ Access-Control-Max-Age: 86400
329278
330279
Maintenant, le navigateur peut voir que `PATCH` est dans `Access-Control-Allow-Methods` et `Content-Type,API-Key` sont dans la liste `Access-Control-Allow-Headers`, il envoie donc la requête principale.
331280
332-
<<<<<<< HEAD
333-
S'il y a un en-tête `Access-Control-Max-Age` avec un certain nombre de secondes, alors les autorisations de contrôle en amont sont mises en cache pour le temps donné. La réponse ci-dessus sera mise en cache pendant 86 400 secondes (un jour). Dans ce délai, les demandes ultérieures n'entraîneront pas de contrôle en amont. En supposant qu'ils correspondent aux quotas mis en cache, ils seront envoyés directement.
334-
=======
335-
If there's the header `Access-Control-Max-Age` with a number of seconds, then the preflight permissions are cached for the given time. The response above will be cached for 86400 seconds (one day). Within this timeframe, subsequent requests will not cause a preflight. Assuming that they fit the cached allowances, they will be sent directly.
336-
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
281+
S'il y a un en-tête `Access-Control-Max-Age` avec un certain nombre de secondes, alors les autorisations de contrôle en amont sont mises en cache pour le temps donné. La réponse ci-dessus sera mise en cache pendant 86400 secondes (un jour). Dans ce délai, les demandes ultérieures n'entraîneront pas de contrôle en amont. En supposant qu'ils correspondent aux quotas mis en cache, ils seront envoyés directement.
337282
338283
### Étape 3 (requête réelle)
339284
340-
<<<<<<< HEAD
341-
Lorsque le contrôle en amont réussit, le navigateur fait maintenant la requête principale. Ici, l'algorithme est le même que pour les requêtes sécurisées.
285+
Lorsque le contrôle en amont réussit, le navigateur fait maintenant la requête principale. Ici, le processus est le même que pour les requêtes sécurisées.
342286
343287
La requête principale a un en-tête `Origin` (car il s'agit d'une cross-origin) :
344-
=======
345-
When the preflight is successful, the browser now makes the main request. The process here is the same as for safe requests.
346-
347-
The main request has the `Origin` header (because it's cross-origin):
348-
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
349288
350289
```http
351290
PATCH /service.json
@@ -375,11 +314,7 @@ JavaScript n'obtient la réponse à la requête principale ou une erreur que s'i
375314
376315
Une requête cross-origin initiée par du code JavaScript par défaut n'apporte pas d'informations d'identification (cookies ou authentification HTTP).
377316
378-
<<<<<<< HEAD
379-
C'est rare pour les requêtes HTTP. Habituellement, une requête de `http://site.com` est accompagnée de tous les cookies de ce domaine. Mais les requêtes cross-origin faites par des méthodes JavaScript sont une exception.
380-
=======
381-
That's uncommon for HTTP-requests. Usually, a request to `http://site.com` is accompanied by all cookies from that domain. Cross-origin requests made by JavaScript methods on the other hand are an exception.
382-
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
317+
C'est rare pour les requêtes HTTP. Habituellement, une requête pour `http://site.com` est accompagnée de tous les cookies de ce domaine. Mais les requêtes cross-origin faites par des méthodes JavaScript sont une exception.
383318
384319
Par exemple, `fetch('http://another.com')` n'envoie aucun cookie, même ceux(!) qui appartiennent au domaine `another.com`.
385320
@@ -425,35 +360,21 @@ Les requêtes simples doivent satisfaire aux conditions suivantes :
425360
426361
La différence essentielle est que les requêtes sécurisées étaient réalisables depuis très longtemps en utilisant des balises `<form>` ou `<script>`, alors que les requêtes non sécurisées étaient impossibles pour les navigateurs pendant longtemps.
427362
428-
<<<<<<< HEAD
429363
Ainsi, la différence pratique est que les demandes sécurisées sont envoyées immédiatement, avec l'en-tête `Origin`, tandis que pour les autres, le navigateur fait une requête préliminaire de "contrôle en amont", demandant la permission.
430-
=======
431-
So, the practical difference is that safe requests are sent right away, with the `Origin` header, while for the other ones the browser makes a preliminary "preflight" request, asking for permission.
432-
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
433364
434365
**Pour les requêtes sécurisées :**
435366
436-
<<<<<<< HEAD
437367
- → Le navigateur envoie l'en-tête `Origin` avec l'origine.
438368
- ← Pour les requêtes sans informations d'identification (non envoyées par défaut), le serveur doit définir :
439369
- `Access-Control-Allow-Origin` avec `*` ou la même valeur que `Origin`
440370
- ← Pour les requêtes avec informations d'identification, le serveur doit définir :
441371
- `Access-Control-Allow-Origin` avec la même valeur que `Origin`
442372
- `Access-Control-Allow-Credentials` à `true`
443-
=======
444-
- → The browser sends the `Origin` header with the origin.
445-
- ← For requests without credentials (not sent by default), the server should set:
446-
- `Access-Control-Allow-Origin` to `*` or same value as `Origin`
447-
- ← For requests with credentials, the server should set:
448-
- `Access-Control-Allow-Origin` to same value as `Origin`
449-
- `Access-Control-Allow-Credentials` to `true`
450-
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f
451373
452374
En outre, pour accorder un accès JavaScript à tous les en-têtes de réponse, sauf `Cache-Control`, `Content-Language`, `Content-Type`, `Expires`, `Last-Modified` ou `Pragma`, le serveur doit répertorier ceux autorisés dans l'en-tête `Access-Control-Expose-Headers`.
453375
454376
**Pour les requêtes non sécurisées, une demande préalable de "contrôle en amont" est émise avant celle demandée :**
455377
456-
<<<<<<< HEAD
457378
- → Le navigateur envoie la requête `OPTIONS` à la même URL, avec en-têtes :
458379
- `Access-Control-Request-Method` a demandé la méthode.
459380
- `Access-Control-Request-Headers` répertorie les en-têtes non sécurisés demandés.
@@ -462,13 +383,3 @@ En outre, pour accorder un accès JavaScript à tous les en-têtes de réponse,
462383
- `Access-Control-Allow-Headers` avec une liste des en-têtes autorisés,
463384
- `Access-Control-Max-Age` avec un certain nombre de secondes pour mettre en cache les autorisations.
464385
- Ensuite, la requête réelle est envoyée, le schéma "sécurisé" précédent est appliqué.
465-
=======
466-
- → The browser sends an `OPTIONS` request to the same URL, with the headers:
467-
- `Access-Control-Request-Method` has requested method.
468-
- `Access-Control-Request-Headers` lists unsafe requested headers.
469-
- ← The server should respond with status 200 and the headers:
470-
- `Access-Control-Allow-Methods` with a list of allowed methods,
471-
- `Access-Control-Allow-Headers` with a list of allowed headers,
472-
- `Access-Control-Max-Age` with a number of seconds to cache the permissions.
473-
- Then the actual request is sent, and the previous "safe" scheme is applied.
474-
>>>>>>> 468e3552884851fcef331fbdfd58096652964b5f

0 commit comments

Comments
 (0)