Entiendo que determina los encabezados a los que el cliente puede acceder desde la respuesta del servidor, sin embargo, estoy confundido sobre exactamente cuándo se aplica esto. ¿Determina los encabezados para cada solicitud de origen cruzado permitida por el encabezado Access-Control-Allow-Origin ?
Para probar esto, configuro un sitio de prueba en Express y le pongo el siguiente código:
app.get('/',(req,res)=>{ res.set('Access-Control-Allow-Origin','https://www.google.com') // to be able to make a cross-origin request res.set('foo', 'bar') //custom header that should get filtered because i havent set the access-control-expose-headers header res.send('Hello world') }) Según mi comprensión de esto, debido a que no configuré ningún encabezado especial Access-Control-Expose-Headers en la respuesta, el cliente solo debería poder acceder a CORS-safelisted response headers y, por lo tanto, no debería poder ver mi foo encabezamiento.
Pero cuando estoy en https://www.google.com (que permití CORS con el encabezado Access-Control-Allow-Origin ) y envío una solicitud GET a mi sitio de prueba, veo el encabezado foo en la respuesta solo multa. ¿Por qué es esto? ¿Alguien podría explicar cómo funciona esto o al menos indicarme la dirección correcta? Gracias por adelantado.
Me lo imaginé. La razón por la que recibí mi encabezado personalizado fue porque estaba leyendo los encabezados de respuesta en la pestaña Red de Chrome Dev Tools. Cuando ejecuto este script:
fetch('http://127.0.0.1:3000/') .then(r => {console.log(response.headers.get('foo'))}) Imprime null . Por lo tanto, el encabezado no es realmente accesible para la solicitud de recuperación, solo para las herramientas de desarrollo.