Schakel Chrome strikte MIME-typecontrole uit

Is er een manier om de strict MIME type checkingin Chrome uit te schakelen.

Eigenlijk doe ik een JSONP-verzoek op meerdere domeinen. Het werkt prima in Firefox, maar tijdens het gebruik van Chrome geeft het een fout in de console.

Geweigerd om script van ‘https://example.com‘ uit te voeren vanwege het MIME-type (‘text/plain’ ) is niet uitvoerbaar en strikte controle van het MIME-type is ingeschakeld.

Het werkt perfect in Mozilla.. Het probleem doet zich alleen voor in Chrome

Hier zijn de antwoordkoppen van het verzoek..

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

Oplossing wat ik denk:
Extern inhoudstype instellen op application/javascript


Antwoord 1, autoriteit 100%

De server moet reageren met het juiste MIME-type voor JSONP application/javascripten uw verzoek moet jQuery vertellen dat u JSONP dataType: 'jsonp'

aan het laden bent

Zie dit antwoordvoor meer details!
Je kunt ook eens kijken naar dezeomdat het uitlegt waarom het .js-bestand wordt geladen met text/plainwerkt niet.


Antwoord 2, autoriteit 93%

In mijn geval heb ik X-Content-Type-Optionsuitgeschakeld op nginxen werkt dan prima. Maar zorg ervoor dat dit uw beveiligingsniveau een beetje verlaagt. Zou een tijdelijke oplossing zijn.

# Not work
add_header X-Content-Type-Options nosniff;
# OK (comment out)
#add_header X-Content-Type-Options nosniff;

Het zal hetzelfde zijn voor apache.

<IfModule mod_headers.c>
  #Header set X-Content-Type-Options nosniff
</IfModule>

Antwoord 3, autoriteit 36%

Voor Windows-gebruikers:

Als dit probleem zich voordoet op uw zelfgehoste server (bijv:uw aangepaste CDN) en de browser (Chrome) zegt iets als ... ('text/plain') is not executable ...wanneer u uw javascript-bestand probeert te laden …

Dit is wat u moet doen:

  1. Open de Register-editor d.w.z.Win + R > regedit
  2. Ga naar HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.js
  3. Controleer of het inhoudstype application/javascriptis of niet
  4. Zo niet, verander het dan in application/javascripten probeer het opnieuw

Antwoord 4, autoriteit 29%

had ook een keer hetzelfde probleem,

als u het probleem niet kunt oplossen, kunt u de volgende opdracht uitvoeren op de opdrachtregel
chrome.exe --user-data-dir="C://Chrome dev session" --disable-web-security

Opmerking: u moet naar het installatiepad van uw chrome navigeren.
Bijvoorbeeld:cd C:\Program Files\Google\Chrome\Application

Er wordt een Chrome-browser voor ontwikkelaarssessies geopend. U kunt uw app nu starten in de nieuwe Chrome-browser.
Ik hoop dat dit nuttig zou zijn


Antwoord 5, autoriteit 7%

Een andere oplossing wanneer een bestand zich voordoet als een andere extensie

Ik gebruik phpin het var.js-bestand met deze .htaccess.

<Files var.js>
    AddType application/x-httpd-php .js
</Files>

Vervolgens schrijf ik php-code in het .js-bestand

<?php
// This is a `.js` file but works with php
echo "var js_variable = '$php_variable';";

Toen ik de waarschuwing voor het MIME-type in Chrome kreeg, heb ik dit verholpen door een kopregel Content-Typetoe te voegen aan het bestand .js(but php).

p>

<?php
header('Content-Type: application/javascript');        // <- Add this line
// This is a `.js` file but works with php
...

Een browser voert het .js-bestand niet uit omdat apache de Content-Type-header van het bestand verzendt als application/x-httpd-phpdie is gedefinieerd in .htaccess. Dat is een veiligheidsreden. Maar apache zal php niet uitvoeren voor zover htaccessde imitatie beveelt, het is noodzakelijk. We moeten dus de Content-Type-header van apache overschrijven met de php-functie header(). Ik denk dat apache stopt met het verzenden van zijn eigen header wanneer php het eerder verzendt in plaats van apache.


Antwoord 6

In het geval dat u node.js (met express)

gebruikt

Als u statische bestanden in node.js wilt weergeven, moet u een functie gebruiken. Voeg de volgende code toe aan je js-bestand:

app.use(express.static("public"));

Waar app is:

const express = require("express");
const app = express();

Maak vervolgens een map met de naam public aan in uw projectmap. (Je zou het ook anders kunnen noemen, dit is gewoon een goede gewoonte, maar vergeet niet om het ook vanuit de functie te veranderen.)

Maak dan in dit bestand een andere map aan met de naam css (en/of afbeeldingenbestand onder css als je ook statische afbeeldingen wilt weergeven.) en voeg je css-bestanden toe aan deze map.

Nadat u ze heeft toegevoegd, wijzigt u de stylesheet dienovereenkomstig. Als het bijvoorbeeld was:

href="cssFileName.css"

en

src="imgName.png"

Maak ze:

href="css/cssFileName.css"
src="css/images/imgName.png"

Dat zou moeten werken👌🏽

Other episodes