Chrome says “Resource interpreted as script but transferred with MIME type text/plain.”, what gives?

后端 未结 20 2291
眼角桃花
眼角桃花 2020-11-22 07:21

In FF and all, my javascript works fine. But in Chrome it gives this message:

Resource interpreted as script but transferred with MIME type text/plai

相关标签:
20条回答
  • 2020-11-22 08:16

    This has nothing to do with jQuery or any quirk of client-side script code. It is a server-side issue: The server(-side application) is not sending the expected HTTP Content-Type header field value for the client-side script resource. This happens if the Web server is insufficiently configured, misconfigured, or a server-side application (e. g., PHP) is generating the client-side script resource.

    Proper MIME media types for ECMAScript implementations like JavaScript include:

    • text/javascript (registered as obsolete, not deprecated; but still valid, and supported best)
    • text/ecmascript (registered as obsolete, not deprecated; but still valid)
    • application/javascript
    • application/ecmascript

    They do not include application/x-javascript, as the MIME media types listed above are the ones registered in the standards tree by now (so there is no need, and there should be no want, to use experimental ones anymore). Cf. RFC 4329, "Scripting Media Types" (2005 CE) and my Test Case: Support for Scripting Media Types.

    One solution is to configure the server if possible, as already recommended. For Apache, this can be as simple as adding the directive

    AddType text/javascript .js
    

    (see the Apache HTTP Server documentation for details).

    But if the client-side script resource is generated by a server-side application, like PHP, then it is necessary to set the Content-Type header field value explicitly, as the default is likely text/html:

    <?php
      header('Content-Type: text/javascript; charset=UTF-8');
      // ...
    ?>
    

    (That and similar statements must come before any other output – see the PHP manual –, else the HTTP message body is considered to have begun already and it is too late to send more header fields.)

    Server-side generation can happen easily to a client-side script resource even if you have plain .js files on the server, if comments are removed from them as they are served, if they are all packed into one large response (to reduce the number of requests, which can be more efficient), or they are minimized by the server-side application in any other way.

    0 讨论(0)
  • 2020-11-22 08:18

    The answer posted here by simon-sarris helped me.

    This helped me solve my issue.

    The Visual Studio installer must have added an errant line to the registry.

    open up regedit and take a look at this registry key:

    enter image description here

    See that key? The Content Type key? change its value from text/plain to text/javascript.

    Finally chrome can breathe easy again.

    I should note that neither Content Type nor PercievedType are there by default on Windows 7, so you could probably safely delete them both, but the minimum you need to do is that edit.

    Anyway I hope this fixes it for you too!

    Don't forget to restart your system after the changes.

    0 讨论(0)
提交回复
热议问题