por favor, necesito ayuda, revisé todo Google y no obtuve realmente una respuesta para abrir mi problema. Quiero usar casco para asegurar mi servidor express. Pero cuando lo estoy usando, aparece este error: ERR_BLOCKED_BY_RESPONSE.NotSameOrigin 200 para cargar mis imágenes desde mi base de datos. este es mi servidor express:
// Initialize server const app = express() app.use(express.urlencoded({ extended: true })); app.use(express.json()); app.use(cookieParser()); app.use(cors()) app.use(helmet()) // CORS configuration app.use(function (req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); });Obtengo mis imágenes de mi base de datos, por lo que la URL en localhost es: http://localhost:3000/image/<name_image>
Cuando no estoy usando casco, todo funciona bien.
por favor cualquier ayuda
Después de una larga búsqueda en Google, obtengo la solución aquí: https://github.com/helmetjs/helmet/issues/176 Agrego esta línea:
res.setHeader('Cross-Origin-Resource-Policy', 'same-site');y simplemente actualice y borre el caché (cmd + R en MAC y ctrl + R en otros) y funcionó a la perfección. Gracias Evan Hahn
tl;dr: deshabilite el encabezado Cross-Origin-Embedder-Policy , habilitado de forma predeterminada en Helmet v5.
app.use( helmet({ crossOriginEmbedderPolicy: false, // ... }) );Mantenedor de casco aquí.
Helmet establece el encabezado de respuesta HTTP Cross-Origin-Embedder-Policy en require-corp .
Establecer este encabezado significa que cargar recursos de origen cruzado (como una imagen de otro recurso) es más complicado. Por ejemplo, cargar un origen cruzado como este...
<img alt="My picture" src="https://example.com/image.png"> ...no funcionará a menos que example.com lo permita explícitamente, estableciendo algunos encabezados de respuesta propios. Su navegador intentará cargar example.com/image.png y, si no está explícitamente permitido, dejará caer la respuesta.
Para solucionar esto, puede evitar que Helmet configure el encabezado Cross-Origin-Embedder-Policy , así:
app.use( helmet({ crossOriginEmbedderPolicy: false, // ... }) );Hice una pequeña aplicación de muestra que puedes usar para jugar con esto. En mis pruebas, no parece funcionar en HTTP, pero sí en HTTPS, lo que podría explicar por qué las cosas solo fallan en producción.
En mi caso, usé de esa manera
helmet({ crossOriginResourcePolicy: false, })El problema es con la política de recursos de origen cruzado que debe ser del mismo sitio que el navegador trata como otro origen.
Si el control de versiones es una mejor opción para usted, tuve este mismo problema en helmet >=5.0.0 . Pasar a 4.6.0 resolvió este error.