No puedo entender cómo esta solicitud AJAX sabe qué cookie usar. Utiliza el correcto, pero ¿cómo sabe cuál es el correcto o dónde se especifica (implícitamente)?
$.ajax({ url: 'https://remote-host.de/api/v2/session', crossDomain: true, xhrFields: { withCredentials: true }, statusCode: { 401: function() { // do stuff }, 200: function() { // do stuff } } });La solicitud se ve así cuando la inspecciono con Chrome y tiene el conjunto de cookies correcto (el del host remoto al que intento solicitar el estado de inicio de sesión):
Accept:*\/* Accept-Encoding:gzip, deflate, sdch, br Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4 Connection:keep-alive Cookie:_foo-bar_session=WjRMdExSQ1F6UlczbER0Ui9sQU9NNllIRWo1NmpCSXo2REh6akZmM1czODZ0M29adGh4aWg3ZmdrYWdxSU5KRVptUi8ybDladmJMHJhZWKZ3A5NlJCOTdWeFpCRGJQdHVvMnlxb0VQeWlCMGRtNDkxNDF3QVdhcnVRenlsQXExa3RNEtwZ1RNMW9oaE5TV1hLbHdnPT0tLXhtYUo3YytHY2wxWTFxanlXVTJjdlE9PQ%3D%3D--b22797a9b004d0759a43f4d94686edf909610a06 Host:remote-host.de Origin:http://localhost:3001 Referer:http://localhost:3001/de User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36La respuesta:
Access-Control-Allow-Credentials:true Access-Control-Allow-Methods:GET, POST, PATCH, PUT, DELETE, OPTIONS, HEAD Access-Control-Allow-Origin:http://localhost:3001 Access-Control-Expose-Headers:ETag Access-Control-Max-Age:86400 Cache-Control:no-cache Connection:keep-alive Content-Type:application/json; charset=utf-8 Date:Wed, 22 Mar 2017 10:18:15 GMT Server:nginx Set-Cookie:_foo-bar_session=SGhyWGtWTFVoc1AzUWlldmIxTjFGVXVCQU9YVkduSDFISWtLamwwT01heW5HN25saVNyYWJ1b2ZDZDI4RzNGT1BzYWZOOHNVK21DN0kxNmJRS1VDSTdwb1VVS2NtcTZ3Y1dRYUJSaTYxckpOdDZFZ2RpRlQzTHZPdDdTTjljenZzQ1hTUjlCN0RoZUlkcWlpNm5KK2VRPT0tLTkwUlNuM0Z6TDZ2TWJjZVVSUExpb0E9PQ%3D%3D--568e4688b6ff5e17faa32a3bab1a7cf01807a581; path=/; HttpOnly Transfer-Encoding:chunked X-Content-Type-Options:nosniff X-Frame-Options:SAMEORIGIN X-Request-Id:b43ce1c4-2c80-4sd5-8333-0g93ae4df940f X-Runtime:0.013627 X-XSS-Protection:1; mode=blockPero ¿cómo lo sabe?
A menos que esté malinterpretando la pregunta, el navegador simplemente devuelve las cookies que tiene que coinciden con el dominio al que se realiza la solicitud y que coinciden con cualquier path en la cookie.
¿Cómo funcionan las cookies? tiene más detalles, con enlaces a artículos que explican cómo los navegadores manejan las cookies.