1 <h1>Hosting</h1> 2 3 <p class="warning"><b>Warning:</b> 4 As of Chrome 33, 5 Windows stable/beta channel users can only download extensions 6 hosted in the Chrome Web store, 7 except for installs via 8 <a href="https://support.google.com/chrome/a/answer/188453">enterprise policy</a> 9 or 10 <a href="getstarted#unpacked">developer mode</a> 11 (see 12 <a href="http://blog.chromium.org/2013/11/protecting-windows-users-from-malicious.html">Protecting Windows users from malicious extensions</a>). 13 You can still create your own <code>.crx</code> file and use it for testing in the dev channel, 14 but you can't host that file on your own server. 15 </p> 16 17 <p> 18 This page tells you how to host <code>.crx</code> files 19 on your own server. 20 If you distribute your extension, app, or theme solely through the 21 <a href="http://chrome.google.com/webstore">Chrome Web Store</a>, 22 you don't need this page. 23 Instead, consult the 24 <a href="http://www.google.com/support/chrome_webstore/">store help</a> and 25 <a href="http://code.google.com/chrome/webstore/index">developer documentation</a>. 26 </p> 27 28 <p> 29 By convention, extensions, 30 installable web apps, and themes are served—whether 31 by the Chrome Web Store or by a custom server—as 32 <code>.crx</code> files. 33 When you upload a ZIP file with the 34 <a href="https://chrome.google.com/webstore/developer/dashboard">Chrome Developer Dashboard</a>, 35 the dashboard creates the <code>.crx</code> file for you. 36 </p> 37 38 <p> 39 If you aren't publishing using the dashboard, 40 you need to create the <code>.crx</code> file yourself, 41 as described in <a href="packaging">Packaging</a>. 42 You can also specify 43 <a href="autoupdate">autoupdate</a> information to ensure that 44 your users will have the latest copy of the <code>.crx</code> file. 45 </p> 46 47 <p> 48 A server that hosts <code>.crx</code> files 49 must use appropriate HTTP headers, 50 so that users can install the file 51 by clicking a link to it. 52 </p> 53 54 <p> 55 Google Chrome considers a file to be installable 56 if <b>either</b> of the following is true: 57 </p> 58 59 <ul> 60 <li> 61 The file has the content type 62 <code>application/x-chrome-extension</code> 63 </li> 64 <li> 65 The file suffix is <code>.crx</code> 66 and <b>both</b> of the following are true: 67 <ul> 68 <li> 69 The file <b>is not</b> served with 70 the HTTP header <code>X-Content-Type-Options: nosniff</code> 71 </li> 72 <li> 73 The file <b>is</b> served 74 with one of the following content types: 75 <ul> 76 <li> empty string </li> 77 <li> "text/plain" </li> 78 <li> "application/octet-stream" </li> 79 <li> "unknown/unknown" </li> 80 <li> "application/unknown" </li> 81 <li> "*/*" </li> 82 </ul> 83 </li> 84 </ul> 85 </li> 86 </ul> 87 88 <p> 89 The most common reason for failing to recognize an installable file 90 is that the server sends the header 91 <code>X-Content-Type-Options: nosniff</code>. 92 The second most common reason 93 is that the server sends an unknown content type—one 94 that isn't in the previous list. 95 To fix an HTTP header issue, 96 either change the configuration of the server 97 or try hosting the <code>.crx</code> file at another server. 98 </p> 99