iodine 0.4.19 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of iodine might be problematic. Click here for more details.

Files changed (146) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -2
  3. data/CHANGELOG.md +22 -0
  4. data/LIMITS.md +19 -9
  5. data/README.md +92 -77
  6. data/SPEC-PubSub-Draft.md +113 -0
  7. data/SPEC-Websocket-Draft.md +127 -143
  8. data/bin/http-hello +0 -1
  9. data/bin/raw-rbhttp +1 -1
  10. data/bin/raw_broadcast +8 -10
  11. data/bin/updated api +2 -2
  12. data/bin/ws-broadcast +2 -4
  13. data/bin/ws-echo +2 -2
  14. data/examples/config.ru +13 -13
  15. data/examples/echo.ru +5 -6
  16. data/examples/hello.ru +2 -3
  17. data/examples/info.md +316 -0
  18. data/examples/pubsub_engine.ru +81 -0
  19. data/examples/redis.ru +9 -9
  20. data/examples/shootout.ru +45 -11
  21. data/ext/iodine/defer.c +194 -297
  22. data/ext/iodine/defer.h +61 -53
  23. data/ext/iodine/evio.c +0 -260
  24. data/ext/iodine/evio.h +50 -22
  25. data/ext/iodine/evio_callbacks.c +26 -0
  26. data/ext/iodine/evio_epoll.c +251 -0
  27. data/ext/iodine/evio_kqueue.c +193 -0
  28. data/ext/iodine/extconf.rb +1 -1
  29. data/ext/iodine/facil.c +1420 -542
  30. data/ext/iodine/facil.h +151 -64
  31. data/ext/iodine/fio_ary.h +418 -0
  32. data/ext/iodine/{base64.c → fio_base64.c} +33 -24
  33. data/ext/iodine/{base64.h → fio_base64.h} +6 -7
  34. data/ext/iodine/{fio_cli_helper.c → fio_cli.c} +77 -58
  35. data/ext/iodine/{fio_cli_helper.h → fio_cli.h} +9 -4
  36. data/ext/iodine/fio_hashmap.h +759 -0
  37. data/ext/iodine/fio_json_parser.h +651 -0
  38. data/ext/iodine/fio_llist.h +257 -0
  39. data/ext/iodine/fio_mem.c +672 -0
  40. data/ext/iodine/fio_mem.h +140 -0
  41. data/ext/iodine/fio_random.c +248 -0
  42. data/ext/iodine/{random.h → fio_random.h} +11 -14
  43. data/ext/iodine/{sha1.c → fio_sha1.c} +28 -24
  44. data/ext/iodine/{sha1.h → fio_sha1.h} +38 -16
  45. data/ext/iodine/{sha2.c → fio_sha2.c} +66 -49
  46. data/ext/iodine/{sha2.h → fio_sha2.h} +57 -26
  47. data/ext/iodine/{fiobj_internal.c → fio_siphash.c} +9 -90
  48. data/ext/iodine/fio_siphash.h +18 -0
  49. data/ext/iodine/fio_tmpfile.h +38 -0
  50. data/ext/iodine/fiobj.h +24 -7
  51. data/ext/iodine/fiobj4sock.h +23 -0
  52. data/ext/iodine/fiobj_ary.c +143 -226
  53. data/ext/iodine/fiobj_ary.h +17 -16
  54. data/ext/iodine/fiobj_data.c +1160 -0
  55. data/ext/iodine/fiobj_data.h +164 -0
  56. data/ext/iodine/fiobj_hash.c +298 -406
  57. data/ext/iodine/fiobj_hash.h +101 -54
  58. data/ext/iodine/fiobj_json.c +478 -601
  59. data/ext/iodine/fiobj_json.h +34 -9
  60. data/ext/iodine/fiobj_numbers.c +383 -51
  61. data/ext/iodine/fiobj_numbers.h +87 -11
  62. data/ext/iodine/fiobj_str.c +423 -184
  63. data/ext/iodine/fiobj_str.h +81 -32
  64. data/ext/iodine/fiobject.c +273 -522
  65. data/ext/iodine/fiobject.h +477 -112
  66. data/ext/iodine/http.c +2243 -83
  67. data/ext/iodine/http.h +842 -121
  68. data/ext/iodine/http1.c +810 -385
  69. data/ext/iodine/http1.h +16 -39
  70. data/ext/iodine/http1_parser.c +146 -74
  71. data/ext/iodine/http1_parser.h +15 -4
  72. data/ext/iodine/http_internal.c +1258 -0
  73. data/ext/iodine/http_internal.h +226 -0
  74. data/ext/iodine/http_mime_parser.h +341 -0
  75. data/ext/iodine/iodine.c +86 -68
  76. data/ext/iodine/iodine.h +26 -11
  77. data/ext/iodine/iodine_helpers.c +8 -7
  78. data/ext/iodine/iodine_http.c +487 -324
  79. data/ext/iodine/iodine_json.c +304 -0
  80. data/ext/iodine/iodine_json.h +6 -0
  81. data/ext/iodine/iodine_protocol.c +107 -45
  82. data/ext/iodine/iodine_pubsub.c +526 -225
  83. data/ext/iodine/iodine_pubsub.h +10 -0
  84. data/ext/iodine/iodine_websockets.c +268 -510
  85. data/ext/iodine/iodine_websockets.h +2 -4
  86. data/ext/iodine/pubsub.c +726 -432
  87. data/ext/iodine/pubsub.h +85 -103
  88. data/ext/iodine/rb-call.c +4 -4
  89. data/ext/iodine/rb-defer.c +46 -22
  90. data/ext/iodine/rb-fiobj2rb.h +117 -0
  91. data/ext/iodine/rb-rack-io.c +73 -238
  92. data/ext/iodine/rb-rack-io.h +2 -2
  93. data/ext/iodine/rb-registry.c +35 -93
  94. data/ext/iodine/rb-registry.h +1 -0
  95. data/ext/iodine/redis_engine.c +742 -304
  96. data/ext/iodine/redis_engine.h +42 -39
  97. data/ext/iodine/resp_parser.h +311 -0
  98. data/ext/iodine/sock.c +627 -490
  99. data/ext/iodine/sock.h +345 -297
  100. data/ext/iodine/spnlock.inc +15 -4
  101. data/ext/iodine/websocket_parser.h +16 -20
  102. data/ext/iodine/websockets.c +188 -257
  103. data/ext/iodine/websockets.h +24 -133
  104. data/lib/iodine.rb +52 -7
  105. data/lib/iodine/cli.rb +6 -24
  106. data/lib/iodine/json.rb +40 -0
  107. data/lib/iodine/version.rb +1 -1
  108. data/lib/iodine/websocket.rb +5 -3
  109. data/lib/rack/handler/iodine.rb +58 -13
  110. metadata +38 -48
  111. data/bin/ws-shootout +0 -107
  112. data/examples/broadcast.ru +0 -56
  113. data/ext/iodine/bscrypt-common.h +0 -116
  114. data/ext/iodine/bscrypt.h +0 -49
  115. data/ext/iodine/fio2resp.c +0 -60
  116. data/ext/iodine/fio2resp.h +0 -51
  117. data/ext/iodine/fio_dict.c +0 -446
  118. data/ext/iodine/fio_dict.h +0 -99
  119. data/ext/iodine/fio_hash_table.h +0 -370
  120. data/ext/iodine/fio_list.h +0 -111
  121. data/ext/iodine/fiobj_internal.h +0 -280
  122. data/ext/iodine/fiobj_primitives.c +0 -131
  123. data/ext/iodine/fiobj_primitives.h +0 -55
  124. data/ext/iodine/fiobj_sym.c +0 -135
  125. data/ext/iodine/fiobj_sym.h +0 -60
  126. data/ext/iodine/hex.c +0 -124
  127. data/ext/iodine/hex.h +0 -70
  128. data/ext/iodine/http1_request.c +0 -81
  129. data/ext/iodine/http1_request.h +0 -58
  130. data/ext/iodine/http1_response.c +0 -417
  131. data/ext/iodine/http1_response.h +0 -95
  132. data/ext/iodine/http_request.c +0 -111
  133. data/ext/iodine/http_request.h +0 -102
  134. data/ext/iodine/http_response.c +0 -1703
  135. data/ext/iodine/http_response.h +0 -250
  136. data/ext/iodine/misc.c +0 -182
  137. data/ext/iodine/misc.h +0 -74
  138. data/ext/iodine/random.c +0 -208
  139. data/ext/iodine/redis_connection.c +0 -278
  140. data/ext/iodine/redis_connection.h +0 -86
  141. data/ext/iodine/resp.c +0 -842
  142. data/ext/iodine/resp.h +0 -261
  143. data/ext/iodine/siphash.c +0 -154
  144. data/ext/iodine/siphash.h +0 -22
  145. data/ext/iodine/xor-crypt.c +0 -193
  146. data/ext/iodine/xor-crypt.h +0 -107
@@ -0,0 +1,1258 @@
1
+ /*
2
+ Copyright: Boaz Segev, 2016-2018
3
+ License: MIT
4
+
5
+ Feel free to copy, use and enjoy according to the license provided.
6
+ */
7
+ #include "http_internal.h"
8
+
9
+ #include "fio_mem.h"
10
+
11
+ #include "http1.h"
12
+
13
+ /* *****************************************************************************
14
+ Internal Request / Response Handlers
15
+ ***************************************************************************** */
16
+
17
+ static uint64_t http_upgrade_hash = 0;
18
+ /** Use this function to handle HTTP requests.*/
19
+ void http_on_request_handler______internal(http_s *h,
20
+ http_settings_s *settings) {
21
+ if (!http_upgrade_hash)
22
+ http_upgrade_hash = fio_siphash("upgrade", 7);
23
+ h->udata = settings->udata;
24
+
25
+ static uint64_t host_hash = 0;
26
+ if (!host_hash)
27
+ host_hash = fio_siphash("host", 4);
28
+
29
+ if (1) {
30
+ /* test for Host header and avoid duplicates */
31
+ FIOBJ tmp = fiobj_hash_get2(h->headers, host_hash);
32
+ if (!tmp)
33
+ http_send_error(h, 400);
34
+ if (FIOBJ_TYPE_IS(tmp, FIOBJ_T_ARRAY)) {
35
+ fiobj_hash_set(h->headers, HTTP_HEADER_HOST, fiobj_ary_pop(tmp));
36
+ }
37
+ }
38
+
39
+ FIOBJ t = fiobj_hash_get2(h->headers, http_upgrade_hash);
40
+ if (t)
41
+ goto upgrade;
42
+
43
+ if (fiobj_iseq(
44
+ fiobj_hash_get2(h->headers, fiobj_obj2hash(HTTP_HEADER_ACCEPT)),
45
+ HTTP_HVALUE_SSE_MIME))
46
+ goto eventsource;
47
+ if (settings->public_folder) {
48
+ fio_cstr_s path_str = fiobj_obj2cstr(h->path);
49
+ if (!http_sendfile2(h, settings->public_folder,
50
+ settings->public_folder_length, path_str.data,
51
+ path_str.len)) {
52
+ return;
53
+ }
54
+ }
55
+ settings->on_request(h);
56
+ return;
57
+
58
+ upgrade:
59
+ if (1) {
60
+ fiobj_dup(t); /* allow upgrade name access after http_finish */
61
+ fio_cstr_s val = fiobj_obj2cstr(t);
62
+ if (val.data[0] == 'h' && val.data[1] == '2') {
63
+ http_send_error(h, 400);
64
+ } else {
65
+ settings->on_upgrade(h, val.data, val.len);
66
+ }
67
+ fiobj_free(t);
68
+ return;
69
+ }
70
+ eventsource:
71
+ settings->on_upgrade(h, "sse", 3);
72
+ return;
73
+ }
74
+
75
+ void http_on_response_handler______internal(http_s *h,
76
+ http_settings_s *settings) {
77
+ if (!http_upgrade_hash)
78
+ http_upgrade_hash = fio_siphash("upgrade", 7);
79
+ h->udata = settings->udata;
80
+ FIOBJ t = fiobj_hash_get2(h->headers, http_upgrade_hash);
81
+ if (t == FIOBJ_INVALID) {
82
+ settings->on_response(h);
83
+ return;
84
+ } else {
85
+ fio_cstr_s val = fiobj_obj2cstr(t);
86
+ settings->on_upgrade(h, val.data, val.len);
87
+ }
88
+ }
89
+
90
+ /* *****************************************************************************
91
+ Internal helpers
92
+ ***************************************************************************** */
93
+
94
+ int http_send_error2(size_t error, intptr_t uuid, http_settings_s *settings) {
95
+ if (!uuid || !settings || !error)
96
+ return -1;
97
+ protocol_s *pr = http1_new(uuid, settings, NULL, 0);
98
+ http_s *r = fio_malloc(sizeof(*r));
99
+ HTTP_ASSERT(pr, "Couldn't allocate response object for error report.")
100
+ http_s_new(r, (http_protocol_s *)pr, http1_vtable());
101
+ int ret = http_send_error(r, error);
102
+ sock_close(uuid);
103
+ return ret;
104
+ }
105
+
106
+ /* *****************************************************************************
107
+ Library initialization
108
+ ***************************************************************************** */
109
+
110
+ FIOBJ HTTP_HEADER_ACCEPT;
111
+ FIOBJ HTTP_HEADER_ACCEPT_RANGES;
112
+ FIOBJ HTTP_HEADER_CACHE_CONTROL;
113
+ FIOBJ HTTP_HEADER_CONNECTION;
114
+ FIOBJ HTTP_HEADER_CONTENT_ENCODING;
115
+ FIOBJ HTTP_HEADER_CONTENT_LENGTH;
116
+ FIOBJ HTTP_HEADER_CONTENT_RANGE;
117
+ FIOBJ HTTP_HEADER_CONTENT_TYPE;
118
+ FIOBJ HTTP_HEADER_COOKIE;
119
+ FIOBJ HTTP_HEADER_DATE;
120
+ FIOBJ HTTP_HEADER_ETAG;
121
+ FIOBJ HTTP_HEADER_HOST;
122
+ FIOBJ HTTP_HEADER_LAST_MODIFIED;
123
+ FIOBJ HTTP_HEADER_ORIGIN;
124
+ FIOBJ HTTP_HEADER_SET_COOKIE;
125
+ FIOBJ HTTP_HEADER_UPGRADE;
126
+ FIOBJ HTTP_HEADER_WS_SEC_CLIENT_KEY;
127
+ FIOBJ HTTP_HEADER_WS_SEC_KEY;
128
+ FIOBJ HTTP_HVALUE_BYTES;
129
+ FIOBJ HTTP_HVALUE_CLOSE;
130
+ FIOBJ HTTP_HVALUE_CONTENT_TYPE_DEFAULT;
131
+ FIOBJ HTTP_HVALUE_GZIP;
132
+ FIOBJ HTTP_HVALUE_KEEP_ALIVE;
133
+ FIOBJ HTTP_HVALUE_MAX_AGE;
134
+ FIOBJ HTTP_HVALUE_NO_CACHE;
135
+ FIOBJ HTTP_HVALUE_WEBSOCKET;
136
+ FIOBJ HTTP_HVALUE_WS_SEC_VERSION;
137
+ FIOBJ HTTP_HVALUE_WS_UPGRADE;
138
+ FIOBJ HTTP_HVALUE_WS_VERSION;
139
+ FIOBJ HTTP_HVALUE_SSE_MIME;
140
+
141
+ void http_lib_cleanup(void) {
142
+ http_mimetype_clear();
143
+ #define HTTPLIB_RESET(x) \
144
+ fiobj_free(x); \
145
+ x = FIOBJ_INVALID;
146
+ HTTPLIB_RESET(HTTP_HEADER_ACCEPT);
147
+ HTTPLIB_RESET(HTTP_HEADER_ACCEPT_RANGES);
148
+ HTTPLIB_RESET(HTTP_HEADER_CACHE_CONTROL);
149
+ HTTPLIB_RESET(HTTP_HEADER_CONNECTION);
150
+ HTTPLIB_RESET(HTTP_HEADER_CONTENT_ENCODING);
151
+ HTTPLIB_RESET(HTTP_HEADER_CONTENT_LENGTH);
152
+ HTTPLIB_RESET(HTTP_HEADER_CONTENT_RANGE);
153
+ HTTPLIB_RESET(HTTP_HEADER_CONTENT_TYPE);
154
+ HTTPLIB_RESET(HTTP_HEADER_COOKIE);
155
+ HTTPLIB_RESET(HTTP_HEADER_DATE);
156
+ HTTPLIB_RESET(HTTP_HEADER_ETAG);
157
+ HTTPLIB_RESET(HTTP_HEADER_HOST);
158
+ HTTPLIB_RESET(HTTP_HVALUE_SSE_MIME);
159
+ HTTPLIB_RESET(HTTP_HEADER_LAST_MODIFIED);
160
+ HTTPLIB_RESET(HTTP_HEADER_ORIGIN);
161
+ HTTPLIB_RESET(HTTP_HEADER_SET_COOKIE);
162
+ HTTPLIB_RESET(HTTP_HEADER_UPGRADE);
163
+ HTTPLIB_RESET(HTTP_HEADER_WS_SEC_CLIENT_KEY);
164
+ HTTPLIB_RESET(HTTP_HEADER_WS_SEC_KEY);
165
+ HTTPLIB_RESET(HTTP_HVALUE_BYTES);
166
+ HTTPLIB_RESET(HTTP_HVALUE_CLOSE);
167
+ HTTPLIB_RESET(HTTP_HVALUE_CONTENT_TYPE_DEFAULT);
168
+ HTTPLIB_RESET(HTTP_HVALUE_GZIP);
169
+ HTTPLIB_RESET(HTTP_HVALUE_KEEP_ALIVE);
170
+ HTTPLIB_RESET(HTTP_HVALUE_MAX_AGE);
171
+ HTTPLIB_RESET(HTTP_HVALUE_NO_CACHE);
172
+ HTTPLIB_RESET(HTTP_HVALUE_WEBSOCKET);
173
+ HTTPLIB_RESET(HTTP_HVALUE_WS_SEC_VERSION);
174
+ HTTPLIB_RESET(HTTP_HVALUE_WS_UPGRADE);
175
+ HTTPLIB_RESET(HTTP_HVALUE_WS_VERSION);
176
+
177
+ #undef HTTPLIB_RESET
178
+ }
179
+
180
+ void http_lib_init(void) {
181
+ if (HTTP_HEADER_ACCEPT_RANGES)
182
+ return;
183
+ HTTP_HEADER_ACCEPT = fiobj_str_new("accept", 6);
184
+ HTTP_HEADER_ACCEPT_RANGES = fiobj_str_new("accept-ranges", 13);
185
+ HTTP_HEADER_CACHE_CONTROL = fiobj_str_new("cache-control", 13);
186
+ HTTP_HEADER_CONNECTION = fiobj_str_new("connection", 10);
187
+ HTTP_HEADER_CONTENT_ENCODING = fiobj_str_new("content-encoding", 16);
188
+ HTTP_HEADER_CONTENT_LENGTH = fiobj_str_new("content-length", 14);
189
+ HTTP_HEADER_CONTENT_RANGE = fiobj_str_new("content-range", 13);
190
+ HTTP_HEADER_CONTENT_TYPE = fiobj_str_new("content-type", 12);
191
+ HTTP_HEADER_COOKIE = fiobj_str_new("cookie", 6);
192
+ HTTP_HEADER_DATE = fiobj_str_new("date", 4);
193
+ HTTP_HEADER_ETAG = fiobj_str_new("etag", 4);
194
+ HTTP_HEADER_HOST = fiobj_str_new("host", 4);
195
+ HTTP_HEADER_LAST_MODIFIED = fiobj_str_new("last-modified", 13);
196
+ HTTP_HEADER_ORIGIN = fiobj_str_new("origin", 6);
197
+ HTTP_HEADER_SET_COOKIE = fiobj_str_new("set-cookie", 10);
198
+ HTTP_HEADER_UPGRADE = fiobj_str_new("upgrade", 7);
199
+ HTTP_HEADER_WS_SEC_CLIENT_KEY = fiobj_str_new("sec-websocket-key", 17);
200
+ HTTP_HEADER_WS_SEC_KEY = fiobj_str_new("sec-websocket-accept", 20);
201
+ HTTP_HVALUE_BYTES = fiobj_str_new("bytes", 5);
202
+ HTTP_HVALUE_CLOSE = fiobj_str_new("close", 5);
203
+ HTTP_HVALUE_CONTENT_TYPE_DEFAULT =
204
+ fiobj_str_new("application/octet-stream", 24);
205
+ HTTP_HVALUE_GZIP = fiobj_str_new("gzip", 4);
206
+ HTTP_HVALUE_KEEP_ALIVE = fiobj_str_new("keep-alive", 10);
207
+ HTTP_HVALUE_MAX_AGE = fiobj_str_new("max-age=3600", 12);
208
+ HTTP_HVALUE_NO_CACHE = fiobj_str_new("no-cache, max-age=0", 19);
209
+ HTTP_HVALUE_SSE_MIME = fiobj_str_new("text/event-stream", 17);
210
+ HTTP_HVALUE_WEBSOCKET = fiobj_str_new("websocket", 9);
211
+ HTTP_HVALUE_WS_SEC_VERSION = fiobj_str_new("sec-websocket-version", 21);
212
+ HTTP_HVALUE_WS_UPGRADE = fiobj_str_new("Upgrade", 7);
213
+ HTTP_HVALUE_WS_VERSION = fiobj_str_new("13", 2);
214
+
215
+ fiobj_obj2hash(HTTP_HEADER_ACCEPT_RANGES);
216
+ fiobj_obj2hash(HTTP_HEADER_CACHE_CONTROL);
217
+ fiobj_obj2hash(HTTP_HEADER_CONNECTION);
218
+ fiobj_obj2hash(HTTP_HEADER_CONTENT_ENCODING);
219
+ fiobj_obj2hash(HTTP_HEADER_CONTENT_LENGTH);
220
+ fiobj_obj2hash(HTTP_HEADER_CONTENT_RANGE);
221
+ fiobj_obj2hash(HTTP_HEADER_CONTENT_TYPE);
222
+ fiobj_obj2hash(HTTP_HEADER_COOKIE);
223
+ fiobj_obj2hash(HTTP_HEADER_DATE);
224
+ fiobj_obj2hash(HTTP_HEADER_ETAG);
225
+ fiobj_obj2hash(HTTP_HEADER_HOST);
226
+ fiobj_obj2hash(HTTP_HEADER_LAST_MODIFIED);
227
+ fiobj_obj2hash(HTTP_HEADER_ORIGIN);
228
+ fiobj_obj2hash(HTTP_HEADER_SET_COOKIE);
229
+ fiobj_obj2hash(HTTP_HEADER_UPGRADE);
230
+ fiobj_obj2hash(HTTP_HEADER_WS_SEC_CLIENT_KEY);
231
+ fiobj_obj2hash(HTTP_HEADER_WS_SEC_KEY);
232
+ fiobj_obj2hash(HTTP_HVALUE_BYTES);
233
+ fiobj_obj2hash(HTTP_HVALUE_CLOSE);
234
+ fiobj_obj2hash(HTTP_HVALUE_CONTENT_TYPE_DEFAULT);
235
+ fiobj_obj2hash(HTTP_HVALUE_GZIP);
236
+ fiobj_obj2hash(HTTP_HVALUE_KEEP_ALIVE);
237
+ fiobj_obj2hash(HTTP_HVALUE_MAX_AGE);
238
+ fiobj_obj2hash(HTTP_HVALUE_NO_CACHE);
239
+ fiobj_obj2hash(HTTP_HVALUE_SSE_MIME);
240
+ fiobj_obj2hash(HTTP_HVALUE_WEBSOCKET);
241
+ fiobj_obj2hash(HTTP_HVALUE_WS_SEC_VERSION);
242
+ fiobj_obj2hash(HTTP_HVALUE_WS_UPGRADE);
243
+ fiobj_obj2hash(HTTP_HVALUE_WS_VERSION);
244
+
245
+ #define REGISTER_MIME(ext, type) \
246
+ http_mimetype_register(ext, sizeof(ext) - 1, \
247
+ fiobj_str_static(type, sizeof(type) - 1))
248
+
249
+ REGISTER_MIME("123", "application/vnd.lotus-1-2-3");
250
+ REGISTER_MIME("3dml", "text/vnd.in3d.3dml");
251
+ REGISTER_MIME("3ds", "image/x-3ds");
252
+ REGISTER_MIME("3g2", "video/3gpp2");
253
+ REGISTER_MIME("3gp", "video/3gpp");
254
+ REGISTER_MIME("7z", "application/x-7z-compressed");
255
+ REGISTER_MIME("aab", "application/x-authorware-bin");
256
+ REGISTER_MIME("aac", "audio/x-aac");
257
+ REGISTER_MIME("aam", "application/x-authorware-map");
258
+ REGISTER_MIME("aas", "application/x-authorware-seg");
259
+ REGISTER_MIME("abw", "application/x-abiword");
260
+ REGISTER_MIME("ac", "application/pkix-attr-cert");
261
+ REGISTER_MIME("acc", "application/vnd.americandynamics.acc");
262
+ REGISTER_MIME("ace", "application/x-ace-compressed");
263
+ REGISTER_MIME("acu", "application/vnd.acucobol");
264
+ REGISTER_MIME("acutc", "application/vnd.acucorp");
265
+ REGISTER_MIME("adp", "audio/adpcm");
266
+ REGISTER_MIME("aep", "application/vnd.audiograph");
267
+ REGISTER_MIME("afm", "application/x-font-type1");
268
+ REGISTER_MIME("afp", "application/vnd.ibm.modcap");
269
+ REGISTER_MIME("ahead", "application/vnd.ahead.space");
270
+ REGISTER_MIME("ai", "application/postscript");
271
+ REGISTER_MIME("aif", "audio/x-aiff");
272
+ REGISTER_MIME("aifc", "audio/x-aiff");
273
+ REGISTER_MIME("aiff", "audio/x-aiff");
274
+ REGISTER_MIME("air",
275
+ "application/vnd.adobe.air-application-installer-package+zip");
276
+ REGISTER_MIME("ait", "application/vnd.dvb.ait");
277
+ REGISTER_MIME("ami", "application/vnd.amiga.ami");
278
+ REGISTER_MIME("apk", "application/vnd.android.package-archive");
279
+ REGISTER_MIME("appcache", "text/cache-manifest");
280
+ REGISTER_MIME("application", "application/x-ms-application");
281
+ REGISTER_MIME("pptx", "application/"
282
+ "vnd.openxmlformats-officedocument.presentationml."
283
+ "presentation");
284
+ REGISTER_MIME("apr", "application/vnd.lotus-approach");
285
+ REGISTER_MIME("arc", "application/x-freearc");
286
+ REGISTER_MIME("asc", "application/pgp-signature");
287
+ REGISTER_MIME("asf", "video/x-ms-asf");
288
+ REGISTER_MIME("asm", "text/x-asm");
289
+ REGISTER_MIME("aso", "application/vnd.accpac.simply.aso");
290
+ REGISTER_MIME("asx", "video/x-ms-asf");
291
+ REGISTER_MIME("atc", "application/vnd.acucorp");
292
+ REGISTER_MIME("atom", "application/atom+xml");
293
+ REGISTER_MIME("atomcat", "application/atomcat+xml");
294
+ REGISTER_MIME("atomsvc", "application/atomsvc+xml");
295
+ REGISTER_MIME("atx", "application/vnd.antix.game-component");
296
+ REGISTER_MIME("au", "audio/basic");
297
+ REGISTER_MIME("avi", "video/x-msvideo");
298
+ REGISTER_MIME("aw", "application/applixware");
299
+ REGISTER_MIME("azf", "application/vnd.airzip.filesecure.azf");
300
+ REGISTER_MIME("azs", "application/vnd.airzip.filesecure.azs");
301
+ REGISTER_MIME("azw", "application/vnd.amazon.ebook");
302
+ REGISTER_MIME("bat", "application/x-msdownload");
303
+ REGISTER_MIME("bcpio", "application/x-bcpio");
304
+ REGISTER_MIME("bdf", "application/x-font-bdf");
305
+ REGISTER_MIME("bdm", "application/vnd.syncml.dm+wbxml");
306
+ REGISTER_MIME("bed", "application/vnd.realvnc.bed");
307
+ REGISTER_MIME("bh2", "application/vnd.fujitsu.oasysprs");
308
+ REGISTER_MIME("bin", "application/octet-stream");
309
+ REGISTER_MIME("blb", "application/x-blorb");
310
+ REGISTER_MIME("blorb", "application/x-blorb");
311
+ REGISTER_MIME("bmi", "application/vnd.bmi");
312
+ REGISTER_MIME("bmp", "image/bmp");
313
+ REGISTER_MIME("book", "application/vnd.framemaker");
314
+ REGISTER_MIME("box", "application/vnd.previewsystems.box");
315
+ REGISTER_MIME("boz", "application/x-bzip2");
316
+ REGISTER_MIME("bpk", "application/octet-stream");
317
+ REGISTER_MIME("btif", "image/prs.btif");
318
+ REGISTER_MIME("bz", "application/x-bzip");
319
+ REGISTER_MIME("bz2", "application/x-bzip2");
320
+ REGISTER_MIME("c", "text/x-c");
321
+ REGISTER_MIME("c11amc", "application/vnd.cluetrust.cartomobile-config");
322
+ REGISTER_MIME("c11amz", "application/vnd.cluetrust.cartomobile-config-pkg");
323
+ REGISTER_MIME("c4d", "application/vnd.clonk.c4group");
324
+ REGISTER_MIME("c4f", "application/vnd.clonk.c4group");
325
+ REGISTER_MIME("c4g", "application/vnd.clonk.c4group");
326
+ REGISTER_MIME("c4p", "application/vnd.clonk.c4group");
327
+ REGISTER_MIME("c4u", "application/vnd.clonk.c4group");
328
+ REGISTER_MIME("cab", "application/vnd.ms-cab-compressed");
329
+ REGISTER_MIME("caf", "audio/x-caf");
330
+ REGISTER_MIME("cap", "application/vnd.tcpdump.pcap");
331
+ REGISTER_MIME("car", "application/vnd.curl.car");
332
+ REGISTER_MIME("cat", "application/vnd.ms-pki.seccat");
333
+ REGISTER_MIME("cb7", "application/x-cbr");
334
+ REGISTER_MIME("cba", "application/x-cbr");
335
+ REGISTER_MIME("cbr", "application/x-cbr");
336
+ REGISTER_MIME("cbt", "application/x-cbr");
337
+ REGISTER_MIME("cbz", "application/x-cbr");
338
+ REGISTER_MIME("cc", "text/x-c");
339
+ REGISTER_MIME("cct", "application/x-director");
340
+ REGISTER_MIME("ccxml", "application/ccxml+xml");
341
+ REGISTER_MIME("cdbcmsg", "application/vnd.contact.cmsg");
342
+ REGISTER_MIME("cdf", "application/x-netcdf");
343
+ REGISTER_MIME("cdkey", "application/vnd.mediastation.cdkey");
344
+ REGISTER_MIME("cdmia", "application/cdmi-capability");
345
+ REGISTER_MIME("cdmic", "application/cdmi-container");
346
+ REGISTER_MIME("cdmid", "application/cdmi-domain");
347
+ REGISTER_MIME("cdmio", "application/cdmi-object");
348
+ REGISTER_MIME("cdmiq", "application/cdmi-queue");
349
+ REGISTER_MIME("cdx", "chemical/x-cdx");
350
+ REGISTER_MIME("cdxml", "application/vnd.chemdraw+xml");
351
+ REGISTER_MIME("cdy", "application/vnd.cinderella");
352
+ REGISTER_MIME("cer", "application/pkix-cert");
353
+ REGISTER_MIME("cfs", "application/x-cfs-compressed");
354
+ REGISTER_MIME("cgm", "image/cgm");
355
+ REGISTER_MIME("chat", "application/x-chat");
356
+ REGISTER_MIME("chm", "application/vnd.ms-htmlhelp");
357
+ REGISTER_MIME("chrt", "application/vnd.kde.kchart");
358
+ REGISTER_MIME("cif", "chemical/x-cif");
359
+ REGISTER_MIME("cii",
360
+ "application/vnd.anser-web-certificate-issue-initiation");
361
+ REGISTER_MIME("cil", "application/vnd.ms-artgalry");
362
+ REGISTER_MIME("cla", "application/vnd.claymore");
363
+ REGISTER_MIME("class", "application/java-vm");
364
+ REGISTER_MIME("clkk", "application/vnd.crick.clicker.keyboard");
365
+ REGISTER_MIME("clkp", "application/vnd.crick.clicker.palette");
366
+ REGISTER_MIME("clkt", "application/vnd.crick.clicker.template");
367
+ REGISTER_MIME("clkw", "application/vnd.crick.clicker.wordbank");
368
+ REGISTER_MIME("clkx", "application/vnd.crick.clicker");
369
+ REGISTER_MIME("clp", "application/x-msclip");
370
+ REGISTER_MIME("cmc", "application/vnd.cosmocaller");
371
+ REGISTER_MIME("cmdf", "chemical/x-cmdf");
372
+ REGISTER_MIME("cml", "chemical/x-cml");
373
+ REGISTER_MIME("cmp", "application/vnd.yellowriver-custom-menu");
374
+ REGISTER_MIME("cmx", "image/x-cmx");
375
+ REGISTER_MIME("cod", "application/vnd.rim.cod");
376
+ REGISTER_MIME("com", "application/x-msdownload");
377
+ REGISTER_MIME("conf", "text/plain");
378
+ REGISTER_MIME("cpio", "application/x-cpio");
379
+ REGISTER_MIME("cpp", "text/x-c");
380
+ REGISTER_MIME("cpt", "application/mac-compactpro");
381
+ REGISTER_MIME("crd", "application/x-mscardfile");
382
+ REGISTER_MIME("crl", "application/pkix-crl");
383
+ REGISTER_MIME("crt", "application/x-x509-ca-cert");
384
+ REGISTER_MIME("cryptonote", "application/vnd.rig.cryptonote");
385
+ REGISTER_MIME("csh", "application/x-csh");
386
+ REGISTER_MIME("csml", "chemical/x-csml");
387
+ REGISTER_MIME("csp", "application/vnd.commonspace");
388
+ REGISTER_MIME("css", "text/css");
389
+ REGISTER_MIME("cst", "application/x-director");
390
+ REGISTER_MIME("csv", "text/csv");
391
+ REGISTER_MIME("cu", "application/cu-seeme");
392
+ REGISTER_MIME("curl", "text/vnd.curl");
393
+ REGISTER_MIME("cww", "application/prs.cww");
394
+ REGISTER_MIME("cxt", "application/x-director");
395
+ REGISTER_MIME("cxx", "text/x-c");
396
+ REGISTER_MIME("dae", "model/vnd.collada+xml");
397
+ REGISTER_MIME("daf", "application/vnd.mobius.daf");
398
+ REGISTER_MIME("dart", "application/vnd.dart");
399
+ REGISTER_MIME("dataless", "application/vnd.fdsn.seed");
400
+ REGISTER_MIME("davmount", "application/davmount+xml");
401
+ REGISTER_MIME("dbk", "application/docbook+xml");
402
+ REGISTER_MIME("dcr", "application/x-director");
403
+ REGISTER_MIME("dcurl", "text/vnd.curl.dcurl");
404
+ REGISTER_MIME("dd2", "application/vnd.oma.dd2+xml");
405
+ REGISTER_MIME("ddd", "application/vnd.fujixerox.ddd");
406
+ REGISTER_MIME("deb", "application/x-debian-package");
407
+ REGISTER_MIME("def", "text/plain");
408
+ REGISTER_MIME("deploy", "application/octet-stream");
409
+ REGISTER_MIME("der", "application/x-x509-ca-cert");
410
+ REGISTER_MIME("dfac", "application/vnd.dreamfactory");
411
+ REGISTER_MIME("dgc", "application/x-dgc-compressed");
412
+ REGISTER_MIME("dic", "text/x-c");
413
+ REGISTER_MIME("dir", "application/x-director");
414
+ REGISTER_MIME("dis", "application/vnd.mobius.dis");
415
+ REGISTER_MIME("dist", "application/octet-stream");
416
+ REGISTER_MIME("distz", "application/octet-stream");
417
+ REGISTER_MIME("djv", "image/vnd.djvu");
418
+ REGISTER_MIME("djvu", "image/vnd.djvu");
419
+ REGISTER_MIME("dll", "application/x-msdownload");
420
+ REGISTER_MIME("dmg", "application/x-apple-diskimage");
421
+ REGISTER_MIME("dmp", "application/vnd.tcpdump.pcap");
422
+ REGISTER_MIME("dms", "application/octet-stream");
423
+ REGISTER_MIME("dna", "application/vnd.dna");
424
+ REGISTER_MIME("doc", "application/msword");
425
+ REGISTER_MIME("docm", "application/vnd.ms-word.document.macroenabled.12");
426
+ REGISTER_MIME("docx", "application/"
427
+ "vnd.openxmlformats-officedocument.wordprocessingml."
428
+ "document");
429
+ REGISTER_MIME("dot", "application/msword");
430
+ REGISTER_MIME("dotm", "application/vnd.ms-word.template.macroenabled.12");
431
+ REGISTER_MIME("dotx", "application/"
432
+ "vnd.openxmlformats-officedocument.wordprocessingml."
433
+ "template");
434
+ REGISTER_MIME("dp", "application/vnd.osgi.dp");
435
+ REGISTER_MIME("dpg", "application/vnd.dpgraph");
436
+ REGISTER_MIME("dra", "audio/vnd.dra");
437
+ REGISTER_MIME("dsc", "text/prs.lines.tag");
438
+ REGISTER_MIME("dssc", "application/dssc+der");
439
+ REGISTER_MIME("dtb", "application/x-dtbook+xml");
440
+ REGISTER_MIME("dtd", "application/xml-dtd");
441
+ REGISTER_MIME("dts", "audio/vnd.dts");
442
+ REGISTER_MIME("dtshd", "audio/vnd.dts.hd");
443
+ REGISTER_MIME("dump", "application/octet-stream");
444
+ REGISTER_MIME("dvb", "video/vnd.dvb.file");
445
+ REGISTER_MIME("dvi", "application/x-dvi");
446
+ REGISTER_MIME("dwf", "model/vnd.dwf");
447
+ REGISTER_MIME("dwg", "image/vnd.dwg");
448
+ REGISTER_MIME("dxf", "image/vnd.dxf");
449
+ REGISTER_MIME("dxp", "application/vnd.spotfire.dxp");
450
+ REGISTER_MIME("dxr", "application/x-director");
451
+ REGISTER_MIME("ecelp4800", "audio/vnd.nuera.ecelp4800");
452
+ REGISTER_MIME("ecelp7470", "audio/vnd.nuera.ecelp7470");
453
+ REGISTER_MIME("ecelp9600", "audio/vnd.nuera.ecelp9600");
454
+ REGISTER_MIME("ecma", "application/ecmascript");
455
+ REGISTER_MIME("edm", "application/vnd.novadigm.edm");
456
+ REGISTER_MIME("edx", "application/vnd.novadigm.edx");
457
+ REGISTER_MIME("efif", "application/vnd.picsel");
458
+ REGISTER_MIME("ei6", "application/vnd.pg.osasli");
459
+ REGISTER_MIME("elc", "application/octet-stream");
460
+ REGISTER_MIME("emf", "application/x-msmetafile");
461
+ REGISTER_MIME("eml", "message/rfc822");
462
+ REGISTER_MIME("emma", "application/emma+xml");
463
+ REGISTER_MIME("emz", "application/x-msmetafile");
464
+ REGISTER_MIME("eol", "audio/vnd.digital-winds");
465
+ REGISTER_MIME("eot", "application/vnd.ms-fontobject");
466
+ REGISTER_MIME("eps", "application/postscript");
467
+ REGISTER_MIME("epub", "application/epub+zip");
468
+ REGISTER_MIME("es3", "application/vnd.eszigno3+xml");
469
+ REGISTER_MIME("esa", "application/vnd.osgi.subsystem");
470
+ REGISTER_MIME("esf", "application/vnd.epson.esf");
471
+ REGISTER_MIME("et3", "application/vnd.eszigno3+xml");
472
+ REGISTER_MIME("etx", "text/x-setext");
473
+ REGISTER_MIME("eva", "application/x-eva");
474
+ REGISTER_MIME("evy", "application/x-envoy");
475
+ REGISTER_MIME("exe", "application/x-msdownload");
476
+ REGISTER_MIME("exi", "application/exi");
477
+ REGISTER_MIME("ext", "application/vnd.novadigm.ext");
478
+ REGISTER_MIME("ez", "application/andrew-inset");
479
+ REGISTER_MIME("ez2", "application/vnd.ezpix-album");
480
+ REGISTER_MIME("ez3", "application/vnd.ezpix-package");
481
+ REGISTER_MIME("f", "text/x-fortran");
482
+ REGISTER_MIME("f4v", "video/x-f4v");
483
+ REGISTER_MIME("f77", "text/x-fortran");
484
+ REGISTER_MIME("f90", "text/x-fortran");
485
+ REGISTER_MIME("fbs", "image/vnd.fastbidsheet");
486
+ REGISTER_MIME("fcdt", "application/vnd.adobe.formscentral.fcdt");
487
+ REGISTER_MIME("fcs", "application/vnd.isac.fcs");
488
+ REGISTER_MIME("fdf", "application/vnd.fdf");
489
+ REGISTER_MIME("fe_launch", "application/vnd.denovo.fcselayout-link");
490
+ REGISTER_MIME("fg5", "application/vnd.fujitsu.oasysgp");
491
+ REGISTER_MIME("fgd", "application/x-director");
492
+ REGISTER_MIME("fh", "image/x-freehand");
493
+ REGISTER_MIME("fh4", "image/x-freehand");
494
+ REGISTER_MIME("fh5", "image/x-freehand");
495
+ REGISTER_MIME("fh7", "image/x-freehand");
496
+ REGISTER_MIME("fhc", "image/x-freehand");
497
+ REGISTER_MIME("fig", "application/x-xfig");
498
+ REGISTER_MIME("flac", "audio/x-flac");
499
+ REGISTER_MIME("fli", "video/x-fli");
500
+ REGISTER_MIME("flo", "application/vnd.micrografx.flo");
501
+ REGISTER_MIME("flv", "video/x-flv");
502
+ REGISTER_MIME("flw", "application/vnd.kde.kivio");
503
+ REGISTER_MIME("flx", "text/vnd.fmi.flexstor");
504
+ REGISTER_MIME("fly", "text/vnd.fly");
505
+ REGISTER_MIME("fm", "application/vnd.framemaker");
506
+ REGISTER_MIME("fnc", "application/vnd.frogans.fnc");
507
+ REGISTER_MIME("for", "text/x-fortran");
508
+ REGISTER_MIME("fpx", "image/vnd.fpx");
509
+ REGISTER_MIME("frame", "application/vnd.framemaker");
510
+ REGISTER_MIME("fsc", "application/vnd.fsc.weblaunch");
511
+ REGISTER_MIME("fst", "image/vnd.fst");
512
+ REGISTER_MIME("ftc", "application/vnd.fluxtime.clip");
513
+ REGISTER_MIME("fti", "application/vnd.anser-web-funds-transfer-initiation");
514
+ REGISTER_MIME("fvt", "video/vnd.fvt");
515
+ REGISTER_MIME("fxp", "application/vnd.adobe.fxp");
516
+ REGISTER_MIME("fxpl", "application/vnd.adobe.fxp");
517
+ REGISTER_MIME("fzs", "application/vnd.fuzzysheet");
518
+ REGISTER_MIME("g2w", "application/vnd.geoplan");
519
+ REGISTER_MIME("g3", "image/g3fax");
520
+ REGISTER_MIME("g3w", "application/vnd.geospace");
521
+ REGISTER_MIME("gac", "application/vnd.groove-account");
522
+ REGISTER_MIME("gam", "application/x-tads");
523
+ REGISTER_MIME("gbr", "application/rpki-ghostbusters");
524
+ REGISTER_MIME("gca", "application/x-gca-compressed");
525
+ REGISTER_MIME("gdl", "model/vnd.gdl");
526
+ REGISTER_MIME("geo", "application/vnd.dynageo");
527
+ REGISTER_MIME("gex", "application/vnd.geometry-explorer");
528
+ REGISTER_MIME("ggb", "application/vnd.geogebra.file");
529
+ REGISTER_MIME("ggt", "application/vnd.geogebra.tool");
530
+ REGISTER_MIME("ghf", "application/vnd.groove-help");
531
+ REGISTER_MIME("gif", "image/gif");
532
+ REGISTER_MIME("gim", "application/vnd.groove-identity-message");
533
+ REGISTER_MIME("gml", "application/gml+xml");
534
+ REGISTER_MIME("gmx", "application/vnd.gmx");
535
+ REGISTER_MIME("gnumeric", "application/x-gnumeric");
536
+ REGISTER_MIME("gph", "application/vnd.flographit");
537
+ REGISTER_MIME("gpx", "application/gpx+xml");
538
+ REGISTER_MIME("gqf", "application/vnd.grafeq");
539
+ REGISTER_MIME("gqs", "application/vnd.grafeq");
540
+ REGISTER_MIME("gram", "application/srgs");
541
+ REGISTER_MIME("gramps", "application/x-gramps-xml");
542
+ REGISTER_MIME("gre", "application/vnd.geometry-explorer");
543
+ REGISTER_MIME("grv", "application/vnd.groove-injector");
544
+ REGISTER_MIME("grxml", "application/srgs+xml");
545
+ REGISTER_MIME("gsf", "application/x-font-ghostscript");
546
+ REGISTER_MIME("gtar", "application/x-gtar");
547
+ REGISTER_MIME("gtm", "application/vnd.groove-tool-message");
548
+ REGISTER_MIME("gtw", "model/vnd.gtw");
549
+ REGISTER_MIME("gv", "text/vnd.graphviz");
550
+ REGISTER_MIME("gxf", "application/gxf");
551
+ REGISTER_MIME("gxt", "application/vnd.geonext");
552
+ REGISTER_MIME("h", "text/x-c");
553
+ REGISTER_MIME("h261", "video/h261");
554
+ REGISTER_MIME("h263", "video/h263");
555
+ REGISTER_MIME("h264", "video/h264");
556
+ REGISTER_MIME("hal", "application/vnd.hal+xml");
557
+ REGISTER_MIME("hbci", "application/vnd.hbci");
558
+ REGISTER_MIME("hdf", "application/x-hdf");
559
+ REGISTER_MIME("hh", "text/x-c");
560
+ REGISTER_MIME("hlp", "application/winhlp");
561
+ REGISTER_MIME("hpgl", "application/vnd.hp-hpgl");
562
+ REGISTER_MIME("hpid", "application/vnd.hp-hpid");
563
+ REGISTER_MIME("hps", "application/vnd.hp-hps");
564
+ REGISTER_MIME("hqx", "application/mac-binhex40");
565
+ REGISTER_MIME("htke", "application/vnd.kenameaapp");
566
+ REGISTER_MIME("htm", "text/html");
567
+ REGISTER_MIME("html", "text/html");
568
+ REGISTER_MIME("hvd", "application/vnd.yamaha.hv-dic");
569
+ REGISTER_MIME("hvp", "application/vnd.yamaha.hv-voice");
570
+ REGISTER_MIME("hvs", "application/vnd.yamaha.hv-script");
571
+ REGISTER_MIME("i2g", "application/vnd.intergeo");
572
+ REGISTER_MIME("icc", "application/vnd.iccprofile");
573
+ REGISTER_MIME("ice", "x-conference/x-cooltalk");
574
+ REGISTER_MIME("icm", "application/vnd.iccprofile");
575
+ REGISTER_MIME("ico", "image/x-icon");
576
+ REGISTER_MIME("ics", "text/calendar");
577
+ REGISTER_MIME("ief", "image/ief");
578
+ REGISTER_MIME("ifb", "text/calendar");
579
+ REGISTER_MIME("ifm", "application/vnd.shana.informed.formdata");
580
+ REGISTER_MIME("iges", "model/iges");
581
+ REGISTER_MIME("igl", "application/vnd.igloader");
582
+ REGISTER_MIME("igm", "application/vnd.insors.igm");
583
+ REGISTER_MIME("igs", "model/iges");
584
+ REGISTER_MIME("igx", "application/vnd.micrografx.igx");
585
+ REGISTER_MIME("iif", "application/vnd.shana.informed.interchange");
586
+ REGISTER_MIME("imp", "application/vnd.accpac.simply.imp");
587
+ REGISTER_MIME("ims", "application/vnd.ms-ims");
588
+ REGISTER_MIME("in", "text/plain");
589
+ REGISTER_MIME("ink", "application/inkml+xml");
590
+ REGISTER_MIME("inkml", "application/inkml+xml");
591
+ REGISTER_MIME("install", "application/x-install-instructions");
592
+ REGISTER_MIME("iota", "application/vnd.astraea-software.iota");
593
+ REGISTER_MIME("ipfix", "application/ipfix");
594
+ REGISTER_MIME("ipk", "application/vnd.shana.informed.package");
595
+ REGISTER_MIME("irm", "application/vnd.ibm.rights-management");
596
+ REGISTER_MIME("irp", "application/vnd.irepository.package+xml");
597
+ REGISTER_MIME("iso", "application/x-iso9660-image");
598
+ REGISTER_MIME("itp", "application/vnd.shana.informed.formtemplate");
599
+ REGISTER_MIME("ivp", "application/vnd.immervision-ivp");
600
+ REGISTER_MIME("ivu", "application/vnd.immervision-ivu");
601
+ REGISTER_MIME("jad", "text/vnd.sun.j2me.app-descriptor");
602
+ REGISTER_MIME("jam", "application/vnd.jam");
603
+ REGISTER_MIME("jar", "application/java-archive");
604
+ REGISTER_MIME("java", "text/x-java-source");
605
+ REGISTER_MIME("jisp", "application/vnd.jisp");
606
+ REGISTER_MIME("jlt", "application/vnd.hp-jlyt");
607
+ REGISTER_MIME("jnlp", "application/x-java-jnlp-file");
608
+ REGISTER_MIME("joda", "application/vnd.joost.joda-archive");
609
+ REGISTER_MIME("jpe", "image/jpeg");
610
+ REGISTER_MIME("jpeg", "image/jpeg");
611
+ REGISTER_MIME("jpg", "image/jpeg");
612
+ REGISTER_MIME("jpgm", "video/jpm");
613
+ REGISTER_MIME("jpgv", "video/jpeg");
614
+ REGISTER_MIME("jpm", "video/jpm");
615
+ REGISTER_MIME("js", "application/javascript");
616
+ REGISTER_MIME("json", "application/json");
617
+ REGISTER_MIME("jsonml", "application/jsonml+json");
618
+ REGISTER_MIME("kar", "audio/midi");
619
+ REGISTER_MIME("karbon", "application/vnd.kde.karbon");
620
+ REGISTER_MIME("kfo", "application/vnd.kde.kformula");
621
+ REGISTER_MIME("kia", "application/vnd.kidspiration");
622
+ REGISTER_MIME("kml", "application/vnd.google-earth.kml+xml");
623
+ REGISTER_MIME("kmz", "application/vnd.google-earth.kmz");
624
+ REGISTER_MIME("kne", "application/vnd.kinar");
625
+ REGISTER_MIME("knp", "application/vnd.kinar");
626
+ REGISTER_MIME("kon", "application/vnd.kde.kontour");
627
+ REGISTER_MIME("kpr", "application/vnd.kde.kpresenter");
628
+ REGISTER_MIME("kpt", "application/vnd.kde.kpresenter");
629
+ REGISTER_MIME("kpxx", "application/vnd.ds-keypoint");
630
+ REGISTER_MIME("ksp", "application/vnd.kde.kspread");
631
+ REGISTER_MIME("ktr", "application/vnd.kahootz");
632
+ REGISTER_MIME("ktx", "image/ktx");
633
+ REGISTER_MIME("ktz", "application/vnd.kahootz");
634
+ REGISTER_MIME("kwd", "application/vnd.kde.kword");
635
+ REGISTER_MIME("kwt", "application/vnd.kde.kword");
636
+ REGISTER_MIME("lasxml", "application/vnd.las.las+xml");
637
+ REGISTER_MIME("latex", "application/x-latex");
638
+ REGISTER_MIME("lbd", "application/vnd.llamagraphics.life-balance.desktop");
639
+ REGISTER_MIME("lbe",
640
+ "application/vnd.llamagraphics.life-balance.exchange+xml");
641
+ REGISTER_MIME("les", "application/vnd.hhe.lesson-player");
642
+ REGISTER_MIME("lha", "application/x-lzh-compressed");
643
+ REGISTER_MIME("link66", "application/vnd.route66.link66+xml");
644
+ REGISTER_MIME("list", "text/plain");
645
+ REGISTER_MIME("list3820", "application/vnd.ibm.modcap");
646
+ REGISTER_MIME("listafp", "application/vnd.ibm.modcap");
647
+ REGISTER_MIME("lnk", "application/x-ms-shortcut");
648
+ REGISTER_MIME("log", "text/plain");
649
+ REGISTER_MIME("lostxml", "application/lost+xml");
650
+ REGISTER_MIME("lrf", "application/octet-stream");
651
+ REGISTER_MIME("lrm", "application/vnd.ms-lrm");
652
+ REGISTER_MIME("ltf", "application/vnd.frogans.ltf");
653
+ REGISTER_MIME("lvp", "audio/vnd.lucent.voice");
654
+ REGISTER_MIME("lwp", "application/vnd.lotus-wordpro");
655
+ REGISTER_MIME("lzh", "application/x-lzh-compressed");
656
+ REGISTER_MIME("m13", "application/x-msmediaview");
657
+ REGISTER_MIME("m14", "application/x-msmediaview");
658
+ REGISTER_MIME("m1v", "video/mpeg");
659
+ REGISTER_MIME("m21", "application/mp21");
660
+ REGISTER_MIME("m2a", "audio/mpeg");
661
+ REGISTER_MIME("m2v", "video/mpeg");
662
+ REGISTER_MIME("m3a", "audio/mpeg");
663
+ REGISTER_MIME("m3u", "audio/x-mpegurl");
664
+ REGISTER_MIME("m3u8", "application/vnd.apple.mpegurl");
665
+ REGISTER_MIME("m4a", "audio/mp4");
666
+ REGISTER_MIME("m4u", "video/vnd.mpegurl");
667
+ REGISTER_MIME("m4v", "video/x-m4v");
668
+ REGISTER_MIME("ma", "application/mathematica");
669
+ REGISTER_MIME("mads", "application/mads+xml");
670
+ REGISTER_MIME("mag", "application/vnd.ecowin.chart");
671
+ REGISTER_MIME("maker", "application/vnd.framemaker");
672
+ REGISTER_MIME("man", "text/troff");
673
+ REGISTER_MIME("mar", "application/octet-stream");
674
+ REGISTER_MIME("mathml", "application/mathml+xml");
675
+ REGISTER_MIME("mb", "application/mathematica");
676
+ REGISTER_MIME("mbk", "application/vnd.mobius.mbk");
677
+ REGISTER_MIME("mbox", "application/mbox");
678
+ REGISTER_MIME("mc1", "application/vnd.medcalcdata");
679
+ REGISTER_MIME("mcd", "application/vnd.mcd");
680
+ REGISTER_MIME("mcurl", "text/vnd.curl.mcurl");
681
+ REGISTER_MIME("mdb", "application/x-msaccess");
682
+ REGISTER_MIME("mdi", "image/vnd.ms-modi");
683
+ REGISTER_MIME("me", "text/troff");
684
+ REGISTER_MIME("mesh", "model/mesh");
685
+ REGISTER_MIME("meta4", "application/metalink4+xml");
686
+ REGISTER_MIME("metalink", "application/metalink+xml");
687
+ REGISTER_MIME("mets", "application/mets+xml");
688
+ REGISTER_MIME("mfm", "application/vnd.mfmp");
689
+ REGISTER_MIME("mft", "application/rpki-manifest");
690
+ REGISTER_MIME("mgp", "application/vnd.osgeo.mapguide.package");
691
+ REGISTER_MIME("mgz", "application/vnd.proteus.magazine");
692
+ REGISTER_MIME("mid", "audio/midi");
693
+ REGISTER_MIME("midi", "audio/midi");
694
+ REGISTER_MIME("mie", "application/x-mie");
695
+ REGISTER_MIME("mif", "application/vnd.mif");
696
+ REGISTER_MIME("mime", "message/rfc822");
697
+ REGISTER_MIME("mj2", "video/mj2");
698
+ REGISTER_MIME("mjp2", "video/mj2");
699
+ REGISTER_MIME("mk3d", "video/x-matroska");
700
+ REGISTER_MIME("mka", "audio/x-matroska");
701
+ REGISTER_MIME("mks", "video/x-matroska");
702
+ REGISTER_MIME("mkv", "video/x-matroska");
703
+ REGISTER_MIME("mlp", "application/vnd.dolby.mlp");
704
+ REGISTER_MIME("mmd", "application/vnd.chipnuts.karaoke-mmd");
705
+ REGISTER_MIME("mmf", "application/vnd.smaf");
706
+ REGISTER_MIME("mmr", "image/vnd.fujixerox.edmics-mmr");
707
+ REGISTER_MIME("mng", "video/x-mng");
708
+ REGISTER_MIME("mny", "application/x-msmoney");
709
+ REGISTER_MIME("mobi", "application/x-mobipocket-ebook");
710
+ REGISTER_MIME("mods", "application/mods+xml");
711
+ REGISTER_MIME("mov", "video/quicktime");
712
+ REGISTER_MIME("movie", "video/x-sgi-movie");
713
+ REGISTER_MIME("mp2", "audio/mpeg");
714
+ REGISTER_MIME("mp21", "application/mp21");
715
+ REGISTER_MIME("mp2a", "audio/mpeg");
716
+ REGISTER_MIME("mp3", "audio/mpeg");
717
+ REGISTER_MIME("mp4", "video/mp4");
718
+ REGISTER_MIME("mp4a", "audio/mp4");
719
+ REGISTER_MIME("mp4s", "application/mp4");
720
+ REGISTER_MIME("mp4v", "video/mp4");
721
+ REGISTER_MIME("mpc", "application/vnd.mophun.certificate");
722
+ REGISTER_MIME("mpe", "video/mpeg");
723
+ REGISTER_MIME("mpeg", "video/mpeg");
724
+ REGISTER_MIME("mpg", "video/mpeg");
725
+ REGISTER_MIME("mpg4", "video/mp4");
726
+ REGISTER_MIME("mpga", "audio/mpeg");
727
+ REGISTER_MIME("mpkg", "application/vnd.apple.installer+xml");
728
+ REGISTER_MIME("mpm", "application/vnd.blueice.multipass");
729
+ REGISTER_MIME("mpn", "application/vnd.mophun.application");
730
+ REGISTER_MIME("mpp", "application/vnd.ms-project");
731
+ REGISTER_MIME("mpt", "application/vnd.ms-project");
732
+ REGISTER_MIME("mpy", "application/vnd.ibm.minipay");
733
+ REGISTER_MIME("mqy", "application/vnd.mobius.mqy");
734
+ REGISTER_MIME("mrc", "application/marc");
735
+ REGISTER_MIME("mrcx", "application/marcxml+xml");
736
+ REGISTER_MIME("ms", "text/troff");
737
+ REGISTER_MIME("mscml", "application/mediaservercontrol+xml");
738
+ REGISTER_MIME("mseed", "application/vnd.fdsn.mseed");
739
+ REGISTER_MIME("mseq", "application/vnd.mseq");
740
+ REGISTER_MIME("msf", "application/vnd.epson.msf");
741
+ REGISTER_MIME("msh", "model/mesh");
742
+ REGISTER_MIME("msi", "application/x-msdownload");
743
+ REGISTER_MIME("msl", "application/vnd.mobius.msl");
744
+ REGISTER_MIME("msty", "application/vnd.muvee.style");
745
+ REGISTER_MIME("mts", "model/vnd.mts");
746
+ REGISTER_MIME("mus", "application/vnd.musician");
747
+ REGISTER_MIME("musicxml", "application/vnd.recordare.musicxml+xml");
748
+ REGISTER_MIME("mvb", "application/x-msmediaview");
749
+ REGISTER_MIME("mwf", "application/vnd.mfer");
750
+ REGISTER_MIME("mxf", "application/mxf");
751
+ REGISTER_MIME("mxl", "application/vnd.recordare.musicxml");
752
+ REGISTER_MIME("mxml", "application/xv+xml");
753
+ REGISTER_MIME("mxs", "application/vnd.triscape.mxs");
754
+ REGISTER_MIME("mxu", "video/vnd.mpegurl");
755
+ REGISTER_MIME("n-gage", "application/vnd.nokia.n-gage.symbian.install");
756
+ REGISTER_MIME("n3", "text/n3");
757
+ REGISTER_MIME("nb", "application/mathematica");
758
+ REGISTER_MIME("nbp", "application/vnd.wolfram.player");
759
+ REGISTER_MIME("nc", "application/x-netcdf");
760
+ REGISTER_MIME("ncx", "application/x-dtbncx+xml");
761
+ REGISTER_MIME("nfo", "text/x-nfo");
762
+ REGISTER_MIME("ngdat", "application/vnd.nokia.n-gage.data");
763
+ REGISTER_MIME("nitf", "application/vnd.nitf");
764
+ REGISTER_MIME("nlu", "application/vnd.neurolanguage.nlu");
765
+ REGISTER_MIME("nml", "application/vnd.enliven");
766
+ REGISTER_MIME("nnd", "application/vnd.noblenet-directory");
767
+ REGISTER_MIME("nns", "application/vnd.noblenet-sealer");
768
+ REGISTER_MIME("nnw", "application/vnd.noblenet-web");
769
+ REGISTER_MIME("npx", "image/vnd.net-fpx");
770
+ REGISTER_MIME("nsc", "application/x-conference");
771
+ REGISTER_MIME("nsf", "application/vnd.lotus-notes");
772
+ REGISTER_MIME("ntf", "application/vnd.nitf");
773
+ REGISTER_MIME("nzb", "application/x-nzb");
774
+ REGISTER_MIME("oa2", "application/vnd.fujitsu.oasys2");
775
+ REGISTER_MIME("oa3", "application/vnd.fujitsu.oasys3");
776
+ REGISTER_MIME("oas", "application/vnd.fujitsu.oasys");
777
+ REGISTER_MIME("obd", "application/x-msbinder");
778
+ REGISTER_MIME("obj", "application/x-tgif");
779
+ REGISTER_MIME("oda", "application/oda");
780
+ REGISTER_MIME("odb", "application/vnd.oasis.opendocument.database");
781
+ REGISTER_MIME("odc", "application/vnd.oasis.opendocument.chart");
782
+ REGISTER_MIME("odf", "application/vnd.oasis.opendocument.formula");
783
+ REGISTER_MIME("odft", "application/vnd.oasis.opendocument.formula-template");
784
+ REGISTER_MIME("odg", "application/vnd.oasis.opendocument.graphics");
785
+ REGISTER_MIME("odi", "application/vnd.oasis.opendocument.image");
786
+ REGISTER_MIME("odm", "application/vnd.oasis.opendocument.text-master");
787
+ REGISTER_MIME("odp", "application/vnd.oasis.opendocument.presentation");
788
+ REGISTER_MIME("ods", "application/vnd.oasis.opendocument.spreadsheet");
789
+ REGISTER_MIME("odt", "application/vnd.oasis.opendocument.text");
790
+ REGISTER_MIME("oga", "audio/ogg");
791
+ REGISTER_MIME("ogg", "audio/ogg");
792
+ REGISTER_MIME("ogv", "video/ogg");
793
+ REGISTER_MIME("ogx", "application/ogg");
794
+ REGISTER_MIME("omdoc", "application/omdoc+xml");
795
+ REGISTER_MIME("onepkg", "application/onenote");
796
+ REGISTER_MIME("onetmp", "application/onenote");
797
+ REGISTER_MIME("onetoc", "application/onenote");
798
+ REGISTER_MIME("onetoc2", "application/onenote");
799
+ REGISTER_MIME("opf", "application/oebps-package+xml");
800
+ REGISTER_MIME("opml", "text/x-opml");
801
+ REGISTER_MIME("oprc", "application/vnd.palm");
802
+ REGISTER_MIME("org", "application/vnd.lotus-organizer");
803
+ REGISTER_MIME("osf", "application/vnd.yamaha.openscoreformat");
804
+ REGISTER_MIME("osfpvg", "application/vnd.yamaha.openscoreformat.osfpvg+xml");
805
+ REGISTER_MIME("otc", "application/vnd.oasis.opendocument.chart-template");
806
+ REGISTER_MIME("otf", "application/x-font-otf");
807
+ REGISTER_MIME("otg", "application/vnd.oasis.opendocument.graphics-template");
808
+ REGISTER_MIME("oth", "application/vnd.oasis.opendocument.text-web");
809
+ REGISTER_MIME("oti", "application/vnd.oasis.opendocument.image-template");
810
+ REGISTER_MIME("otp",
811
+ "application/vnd.oasis.opendocument.presentation-template");
812
+ REGISTER_MIME("ots",
813
+ "application/vnd.oasis.opendocument.spreadsheet-template");
814
+ REGISTER_MIME("ott", "application/vnd.oasis.opendocument.text-template");
815
+ REGISTER_MIME("oxps", "application/oxps");
816
+ REGISTER_MIME("oxt", "application/vnd.openofficeorg.extension");
817
+ REGISTER_MIME("p", "text/x-pascal");
818
+ REGISTER_MIME("p10", "application/pkcs10");
819
+ REGISTER_MIME("p12", "application/x-pkcs12");
820
+ REGISTER_MIME("p7b", "application/x-pkcs7-certificates");
821
+ REGISTER_MIME("p7c", "application/pkcs7-mime");
822
+ REGISTER_MIME("p7m", "application/pkcs7-mime");
823
+ REGISTER_MIME("p7r", "application/x-pkcs7-certreqresp");
824
+ REGISTER_MIME("p7s", "application/pkcs7-signature");
825
+ REGISTER_MIME("p8", "application/pkcs8");
826
+ REGISTER_MIME("pas", "text/x-pascal");
827
+ REGISTER_MIME("paw", "application/vnd.pawaafile");
828
+ REGISTER_MIME("pbd", "application/vnd.powerbuilder6");
829
+ REGISTER_MIME("pbm", "image/x-portable-bitmap");
830
+ REGISTER_MIME("pcap", "application/vnd.tcpdump.pcap");
831
+ REGISTER_MIME("pcf", "application/x-font-pcf");
832
+ REGISTER_MIME("pcl", "application/vnd.hp-pcl");
833
+ REGISTER_MIME("pclxl", "application/vnd.hp-pclxl");
834
+ REGISTER_MIME("pct", "image/x-pict");
835
+ REGISTER_MIME("pcurl", "application/vnd.curl.pcurl");
836
+ REGISTER_MIME("pcx", "image/x-pcx");
837
+ REGISTER_MIME("pdb", "application/vnd.palm");
838
+ REGISTER_MIME("pdf", "application/pdf");
839
+ REGISTER_MIME("pfa", "application/x-font-type1");
840
+ REGISTER_MIME("pfb", "application/x-font-type1");
841
+ REGISTER_MIME("pfm", "application/x-font-type1");
842
+ REGISTER_MIME("pfr", "application/font-tdpfr");
843
+ REGISTER_MIME("pfx", "application/x-pkcs12");
844
+ REGISTER_MIME("pgm", "image/x-portable-graymap");
845
+ REGISTER_MIME("pgn", "application/x-chess-pgn");
846
+ REGISTER_MIME("pgp", "application/pgp-encrypted");
847
+ REGISTER_MIME("pic", "image/x-pict");
848
+ REGISTER_MIME("pkg", "application/octet-stream");
849
+ REGISTER_MIME("pki", "application/pkixcmp");
850
+ REGISTER_MIME("pkipath", "application/pkix-pkipath");
851
+ REGISTER_MIME("plb", "application/vnd.3gpp.pic-bw-large");
852
+ REGISTER_MIME("plc", "application/vnd.mobius.plc");
853
+ REGISTER_MIME("plf", "application/vnd.pocketlearn");
854
+ REGISTER_MIME("pls", "application/pls+xml");
855
+ REGISTER_MIME("pml", "application/vnd.ctc-posml");
856
+ REGISTER_MIME("png", "image/png");
857
+ REGISTER_MIME("pnm", "image/x-portable-anymap");
858
+ REGISTER_MIME("portpkg", "application/vnd.macports.portpkg");
859
+ REGISTER_MIME("pot", "application/vnd.ms-powerpoint");
860
+ REGISTER_MIME("potm",
861
+ "application/vnd.ms-powerpoint.template.macroenabled.12");
862
+ REGISTER_MIME(
863
+ "potx",
864
+ "application/vnd.openxmlformats-officedocument.presentationml.template");
865
+ REGISTER_MIME("ppam", "application/vnd.ms-powerpoint.addin.macroenabled.12");
866
+ REGISTER_MIME("ppd", "application/vnd.cups-ppd");
867
+ REGISTER_MIME("ppm", "image/x-portable-pixmap");
868
+ REGISTER_MIME("pps", "application/vnd.ms-powerpoint");
869
+ REGISTER_MIME("ppsm",
870
+ "application/vnd.ms-powerpoint.slideshow.macroenabled.12");
871
+ REGISTER_MIME(
872
+ "ppsx",
873
+ "application/vnd.openxmlformats-officedocument.presentationml.slideshow");
874
+ REGISTER_MIME("ppt", "application/vnd.ms-powerpoint");
875
+ REGISTER_MIME("pptm",
876
+ "application/vnd.ms-powerpoint.presentation.macroenabled.12");
877
+ REGISTER_MIME("pqa", "application/vnd.palm");
878
+ REGISTER_MIME("prc", "application/x-mobipocket-ebook");
879
+ REGISTER_MIME("pre", "application/vnd.lotus-freelance");
880
+ REGISTER_MIME("prf", "application/pics-rules");
881
+ REGISTER_MIME("ps", "application/postscript");
882
+ REGISTER_MIME("psb", "application/vnd.3gpp.pic-bw-small");
883
+ REGISTER_MIME("psd", "image/vnd.adobe.photoshop");
884
+ REGISTER_MIME("psf", "application/x-font-linux-psf");
885
+ REGISTER_MIME("pskcxml", "application/pskc+xml");
886
+ REGISTER_MIME("ptid", "application/vnd.pvi.ptid1");
887
+ REGISTER_MIME("pub", "application/x-mspublisher");
888
+ REGISTER_MIME("pvb", "application/vnd.3gpp.pic-bw-var");
889
+ REGISTER_MIME("pwn", "application/vnd.3m.post-it-notes");
890
+ REGISTER_MIME("pya", "audio/vnd.ms-playready.media.pya");
891
+ REGISTER_MIME("pyv", "video/vnd.ms-playready.media.pyv");
892
+ REGISTER_MIME("qam", "application/vnd.epson.quickanime");
893
+ REGISTER_MIME("qbo", "application/vnd.intu.qbo");
894
+ REGISTER_MIME("qfx", "application/vnd.intu.qfx");
895
+ REGISTER_MIME("qps", "application/vnd.publishare-delta-tree");
896
+ REGISTER_MIME("qt", "video/quicktime");
897
+ REGISTER_MIME("qwd", "application/vnd.quark.quarkxpress");
898
+ REGISTER_MIME("qwt", "application/vnd.quark.quarkxpress");
899
+ REGISTER_MIME("qxb", "application/vnd.quark.quarkxpress");
900
+ REGISTER_MIME("qxd", "application/vnd.quark.quarkxpress");
901
+ REGISTER_MIME("qxl", "application/vnd.quark.quarkxpress");
902
+ REGISTER_MIME("qxt", "application/vnd.quark.quarkxpress");
903
+ REGISTER_MIME("ra", "audio/x-pn-realaudio");
904
+ REGISTER_MIME("ram", "audio/x-pn-realaudio");
905
+ REGISTER_MIME("rar", "application/x-rar-compressed");
906
+ REGISTER_MIME("ras", "image/x-cmu-raster");
907
+ REGISTER_MIME("rcprofile", "application/vnd.ipunplugged.rcprofile");
908
+ REGISTER_MIME("rdf", "application/rdf+xml");
909
+ REGISTER_MIME("rdz", "application/vnd.data-vision.rdz");
910
+ REGISTER_MIME("rep", "application/vnd.businessobjects");
911
+ REGISTER_MIME("res", "application/x-dtbresource+xml");
912
+ REGISTER_MIME("rgb", "image/x-rgb");
913
+ REGISTER_MIME("rif", "application/reginfo+xml");
914
+ REGISTER_MIME("rip", "audio/vnd.rip");
915
+ REGISTER_MIME("ris", "application/x-research-info-systems");
916
+ REGISTER_MIME("rl", "application/resource-lists+xml");
917
+ REGISTER_MIME("rlc", "image/vnd.fujixerox.edmics-rlc");
918
+ REGISTER_MIME("rld", "application/resource-lists-diff+xml");
919
+ REGISTER_MIME("rm", "application/vnd.rn-realmedia");
920
+ REGISTER_MIME("rmi", "audio/midi");
921
+ REGISTER_MIME("rmp", "audio/x-pn-realaudio-plugin");
922
+ REGISTER_MIME("rms", "application/vnd.jcp.javame.midlet-rms");
923
+ REGISTER_MIME("rmvb", "application/vnd.rn-realmedia-vbr");
924
+ REGISTER_MIME("rnc", "application/relax-ng-compact-syntax");
925
+ REGISTER_MIME("roa", "application/rpki-roa");
926
+ REGISTER_MIME("roff", "text/troff");
927
+ REGISTER_MIME("rp9", "application/vnd.cloanto.rp9");
928
+ REGISTER_MIME("rpss", "application/vnd.nokia.radio-presets");
929
+ REGISTER_MIME("rpst", "application/vnd.nokia.radio-preset");
930
+ REGISTER_MIME("rq", "application/sparql-query");
931
+ REGISTER_MIME("rs", "application/rls-services+xml");
932
+ REGISTER_MIME("rsd", "application/rsd+xml");
933
+ REGISTER_MIME("rss", "application/rss+xml");
934
+ REGISTER_MIME("rtf", "application/rtf");
935
+ REGISTER_MIME("rtx", "text/richtext");
936
+ REGISTER_MIME("s", "text/x-asm");
937
+ REGISTER_MIME("s3m", "audio/s3m");
938
+ REGISTER_MIME("saf", "application/vnd.yamaha.smaf-audio");
939
+ REGISTER_MIME("sbml", "application/sbml+xml");
940
+ REGISTER_MIME("sc", "application/vnd.ibm.secure-container");
941
+ REGISTER_MIME("scd", "application/x-msschedule");
942
+ REGISTER_MIME("scm", "application/vnd.lotus-screencam");
943
+ REGISTER_MIME("scq", "application/scvp-cv-request");
944
+ REGISTER_MIME("scs", "application/scvp-cv-response");
945
+ REGISTER_MIME("scurl", "text/vnd.curl.scurl");
946
+ REGISTER_MIME("sda", "application/vnd.stardivision.draw");
947
+ REGISTER_MIME("sdc", "application/vnd.stardivision.calc");
948
+ REGISTER_MIME("sdd", "application/vnd.stardivision.impress");
949
+ REGISTER_MIME("sdkd", "application/vnd.solent.sdkm+xml");
950
+ REGISTER_MIME("sdkm", "application/vnd.solent.sdkm+xml");
951
+ REGISTER_MIME("sdp", "application/sdp");
952
+ REGISTER_MIME("sdw", "application/vnd.stardivision.writer");
953
+ REGISTER_MIME("see", "application/vnd.seemail");
954
+ REGISTER_MIME("seed", "application/vnd.fdsn.seed");
955
+ REGISTER_MIME("sema", "application/vnd.sema");
956
+ REGISTER_MIME("semd", "application/vnd.semd");
957
+ REGISTER_MIME("semf", "application/vnd.semf");
958
+ REGISTER_MIME("ser", "application/java-serialized-object");
959
+ REGISTER_MIME("setpay", "application/set-payment-initiation");
960
+ REGISTER_MIME("setreg", "application/set-registration-initiation");
961
+ REGISTER_MIME("sfd-hdstx", "application/vnd.hydrostatix.sof-data");
962
+ REGISTER_MIME("sfs", "application/vnd.spotfire.sfs");
963
+ REGISTER_MIME("sfv", "text/x-sfv");
964
+ REGISTER_MIME("sgi", "image/sgi");
965
+ REGISTER_MIME("sgl", "application/vnd.stardivision.writer-global");
966
+ REGISTER_MIME("sgm", "text/sgml");
967
+ REGISTER_MIME("sgml", "text/sgml");
968
+ REGISTER_MIME("sh", "application/x-sh");
969
+ REGISTER_MIME("shar", "application/x-shar");
970
+ REGISTER_MIME("shf", "application/shf+xml");
971
+ REGISTER_MIME("sid", "image/x-mrsid-image");
972
+ REGISTER_MIME("sig", "application/pgp-signature");
973
+ REGISTER_MIME("sil", "audio/silk");
974
+ REGISTER_MIME("silo", "model/mesh");
975
+ REGISTER_MIME("sis", "application/vnd.symbian.install");
976
+ REGISTER_MIME("sisx", "application/vnd.symbian.install");
977
+ REGISTER_MIME("sit", "application/x-stuffit");
978
+ REGISTER_MIME("sitx", "application/x-stuffitx");
979
+ REGISTER_MIME("skd", "application/vnd.koan");
980
+ REGISTER_MIME("skm", "application/vnd.koan");
981
+ REGISTER_MIME("skp", "application/vnd.koan");
982
+ REGISTER_MIME("skt", "application/vnd.koan");
983
+ REGISTER_MIME("sldm", "application/vnd.ms-powerpoint.slide.macroenabled.12");
984
+ REGISTER_MIME(
985
+ "sldx",
986
+ "application/vnd.openxmlformats-officedocument.presentationml.slide");
987
+ REGISTER_MIME("slt", "application/vnd.epson.salt");
988
+ REGISTER_MIME("sm", "application/vnd.stepmania.stepchart");
989
+ REGISTER_MIME("smf", "application/vnd.stardivision.math");
990
+ REGISTER_MIME("smi", "application/smil+xml");
991
+ REGISTER_MIME("smil", "application/smil+xml");
992
+ REGISTER_MIME("smv", "video/x-smv");
993
+ REGISTER_MIME("smzip", "application/vnd.stepmania.package");
994
+ REGISTER_MIME("snd", "audio/basic");
995
+ REGISTER_MIME("snf", "application/x-font-snf");
996
+ REGISTER_MIME("so", "application/octet-stream");
997
+ REGISTER_MIME("spc", "application/x-pkcs7-certificates");
998
+ REGISTER_MIME("spf", "application/vnd.yamaha.smaf-phrase");
999
+ REGISTER_MIME("spl", "application/x-futuresplash");
1000
+ REGISTER_MIME("spot", "text/vnd.in3d.spot");
1001
+ REGISTER_MIME("spp", "application/scvp-vp-response");
1002
+ REGISTER_MIME("spq", "application/scvp-vp-request");
1003
+ REGISTER_MIME("spx", "audio/ogg");
1004
+ REGISTER_MIME("sql", "application/x-sql");
1005
+ REGISTER_MIME("src", "application/x-wais-source");
1006
+ REGISTER_MIME("srt", "application/x-subrip");
1007
+ REGISTER_MIME("sru", "application/sru+xml");
1008
+ REGISTER_MIME("srx", "application/sparql-results+xml");
1009
+ REGISTER_MIME("ssdl", "application/ssdl+xml");
1010
+ REGISTER_MIME("sse", "application/vnd.kodak-descriptor");
1011
+ REGISTER_MIME("ssf", "application/vnd.epson.ssf");
1012
+ REGISTER_MIME("ssml", "application/ssml+xml");
1013
+ REGISTER_MIME("st", "application/vnd.sailingtracker.track");
1014
+ REGISTER_MIME("stc", "application/vnd.sun.xml.calc.template");
1015
+ REGISTER_MIME("std", "application/vnd.sun.xml.draw.template");
1016
+ REGISTER_MIME("stf", "application/vnd.wt.stf");
1017
+ REGISTER_MIME("sti", "application/vnd.sun.xml.impress.template");
1018
+ REGISTER_MIME("stk", "application/hyperstudio");
1019
+ REGISTER_MIME("stl", "application/vnd.ms-pki.stl");
1020
+ REGISTER_MIME("str", "application/vnd.pg.format");
1021
+ REGISTER_MIME("stw", "application/vnd.sun.xml.writer.template");
1022
+ REGISTER_MIME("sub", "text/vnd.dvb.subtitle");
1023
+ REGISTER_MIME("sus", "application/vnd.sus-calendar");
1024
+ REGISTER_MIME("susp", "application/vnd.sus-calendar");
1025
+ REGISTER_MIME("sv4cpio", "application/x-sv4cpio");
1026
+ REGISTER_MIME("sv4crc", "application/x-sv4crc");
1027
+ REGISTER_MIME("svc", "application/vnd.dvb.service");
1028
+ REGISTER_MIME("svd", "application/vnd.svd");
1029
+ REGISTER_MIME("svg", "image/svg+xml");
1030
+ REGISTER_MIME("svgz", "image/svg+xml");
1031
+ REGISTER_MIME("swa", "application/x-director");
1032
+ REGISTER_MIME("swf", "application/x-shockwave-flash");
1033
+ REGISTER_MIME("swi", "application/vnd.aristanetworks.swi");
1034
+ REGISTER_MIME("sxc", "application/vnd.sun.xml.calc");
1035
+ REGISTER_MIME("sxd", "application/vnd.sun.xml.draw");
1036
+ REGISTER_MIME("sxg", "application/vnd.sun.xml.writer.global");
1037
+ REGISTER_MIME("sxi", "application/vnd.sun.xml.impress");
1038
+ REGISTER_MIME("sxm", "application/vnd.sun.xml.math");
1039
+ REGISTER_MIME("sxw", "application/vnd.sun.xml.writer");
1040
+ REGISTER_MIME("t", "text/troff");
1041
+ REGISTER_MIME("t3", "application/x-t3vm-image");
1042
+ REGISTER_MIME("taglet", "application/vnd.mynfc");
1043
+ REGISTER_MIME("tao", "application/vnd.tao.intent-module-archive");
1044
+ REGISTER_MIME("tar", "application/x-tar");
1045
+ REGISTER_MIME("tcap", "application/vnd.3gpp2.tcap");
1046
+ REGISTER_MIME("tcl", "application/x-tcl");
1047
+ REGISTER_MIME("teacher", "application/vnd.smart.teacher");
1048
+ REGISTER_MIME("tei", "application/tei+xml");
1049
+ REGISTER_MIME("teicorpus", "application/tei+xml");
1050
+ REGISTER_MIME("tex", "application/x-tex");
1051
+ REGISTER_MIME("texi", "application/x-texinfo");
1052
+ REGISTER_MIME("texinfo", "application/x-texinfo");
1053
+ REGISTER_MIME("text", "text/plain");
1054
+ REGISTER_MIME("tfi", "application/thraud+xml");
1055
+ REGISTER_MIME("tfm", "application/x-tex-tfm");
1056
+ REGISTER_MIME("tga", "image/x-tga");
1057
+ REGISTER_MIME("thmx", "application/vnd.ms-officetheme");
1058
+ REGISTER_MIME("tif", "image/tiff");
1059
+ REGISTER_MIME("tiff", "image/tiff");
1060
+ REGISTER_MIME("tmo", "application/vnd.tmobile-livetv");
1061
+ REGISTER_MIME("torrent", "application/x-bittorrent");
1062
+ REGISTER_MIME("tpl", "application/vnd.groove-tool-template");
1063
+ REGISTER_MIME("tpt", "application/vnd.trid.tpt");
1064
+ REGISTER_MIME("tr", "text/troff");
1065
+ REGISTER_MIME("tra", "application/vnd.trueapp");
1066
+ REGISTER_MIME("trm", "application/x-msterminal");
1067
+ REGISTER_MIME("tsd", "application/timestamped-data");
1068
+ REGISTER_MIME("tsv", "text/tab-separated-values");
1069
+ REGISTER_MIME("ttc", "application/x-font-ttf");
1070
+ REGISTER_MIME("ttf", "application/x-font-ttf");
1071
+ REGISTER_MIME("ttl", "text/turtle");
1072
+ REGISTER_MIME("twd", "application/vnd.simtech-mindmapper");
1073
+ REGISTER_MIME("twds", "application/vnd.simtech-mindmapper");
1074
+ REGISTER_MIME("txd", "application/vnd.genomatix.tuxedo");
1075
+ REGISTER_MIME("txf", "application/vnd.mobius.txf");
1076
+ REGISTER_MIME("txt", "text/plain");
1077
+ REGISTER_MIME("u32", "application/x-authorware-bin");
1078
+ REGISTER_MIME("udeb", "application/x-debian-package");
1079
+ REGISTER_MIME("ufd", "application/vnd.ufdl");
1080
+ REGISTER_MIME("ufdl", "application/vnd.ufdl");
1081
+ REGISTER_MIME("ulx", "application/x-glulx");
1082
+ REGISTER_MIME("umj", "application/vnd.umajin");
1083
+ REGISTER_MIME("unityweb", "application/vnd.unity");
1084
+ REGISTER_MIME("uoml", "application/vnd.uoml+xml");
1085
+ REGISTER_MIME("uri", "text/uri-list");
1086
+ REGISTER_MIME("uris", "text/uri-list");
1087
+ REGISTER_MIME("urls", "text/uri-list");
1088
+ REGISTER_MIME("ustar", "application/x-ustar");
1089
+ REGISTER_MIME("utz", "application/vnd.uiq.theme");
1090
+ REGISTER_MIME("uu", "text/x-uuencode");
1091
+ REGISTER_MIME("uva", "audio/vnd.dece.audio");
1092
+ REGISTER_MIME("uvd", "application/vnd.dece.data");
1093
+ REGISTER_MIME("uvf", "application/vnd.dece.data");
1094
+ REGISTER_MIME("uvg", "image/vnd.dece.graphic");
1095
+ REGISTER_MIME("uvh", "video/vnd.dece.hd");
1096
+ REGISTER_MIME("uvi", "image/vnd.dece.graphic");
1097
+ REGISTER_MIME("uvm", "video/vnd.dece.mobile");
1098
+ REGISTER_MIME("uvp", "video/vnd.dece.pd");
1099
+ REGISTER_MIME("uvs", "video/vnd.dece.sd");
1100
+ REGISTER_MIME("uvt", "application/vnd.dece.ttml+xml");
1101
+ REGISTER_MIME("uvu", "video/vnd.uvvu.mp4");
1102
+ REGISTER_MIME("uvv", "video/vnd.dece.video");
1103
+ REGISTER_MIME("uvva", "audio/vnd.dece.audio");
1104
+ REGISTER_MIME("uvvd", "application/vnd.dece.data");
1105
+ REGISTER_MIME("uvvf", "application/vnd.dece.data");
1106
+ REGISTER_MIME("uvvg", "image/vnd.dece.graphic");
1107
+ REGISTER_MIME("uvvh", "video/vnd.dece.hd");
1108
+ REGISTER_MIME("uvvi", "image/vnd.dece.graphic");
1109
+ REGISTER_MIME("uvvm", "video/vnd.dece.mobile");
1110
+ REGISTER_MIME("uvvp", "video/vnd.dece.pd");
1111
+ REGISTER_MIME("uvvs", "video/vnd.dece.sd");
1112
+ REGISTER_MIME("uvvt", "application/vnd.dece.ttml+xml");
1113
+ REGISTER_MIME("uvvu", "video/vnd.uvvu.mp4");
1114
+ REGISTER_MIME("uvvv", "video/vnd.dece.video");
1115
+ REGISTER_MIME("uvvx", "application/vnd.dece.unspecified");
1116
+ REGISTER_MIME("uvvz", "application/vnd.dece.zip");
1117
+ REGISTER_MIME("uvx", "application/vnd.dece.unspecified");
1118
+ REGISTER_MIME("uvz", "application/vnd.dece.zip");
1119
+ REGISTER_MIME("vcard", "text/vcard");
1120
+ REGISTER_MIME("vcd", "application/x-cdlink");
1121
+ REGISTER_MIME("vcf", "text/x-vcard");
1122
+ REGISTER_MIME("vcg", "application/vnd.groove-vcard");
1123
+ REGISTER_MIME("vcs", "text/x-vcalendar");
1124
+ REGISTER_MIME("vcx", "application/vnd.vcx");
1125
+ REGISTER_MIME("vis", "application/vnd.visionary");
1126
+ REGISTER_MIME("viv", "video/vnd.vivo");
1127
+ REGISTER_MIME("vob", "video/x-ms-vob");
1128
+ REGISTER_MIME("vor", "application/vnd.stardivision.writer");
1129
+ REGISTER_MIME("vox", "application/x-authorware-bin");
1130
+ REGISTER_MIME("vrml", "model/vrml");
1131
+ REGISTER_MIME("vsd", "application/vnd.visio");
1132
+ REGISTER_MIME("vsf", "application/vnd.vsf");
1133
+ REGISTER_MIME("vss", "application/vnd.visio");
1134
+ REGISTER_MIME("vst", "application/vnd.visio");
1135
+ REGISTER_MIME("vsw", "application/vnd.visio");
1136
+ REGISTER_MIME("vtu", "model/vnd.vtu");
1137
+ REGISTER_MIME("vxml", "application/voicexml+xml");
1138
+ REGISTER_MIME("w3d", "application/x-director");
1139
+ REGISTER_MIME("wad", "application/x-doom");
1140
+ REGISTER_MIME("wav", "audio/x-wav");
1141
+ REGISTER_MIME("wax", "audio/x-ms-wax");
1142
+ REGISTER_MIME("wbmp", "image/vnd.wap.wbmp");
1143
+ REGISTER_MIME("wbs", "application/vnd.criticaltools.wbs+xml");
1144
+ REGISTER_MIME("wbxml", "application/vnd.wap.wbxml");
1145
+ REGISTER_MIME("wcm", "application/vnd.ms-works");
1146
+ REGISTER_MIME("wdb", "application/vnd.ms-works");
1147
+ REGISTER_MIME("wdp", "image/vnd.ms-photo");
1148
+ REGISTER_MIME("weba", "audio/webm");
1149
+ REGISTER_MIME("webm", "video/webm");
1150
+ REGISTER_MIME("webp", "image/webp");
1151
+ REGISTER_MIME("wg", "application/vnd.pmi.widget");
1152
+ REGISTER_MIME("wgt", "application/widget");
1153
+ REGISTER_MIME("wks", "application/vnd.ms-works");
1154
+ REGISTER_MIME("wm", "video/x-ms-wm");
1155
+ REGISTER_MIME("wma", "audio/x-ms-wma");
1156
+ REGISTER_MIME("wmd", "application/x-ms-wmd");
1157
+ REGISTER_MIME("wmf", "application/x-msmetafile");
1158
+ REGISTER_MIME("wml", "text/vnd.wap.wml");
1159
+ REGISTER_MIME("wmlc", "application/vnd.wap.wmlc");
1160
+ REGISTER_MIME("wmls", "text/vnd.wap.wmlscript");
1161
+ REGISTER_MIME("wmlsc", "application/vnd.wap.wmlscriptc");
1162
+ REGISTER_MIME("wmv", "video/x-ms-wmv");
1163
+ REGISTER_MIME("wmx", "video/x-ms-wmx");
1164
+ REGISTER_MIME("wmz", "application/x-ms-wmz");
1165
+ // REGISTER_MIME("wmz", "application/x-msmetafile");
1166
+ REGISTER_MIME("woff", "application/font-woff");
1167
+ REGISTER_MIME("wpd", "application/vnd.wordperfect");
1168
+ REGISTER_MIME("wpl", "application/vnd.ms-wpl");
1169
+ REGISTER_MIME("wps", "application/vnd.ms-works");
1170
+ REGISTER_MIME("wqd", "application/vnd.wqd");
1171
+ REGISTER_MIME("wri", "application/x-mswrite");
1172
+ REGISTER_MIME("wrl", "model/vrml");
1173
+ REGISTER_MIME("wsdl", "application/wsdl+xml");
1174
+ REGISTER_MIME("wspolicy", "application/wspolicy+xml");
1175
+ REGISTER_MIME("wtb", "application/vnd.webturbo");
1176
+ REGISTER_MIME("wvx", "video/x-ms-wvx");
1177
+ REGISTER_MIME("x32", "application/x-authorware-bin");
1178
+ REGISTER_MIME("x3d", "model/x3d+xml");
1179
+ REGISTER_MIME("x3db", "model/x3d+binary");
1180
+ REGISTER_MIME("x3dbz", "model/x3d+binary");
1181
+ REGISTER_MIME("x3dv", "model/x3d+vrml");
1182
+ REGISTER_MIME("x3dvz", "model/x3d+vrml");
1183
+ REGISTER_MIME("x3dz", "model/x3d+xml");
1184
+ REGISTER_MIME("xaml", "application/xaml+xml");
1185
+ REGISTER_MIME("xap", "application/x-silverlight-app");
1186
+ REGISTER_MIME("xar", "application/vnd.xara");
1187
+ REGISTER_MIME("xbap", "application/x-ms-xbap");
1188
+ REGISTER_MIME("xbd", "application/vnd.fujixerox.docuworks.binder");
1189
+ REGISTER_MIME("xbm", "image/x-xbitmap");
1190
+ REGISTER_MIME("xdf", "application/xcap-diff+xml");
1191
+ REGISTER_MIME("xdm", "application/vnd.syncml.dm+xml");
1192
+ REGISTER_MIME("xdp", "application/vnd.adobe.xdp+xml");
1193
+ REGISTER_MIME("xdssc", "application/dssc+xml");
1194
+ REGISTER_MIME("xdw", "application/vnd.fujixerox.docuworks");
1195
+ REGISTER_MIME("xenc", "application/xenc+xml");
1196
+ REGISTER_MIME("xer", "application/patch-ops-error+xml");
1197
+ REGISTER_MIME("xfdf", "application/vnd.adobe.xfdf");
1198
+ REGISTER_MIME("xfdl", "application/vnd.xfdl");
1199
+ REGISTER_MIME("xht", "application/xhtml+xml");
1200
+ REGISTER_MIME("xhtml", "application/xhtml+xml");
1201
+ REGISTER_MIME("xhvml", "application/xv+xml");
1202
+ REGISTER_MIME("xif", "image/vnd.xiff");
1203
+ REGISTER_MIME("xla", "application/vnd.ms-excel");
1204
+ REGISTER_MIME("xlam", "application/vnd.ms-excel.addin.macroenabled.12");
1205
+ REGISTER_MIME("xlc", "application/vnd.ms-excel");
1206
+ REGISTER_MIME("xlf", "application/x-xliff+xml");
1207
+ REGISTER_MIME("xlm", "application/vnd.ms-excel");
1208
+ REGISTER_MIME("xls", "application/vnd.ms-excel");
1209
+ REGISTER_MIME("xlsb",
1210
+ "application/vnd.ms-excel.sheet.binary.macroenabled.12");
1211
+ REGISTER_MIME("xlsm", "application/vnd.ms-excel.sheet.macroenabled.12");
1212
+ REGISTER_MIME(
1213
+ "xlsx",
1214
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
1215
+ REGISTER_MIME("xlt", "application/vnd.ms-excel");
1216
+ REGISTER_MIME("xltm", "application/vnd.ms-excel.template.macroenabled.12");
1217
+ REGISTER_MIME(
1218
+ "xltx",
1219
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.template");
1220
+ REGISTER_MIME("xlw", "application/vnd.ms-excel");
1221
+ REGISTER_MIME("xm", "audio/xm");
1222
+ REGISTER_MIME("xml", "application/xml");
1223
+ REGISTER_MIME("xo", "application/vnd.olpc-sugar");
1224
+ REGISTER_MIME("xop", "application/xop+xml");
1225
+ REGISTER_MIME("xpi", "application/x-xpinstall");
1226
+ REGISTER_MIME("xpl", "application/xproc+xml");
1227
+ REGISTER_MIME("xpm", "image/x-xpixmap");
1228
+ REGISTER_MIME("xpr", "application/vnd.is-xpr");
1229
+ REGISTER_MIME("xps", "application/vnd.ms-xpsdocument");
1230
+ REGISTER_MIME("xpw", "application/vnd.intercon.formnet");
1231
+ REGISTER_MIME("xpx", "application/vnd.intercon.formnet");
1232
+ REGISTER_MIME("xsl", "application/xml");
1233
+ REGISTER_MIME("xslt", "application/xslt+xml");
1234
+ REGISTER_MIME("xsm", "application/vnd.syncml+xml");
1235
+ REGISTER_MIME("xspf", "application/xspf+xml");
1236
+ REGISTER_MIME("xul", "application/vnd.mozilla.xul+xml");
1237
+ REGISTER_MIME("xvm", "application/xv+xml");
1238
+ REGISTER_MIME("xvml", "application/xv+xml");
1239
+ REGISTER_MIME("xwd", "image/x-xwindowdump");
1240
+ REGISTER_MIME("xyz", "chemical/x-xyz");
1241
+ REGISTER_MIME("xz", "application/x-xz");
1242
+ REGISTER_MIME("yang", "application/yang");
1243
+ REGISTER_MIME("yin", "application/yin+xml");
1244
+ REGISTER_MIME("z1", "application/x-zmachine");
1245
+ REGISTER_MIME("z2", "application/x-zmachine");
1246
+ REGISTER_MIME("z3", "application/x-zmachine");
1247
+ REGISTER_MIME("z4", "application/x-zmachine");
1248
+ REGISTER_MIME("z5", "application/x-zmachine");
1249
+ REGISTER_MIME("z6", "application/x-zmachine");
1250
+ REGISTER_MIME("z7", "application/x-zmachine");
1251
+ REGISTER_MIME("z8", "application/x-zmachine");
1252
+ REGISTER_MIME("zaz", "application/vnd.zzazz.deck+xml");
1253
+ REGISTER_MIME("zip", "application/zip");
1254
+ REGISTER_MIME("zir", "application/vnd.zul");
1255
+ REGISTER_MIME("zirz", "application/vnd.zul");
1256
+ REGISTER_MIME("zmm", "application/vnd.handheld-entertainment+xml");
1257
+ #undef REGISTER_MIME
1258
+ }