javascript - supported - Deshabilitar el control de tipo MIME estricto de Chrome
refuse to apply style mime type angular (4)
¿Hay alguna forma de deshabilitar strict MIME type checking
en Chrome?
De hecho, estoy haciendo una solicitud JSONP en dominios cruzados. Está funcionando bien en Firefox pero, mientras usa Chrome, da un error en la consola.
Se negó a ejecutar el script desde '' https://example.com '' porque su tipo MIME (''text / plain'') no es ejecutable, y la verificación estricta del tipo MIME está habilitada.
Funciona perfectamente en Mozilla. El problema surge solo en Chrome
Aquí están los encabezados de respuesta de la solicitud ..
Cache-Control:no-cache, no-store
Connection:Keep-Alive
Content-Length:29303
Content-Type:text/plain;charset=ISO-8859-1
Date: xxxx
Expires:-1
Keep-Alive:timeout=5
max-age:Thu, 01 Jan 1970 00:00:00 GMT
pragma:no-cache
Set-Cookie:xxxx
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options:nosniff
X-Frame-Options:SAMEORIGIN
Solución temporal de lo que pienso : configuración externa del tipo de contenido a la application/javascript
Otra solución cuando un archivo pretende otra extensión
Yo uso php
dentro del archivo var.js
con este .htaccess
.
<Files var.js>
AddType application/x-httpd-php .js
</Files>
Luego escribo el código php en el archivo .js
<?php
// This is a `.js` file but works with php
echo "var js_variable = ''$php_variable'';";
Cuando recibí la advertencia de tipo MIME en Chrome, lo solucioné agregando una línea de encabezado de Content-Type
en el archivo .js(but php)
.
<?php
header(''Content-Type: application/javascript''); // <- Add this line
// This is a `.js` file but works with php
...
Un navegador no ejecutará el archivo .js
porque apache envía el encabezado Content-Type
del archivo como application/x-httpd-php
que está definido en .htaccess
. Esa es una razón de seguridad. Pero apache no ejecutará php en la medida en que htaccess
la suplantación, es necesario. Por lo tanto, debemos sobrescribir el encabezado Content-Type
Apache con el encabezado de la función php header()
. Supongo que apache deja de enviar su propio encabezado cuando lo envía php en lugar de apache.
El servidor debe responder con el tipo MIME correcto para la application/javascript
JSONP application/javascript
y tu solicitud debería indicarle a jQuery que estás cargando JSONP dataType: ''jsonp''
Por favor, mira esta respuesta para más detalles! También puedes echarle un vistazo a este ya que explica por qué no funciona cargar el archivo .js
con text/plain
.
En mi caso, apagué X-Content-Type-Options
en nginx
luego funciona bien.
# Not work
add_header X-Content-Type-Options nosniff;
# OK (comment out)
#add_header X-Content-Type-Options nosniff;
Será lo mismo para apache.
<IfModule mod_headers.c>
#Header set X-Content-Type-Options nosniff
</IfModule>
también tuvo el mismo problema una vez,
si no puede resolver el problema, puede ejecutar el siguiente comando en la línea de comando
chrome.exe --user-data-dir="C://Chrome dev session" --disable-web-security
Nota: debe navegar hasta la ruta de instalación de su Chrome.
Por ejemplo: cd C:/Program Files/Google/Chrome/Application
Se abrirá un navegador chrome de la sesión del desarrollador, ahora puede iniciar su aplicación en el nuevo navegador Chrome.
Espero que esto sea útil