Getting Resource interpreted as Script but transferred with MIME type text/html when I'm offline and requesting css and js files from AppCache

StackOverflow https://stackoverflow.com//questions/9640861

  •  10-12-2019
  •  | 
  •  

Question

I am developing a web app in which I am trying to use the HTML5 application cache.

I can successfully cache the files and load the files from AppCache while online. But when I go offline, all the css and js files are transferred with MIME type text/html instead of application/x-javascript or text/css, so it is not properly working on offline.

This is what I get when I request a page while offline.

Application Cache Error event: Manifest fetch failed (-1) https://example.com/manifest
Resource interpreted as Stylesheet but transferred with MIME type text/html: "https://example.com/offline_assets/stylesheets/cache/offline_all.css".
Resource interpreted as Script but transferred with MIME type text/html: "https://example.com/javascripts/offline/respond.min.js".
Resource interpreted as Script but transferred with MIME type text/html: "https://example.com/javascripts/yui3/3.1.1/build/yui/yui-min.js".
Resource interpreted as Script but transferred with MIME type text/html: "https://example.com/offline_assets/sprockets.js".

Therefore, the page is not styled and getting whole kind of JS errors.

How can I properly set such that css and js files are transferred with a proper MIME type from appcache while offline? thank you for your suggestions

Updated: this is how I serve the manifest file on the server

class ManifestController < ApplicationController

  def show
    headers['Content-Type'] = 'text/cache-manifest'
    render :text => File.open("#{RAILS_ROOT}/public/manifest.appcache").read, :layout => false
  end
end

and I have passed this validation test: http://manifest-validator.com/

Here is my Manifest file:

CACHE MANIFEST
#<
/offline_assets/stylesheets/cache/offline_all.css
/offline_assets/fonts/websymbols-regular-webfont.woff
/offline_assets/javascripts/yui3/3.1.1/build/yui/yui-min.js
/offline_assets/sprockets.js
/offline_assets/javascripts/offline/respond.min.js
/offline_assets/images/logoClio.png
/offline_assets/images/search/icoSearch.png
/offline_assets/images/icoArrow-down.png
/offline_assets/images/gold/submenu_current.png
/offline_assets/images/calendar/left_arrow.gif
/offline_assets/images/calendar/right_arrow.gif
/offline_assets/images/calendar/left_arrow_on.gif
/offline_assets/images/calendar/right_arrow_on.gif
/offline_assets/images/calendar-lg.gif
/offline_assets/images/logo-tagline.gif
/offline_assets/images/icoRecent-matter.png
/offline_assets/images/icoRecent-contact.png
/offline_assets/stylesheets/yui/dt-arrow-dn.png
/offline_assets/stylesheets/cache/sprite.png
/offline_assets/images/timer_stop.png
/offline_assets/images/add3.png
/offline_assets/images/arrow_down.gif
/offline_assets/images/spinner.gif
/offline_assets/images/timer_start.png
/offline_assets/images/delete.png
/offline_assets/images/offline/logoClio.png
/offline_assets/images/offline/bgSteps-1.png
/offline_assets/images/offline/bgSteps-2.png
/offline_assets/images/offline/bgSteps-3.png
/offline_assets/images/offline/icoReload.png
/offline_assets/images/offline/dt-arrow-dn.png
/offline_assets/images/offline/sprite.png
#>

# offline.html will be displayed if the user is offline and attempt to get uncached pages
FALLBACK:
/ /offline.html

# All other resources (e.g. sites) require the user to be online. 
NETWORK:
*

And this is one of the cached file that shows MIME type and other details on chrome://appcache-internals/

https://staging.goclio.com/offline_assets/sprockets.js?cec750eb3581f3d9f78c97d0ad8331df
HTTP/1.1 200 OK
Server: nginx/0.8.55
Date: Fri, 09 Mar 2012 19:56:17 GMT
Content-Type: application/x-javascript
Last-Modified: Fri, 09 Mar 2012 19:51:10 GMT
Expires: Thu, 31 Dec 2037 23:55:55 GMT
Cache-Control: max-age=315360000
X-Backend-Server: 333963-web02.rs.goclio.com:81
Accept-Ranges: bytes
Vary: Accept-Encoding, User-Agent
Content-Encoding: gzip

Another update: this works fine on firefox without getting any MIME type error. Naoya

Was it helpful?

Solution

It was actually not an issue of MIME type. It was giving me the text/html content-type error as it was returning offline.html which is returned when I request a non-cached file. The issue was that I added MD5 hash as a parameter for each file. so the manifest looked like this.

CACHE MANIFEST
/offline_assets/stylesheets/cache/offline_all.css?someMD5hash
/offline_assets/javascripts/yui3/3.1.1/build/yui/yui-min.jsf?anotherMD5hash
#and may more files with MD5 hash

FALLBACK:
/ /offline.html

NETWORK:
*

when it requested the content while offline, it was not able to find an appropriate file as the cached file name contained the MD5 hash as a parameter. So I resolved it by including the MD5 hash as the comment.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top