rack 1.1.6 → 1.6.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. checksums.yaml +7 -0
  2. data/COPYING +1 -1
  3. data/HISTORY.md +375 -0
  4. data/KNOWN-ISSUES +23 -0
  5. data/README.rdoc +312 -0
  6. data/Rakefile +124 -0
  7. data/SPEC +125 -32
  8. data/contrib/rack.png +0 -0
  9. data/contrib/rack.svg +150 -0
  10. data/contrib/rack_logo.svg +1 -1
  11. data/contrib/rdoc.css +412 -0
  12. data/example/protectedlobster.rb +1 -1
  13. data/lib/rack/auth/abstract/handler.rb +4 -4
  14. data/lib/rack/auth/abstract/request.rb +7 -5
  15. data/lib/rack/auth/basic.rb +1 -1
  16. data/lib/rack/auth/digest/md5.rb +7 -3
  17. data/lib/rack/auth/digest/nonce.rb +1 -1
  18. data/lib/rack/auth/digest/params.rb +7 -9
  19. data/lib/rack/auth/digest/request.rb +10 -9
  20. data/lib/rack/backports/uri/common_18.rb +56 -0
  21. data/lib/rack/backports/uri/common_192.rb +52 -0
  22. data/lib/rack/backports/uri/common_193.rb +29 -0
  23. data/lib/rack/body_proxy.rb +39 -0
  24. data/lib/rack/builder.rb +106 -22
  25. data/lib/rack/cascade.rb +17 -6
  26. data/lib/rack/chunked.rb +44 -24
  27. data/lib/rack/commonlogger.rb +36 -13
  28. data/lib/rack/conditionalget.rb +49 -17
  29. data/lib/rack/config.rb +5 -0
  30. data/lib/rack/content_length.rb +14 -6
  31. data/lib/rack/content_type.rb +7 -1
  32. data/lib/rack/deflater.rb +73 -15
  33. data/lib/rack/directory.rb +18 -8
  34. data/lib/rack/etag.rb +59 -9
  35. data/lib/rack/file.rb +106 -44
  36. data/lib/rack/handler/cgi.rb +11 -11
  37. data/lib/rack/handler/fastcgi.rb +18 -6
  38. data/lib/rack/handler/lsws.rb +2 -4
  39. data/lib/rack/handler/mongrel.rb +22 -6
  40. data/lib/rack/handler/scgi.rb +16 -8
  41. data/lib/rack/handler/thin.rb +19 -4
  42. data/lib/rack/handler/webrick.rb +72 -19
  43. data/lib/rack/handler.rb +47 -14
  44. data/lib/rack/head.rb +10 -2
  45. data/lib/rack/lint.rb +260 -75
  46. data/lib/rack/lobster.rb +13 -8
  47. data/lib/rack/lock.rb +13 -3
  48. data/lib/rack/logger.rb +0 -2
  49. data/lib/rack/methodoverride.rb +27 -8
  50. data/lib/rack/mime.rb +625 -167
  51. data/lib/rack/mock.rb +78 -53
  52. data/lib/rack/multipart/generator.rb +93 -0
  53. data/lib/rack/multipart/parser.rb +253 -0
  54. data/lib/rack/multipart/uploaded_file.rb +34 -0
  55. data/lib/rack/multipart.rb +34 -0
  56. data/lib/rack/nulllogger.rb +21 -2
  57. data/lib/rack/recursive.rb +10 -5
  58. data/lib/rack/reloader.rb +3 -2
  59. data/lib/rack/request.rb +201 -74
  60. data/lib/rack/response.rb +41 -28
  61. data/lib/rack/rewindable_input.rb +15 -11
  62. data/lib/rack/runtime.rb +16 -3
  63. data/lib/rack/sendfile.rb +47 -29
  64. data/lib/rack/server.rb +223 -47
  65. data/lib/rack/session/abstract/id.rb +289 -30
  66. data/lib/rack/session/cookie.rb +133 -44
  67. data/lib/rack/session/memcache.rb +30 -56
  68. data/lib/rack/session/pool.rb +19 -43
  69. data/lib/rack/showexceptions.rb +53 -15
  70. data/lib/rack/showstatus.rb +14 -7
  71. data/lib/rack/static.rb +124 -12
  72. data/lib/rack/tempfile_reaper.rb +22 -0
  73. data/lib/rack/urlmap.rb +49 -15
  74. data/lib/rack/utils/okjson.rb +600 -0
  75. data/lib/rack/utils.rb +363 -361
  76. data/lib/rack.rb +17 -23
  77. data/rack.gemspec +11 -20
  78. data/test/builder/anything.rb +5 -0
  79. data/test/builder/comment.ru +4 -0
  80. data/test/builder/end.ru +5 -0
  81. data/test/builder/line.ru +1 -0
  82. data/test/builder/options.ru +2 -0
  83. data/test/cgi/assets/folder/test.js +1 -0
  84. data/test/cgi/assets/fonts/font.eot +1 -0
  85. data/test/cgi/assets/images/image.png +1 -0
  86. data/test/cgi/assets/index.html +1 -0
  87. data/test/cgi/assets/javascripts/app.js +1 -0
  88. data/test/cgi/assets/stylesheets/app.css +1 -0
  89. data/test/cgi/lighttpd.conf +26 -0
  90. data/test/cgi/rackup_stub.rb +6 -0
  91. data/test/cgi/sample_rackup.ru +5 -0
  92. data/test/cgi/test +9 -0
  93. data/test/cgi/test+directory/test+file +1 -0
  94. data/test/cgi/test.fcgi +8 -0
  95. data/test/cgi/test.ru +5 -0
  96. data/test/gemloader.rb +10 -0
  97. data/test/multipart/bad_robots +259 -0
  98. data/test/multipart/binary +0 -0
  99. data/test/multipart/content_type_and_no_filename +6 -0
  100. data/test/multipart/empty +10 -0
  101. data/test/multipart/fail_16384_nofile +814 -0
  102. data/test/multipart/file1.txt +1 -0
  103. data/test/multipart/filename_and_modification_param +7 -0
  104. data/test/multipart/filename_and_no_name +6 -0
  105. data/test/multipart/filename_with_escaped_quotes +6 -0
  106. data/test/multipart/filename_with_escaped_quotes_and_modification_param +7 -0
  107. data/test/multipart/filename_with_null_byte +7 -0
  108. data/test/multipart/filename_with_percent_escaped_quotes +6 -0
  109. data/test/multipart/filename_with_unescaped_percentages +6 -0
  110. data/test/multipart/filename_with_unescaped_percentages2 +6 -0
  111. data/test/multipart/filename_with_unescaped_percentages3 +6 -0
  112. data/test/multipart/filename_with_unescaped_quotes +6 -0
  113. data/test/multipart/ie +6 -0
  114. data/test/multipart/invalid_character +6 -0
  115. data/test/multipart/mixed_files +21 -0
  116. data/test/multipart/nested +10 -0
  117. data/test/multipart/none +9 -0
  118. data/test/multipart/semicolon +6 -0
  119. data/test/multipart/text +15 -0
  120. data/test/multipart/three_files_three_fields +31 -0
  121. data/test/multipart/webkit +32 -0
  122. data/test/rackup/config.ru +31 -0
  123. data/test/registering_handler/rack/handler/registering_myself.rb +8 -0
  124. data/test/{spec_rack_auth_basic.rb → spec_auth_basic.rb} +23 -15
  125. data/test/{spec_rack_auth_digest.rb → spec_auth_digest.rb} +56 -29
  126. data/test/spec_body_proxy.rb +85 -0
  127. data/test/spec_builder.rb +223 -0
  128. data/test/{spec_rack_cascade.rb → spec_cascade.rb} +28 -15
  129. data/test/{spec_rack_cgi.rb → spec_cgi.rb} +44 -31
  130. data/test/spec_chunked.rb +101 -0
  131. data/test/spec_commonlogger.rb +93 -0
  132. data/test/spec_conditionalget.rb +102 -0
  133. data/test/{spec_rack_config.rb → spec_config.rb} +6 -8
  134. data/test/spec_content_length.rb +85 -0
  135. data/test/spec_content_type.rb +45 -0
  136. data/test/spec_deflater.rb +339 -0
  137. data/test/{spec_rack_directory.rb → spec_directory.rb} +37 -10
  138. data/test/spec_etag.rb +107 -0
  139. data/test/{spec_rack_fastcgi.rb → spec_fastcgi.rb} +47 -29
  140. data/test/spec_file.rb +221 -0
  141. data/test/spec_handler.rb +72 -0
  142. data/test/spec_head.rb +45 -0
  143. data/test/{spec_rack_lint.rb → spec_lint.rb} +82 -60
  144. data/test/spec_lobster.rb +58 -0
  145. data/test/spec_lock.rb +164 -0
  146. data/test/spec_logger.rb +23 -0
  147. data/test/spec_methodoverride.rb +95 -0
  148. data/test/spec_mime.rb +51 -0
  149. data/test/{spec_rack_mock.rb → spec_mock.rb} +92 -38
  150. data/test/{spec_rack_mongrel.rb → spec_mongrel.rb} +46 -53
  151. data/test/spec_multipart.rb +600 -0
  152. data/test/spec_nulllogger.rb +20 -0
  153. data/test/spec_recursive.rb +72 -0
  154. data/test/spec_request.rb +1227 -0
  155. data/test/spec_response.rb +407 -0
  156. data/test/spec_rewindable_input.rb +118 -0
  157. data/test/spec_runtime.rb +49 -0
  158. data/test/spec_sendfile.rb +130 -0
  159. data/test/spec_server.rb +167 -0
  160. data/test/spec_session_abstract_id.rb +53 -0
  161. data/test/spec_session_cookie.rb +410 -0
  162. data/test/{spec_rack_session_memcache.rb → spec_session_memcache.rb} +119 -71
  163. data/test/{spec_rack_session_pool.rb → spec_session_pool.rb} +106 -69
  164. data/test/spec_showexceptions.rb +85 -0
  165. data/test/spec_showstatus.rb +103 -0
  166. data/test/spec_static.rb +145 -0
  167. data/test/spec_tempfile_reaper.rb +63 -0
  168. data/test/{spec_rack_thin.rb → spec_thin.rb} +35 -35
  169. data/test/{spec_rack_urlmap.rb → spec_urlmap.rb} +40 -19
  170. data/test/spec_utils.rb +647 -0
  171. data/test/spec_version.rb +17 -0
  172. data/test/spec_webrick.rb +184 -0
  173. data/test/static/another/index.html +1 -0
  174. data/test/static/index.html +1 -0
  175. data/test/testrequest.rb +78 -0
  176. data/test/unregistered_handler/rack/handler/unregistered.rb +7 -0
  177. data/test/unregistered_handler/rack/handler/unregistered_long_one.rb +7 -0
  178. metadata +220 -239
  179. data/RDOX +0 -0
  180. data/README +0 -592
  181. data/lib/rack/adapter/camping.rb +0 -22
  182. data/test/spec_auth.rb +0 -57
  183. data/test/spec_rack_builder.rb +0 -84
  184. data/test/spec_rack_camping.rb +0 -55
  185. data/test/spec_rack_chunked.rb +0 -62
  186. data/test/spec_rack_commonlogger.rb +0 -61
  187. data/test/spec_rack_conditionalget.rb +0 -41
  188. data/test/spec_rack_content_length.rb +0 -43
  189. data/test/spec_rack_content_type.rb +0 -30
  190. data/test/spec_rack_deflater.rb +0 -127
  191. data/test/spec_rack_etag.rb +0 -17
  192. data/test/spec_rack_file.rb +0 -75
  193. data/test/spec_rack_handler.rb +0 -43
  194. data/test/spec_rack_head.rb +0 -30
  195. data/test/spec_rack_lobster.rb +0 -45
  196. data/test/spec_rack_lock.rb +0 -38
  197. data/test/spec_rack_logger.rb +0 -21
  198. data/test/spec_rack_methodoverride.rb +0 -60
  199. data/test/spec_rack_nulllogger.rb +0 -13
  200. data/test/spec_rack_recursive.rb +0 -77
  201. data/test/spec_rack_request.rb +0 -594
  202. data/test/spec_rack_response.rb +0 -221
  203. data/test/spec_rack_rewindable_input.rb +0 -118
  204. data/test/spec_rack_runtime.rb +0 -35
  205. data/test/spec_rack_sendfile.rb +0 -86
  206. data/test/spec_rack_session_cookie.rb +0 -92
  207. data/test/spec_rack_showexceptions.rb +0 -21
  208. data/test/spec_rack_showstatus.rb +0 -72
  209. data/test/spec_rack_static.rb +0 -37
  210. data/test/spec_rack_utils.rb +0 -557
  211. data/test/spec_rack_webrick.rb +0 -130
  212. data/test/spec_rackup.rb +0 -164
data/lib/rack/mime.rb CHANGED
@@ -18,6 +18,21 @@ module Rack
18
18
  end
19
19
  module_function :mime_type
20
20
 
21
+ # Returns true if the given value is a mime match for the given mime match
22
+ # specification, false otherwise.
23
+ #
24
+ # Rack::Mime.match?('text/html', 'text/*') => true
25
+ # Rack::Mime.match?('text/plain', '*') => true
26
+ # Rack::Mime.match?('text/html', 'application/json') => false
27
+
28
+ def match?(value, matcher)
29
+ v1, v2 = value.split('/', 2)
30
+ m1, m2 = matcher.split('/', 2)
31
+
32
+ (m1 == '*' || v1 == m1) && (m2.nil? || m2 == '*' || m2 == v2)
33
+ end
34
+ module_function :match?
35
+
21
36
  # List of most common mime-types, selected various sources
22
37
  # according to their usefulness in a webserving scope for Ruby
23
38
  # users.
@@ -28,179 +43,622 @@ module Rack
28
43
  # list = WEBrick::HTTPUtils.load_mime_types('/etc/mime.types')
29
44
  # Rack::Mime::MIME_TYPES.merge!(list)
30
45
  #
46
+ # N.B. On Ubuntu the mime.types file does not include the leading period, so
47
+ # users may need to modify the data before merging into the hash.
48
+ #
31
49
  # To add the list mongrel provides, use:
32
50
  #
33
51
  # require 'mongrel/handlers'
34
52
  # Rack::Mime::MIME_TYPES.merge!(Mongrel::DirHandler::MIME_TYPES)
35
53
 
36
54
  MIME_TYPES = {
37
- ".3gp" => "video/3gpp",
38
- ".a" => "application/octet-stream",
39
- ".ai" => "application/postscript",
40
- ".aif" => "audio/x-aiff",
41
- ".aiff" => "audio/x-aiff",
42
- ".asc" => "application/pgp-signature",
43
- ".asf" => "video/x-ms-asf",
44
- ".asm" => "text/x-asm",
45
- ".asx" => "video/x-ms-asf",
46
- ".atom" => "application/atom+xml",
47
- ".au" => "audio/basic",
48
- ".avi" => "video/x-msvideo",
49
- ".bat" => "application/x-msdownload",
50
- ".bin" => "application/octet-stream",
51
- ".bmp" => "image/bmp",
52
- ".bz2" => "application/x-bzip2",
53
- ".c" => "text/x-c",
54
- ".cab" => "application/vnd.ms-cab-compressed",
55
- ".cc" => "text/x-c",
56
- ".chm" => "application/vnd.ms-htmlhelp",
57
- ".class" => "application/octet-stream",
58
- ".com" => "application/x-msdownload",
59
- ".conf" => "text/plain",
60
- ".cpp" => "text/x-c",
61
- ".crt" => "application/x-x509-ca-cert",
62
- ".css" => "text/css",
63
- ".csv" => "text/csv",
64
- ".cxx" => "text/x-c",
65
- ".deb" => "application/x-debian-package",
66
- ".der" => "application/x-x509-ca-cert",
67
- ".diff" => "text/x-diff",
68
- ".djv" => "image/vnd.djvu",
69
- ".djvu" => "image/vnd.djvu",
70
- ".dll" => "application/x-msdownload",
71
- ".dmg" => "application/octet-stream",
72
- ".doc" => "application/msword",
73
- ".dot" => "application/msword",
74
- ".dtd" => "application/xml-dtd",
75
- ".dvi" => "application/x-dvi",
76
- ".ear" => "application/java-archive",
77
- ".eml" => "message/rfc822",
78
- ".eps" => "application/postscript",
79
- ".exe" => "application/x-msdownload",
80
- ".f" => "text/x-fortran",
81
- ".f77" => "text/x-fortran",
82
- ".f90" => "text/x-fortran",
83
- ".flv" => "video/x-flv",
84
- ".for" => "text/x-fortran",
85
- ".gem" => "application/octet-stream",
86
- ".gemspec" => "text/x-script.ruby",
87
- ".gif" => "image/gif",
88
- ".gz" => "application/x-gzip",
89
- ".h" => "text/x-c",
90
- ".hh" => "text/x-c",
91
- ".htm" => "text/html",
92
- ".html" => "text/html",
93
- ".ico" => "image/vnd.microsoft.icon",
94
- ".ics" => "text/calendar",
95
- ".ifb" => "text/calendar",
96
- ".iso" => "application/octet-stream",
97
- ".jar" => "application/java-archive",
98
- ".java" => "text/x-java-source",
99
- ".jnlp" => "application/x-java-jnlp-file",
100
- ".jpeg" => "image/jpeg",
101
- ".jpg" => "image/jpeg",
102
- ".js" => "application/javascript",
103
- ".json" => "application/json",
104
- ".log" => "text/plain",
105
- ".m3u" => "audio/x-mpegurl",
106
- ".m4v" => "video/mp4",
107
- ".man" => "text/troff",
108
- ".manifest"=> "text/cache-manifest",
109
- ".mathml" => "application/mathml+xml",
110
- ".mbox" => "application/mbox",
111
- ".mdoc" => "text/troff",
112
- ".me" => "text/troff",
113
- ".mid" => "audio/midi",
114
- ".midi" => "audio/midi",
115
- ".mime" => "message/rfc822",
116
- ".mml" => "application/mathml+xml",
117
- ".mng" => "video/x-mng",
118
- ".mov" => "video/quicktime",
119
- ".mp3" => "audio/mpeg",
120
- ".mp4" => "video/mp4",
121
- ".mp4v" => "video/mp4",
122
- ".mpeg" => "video/mpeg",
123
- ".mpg" => "video/mpeg",
124
- ".ms" => "text/troff",
125
- ".msi" => "application/x-msdownload",
126
- ".odp" => "application/vnd.oasis.opendocument.presentation",
127
- ".ods" => "application/vnd.oasis.opendocument.spreadsheet",
128
- ".odt" => "application/vnd.oasis.opendocument.text",
129
- ".ogg" => "application/ogg",
130
- ".ogv" => "video/ogg",
131
- ".p" => "text/x-pascal",
132
- ".pas" => "text/x-pascal",
133
- ".pbm" => "image/x-portable-bitmap",
134
- ".pdf" => "application/pdf",
135
- ".pem" => "application/x-x509-ca-cert",
136
- ".pgm" => "image/x-portable-graymap",
137
- ".pgp" => "application/pgp-encrypted",
138
- ".pkg" => "application/octet-stream",
139
- ".pl" => "text/x-script.perl",
140
- ".pm" => "text/x-script.perl-module",
141
- ".png" => "image/png",
142
- ".pnm" => "image/x-portable-anymap",
143
- ".ppm" => "image/x-portable-pixmap",
144
- ".pps" => "application/vnd.ms-powerpoint",
145
- ".ppt" => "application/vnd.ms-powerpoint",
146
- ".ps" => "application/postscript",
147
- ".psd" => "image/vnd.adobe.photoshop",
148
- ".py" => "text/x-script.python",
149
- ".qt" => "video/quicktime",
150
- ".ra" => "audio/x-pn-realaudio",
151
- ".rake" => "text/x-script.ruby",
152
- ".ram" => "audio/x-pn-realaudio",
153
- ".rar" => "application/x-rar-compressed",
154
- ".rb" => "text/x-script.ruby",
155
- ".rdf" => "application/rdf+xml",
156
- ".roff" => "text/troff",
157
- ".rpm" => "application/x-redhat-package-manager",
158
- ".rss" => "application/rss+xml",
159
- ".rtf" => "application/rtf",
160
- ".ru" => "text/x-script.ruby",
161
- ".s" => "text/x-asm",
162
- ".sgm" => "text/sgml",
163
- ".sgml" => "text/sgml",
164
- ".sh" => "application/x-sh",
165
- ".sig" => "application/pgp-signature",
166
- ".snd" => "audio/basic",
167
- ".so" => "application/octet-stream",
168
- ".svg" => "image/svg+xml",
169
- ".svgz" => "image/svg+xml",
170
- ".swf" => "application/x-shockwave-flash",
171
- ".t" => "text/troff",
172
- ".tar" => "application/x-tar",
173
- ".tbz" => "application/x-bzip-compressed-tar",
174
- ".tcl" => "application/x-tcl",
175
- ".tex" => "application/x-tex",
176
- ".texi" => "application/x-texinfo",
177
- ".texinfo" => "application/x-texinfo",
178
- ".text" => "text/plain",
179
- ".tif" => "image/tiff",
180
- ".tiff" => "image/tiff",
181
- ".torrent" => "application/x-bittorrent",
182
- ".tr" => "text/troff",
183
- ".txt" => "text/plain",
184
- ".vcf" => "text/x-vcard",
185
- ".vcs" => "text/x-vcalendar",
186
- ".vrml" => "model/vrml",
187
- ".war" => "application/java-archive",
188
- ".wav" => "audio/x-wav",
189
- ".wma" => "audio/x-ms-wma",
190
- ".wmv" => "video/x-ms-wmv",
191
- ".wmx" => "video/x-ms-wmx",
192
- ".wrl" => "model/vrml",
193
- ".wsdl" => "application/wsdl+xml",
194
- ".xbm" => "image/x-xbitmap",
195
- ".xhtml" => "application/xhtml+xml",
196
- ".xls" => "application/vnd.ms-excel",
197
- ".xml" => "application/xml",
198
- ".xpm" => "image/x-xpixmap",
199
- ".xsl" => "application/xml",
200
- ".xslt" => "application/xslt+xml",
201
- ".yaml" => "text/yaml",
202
- ".yml" => "text/yaml",
203
- ".zip" => "application/zip",
55
+ ".123" => "application/vnd.lotus-1-2-3",
56
+ ".3dml" => "text/vnd.in3d.3dml",
57
+ ".3g2" => "video/3gpp2",
58
+ ".3gp" => "video/3gpp",
59
+ ".a" => "application/octet-stream",
60
+ ".acc" => "application/vnd.americandynamics.acc",
61
+ ".ace" => "application/x-ace-compressed",
62
+ ".acu" => "application/vnd.acucobol",
63
+ ".aep" => "application/vnd.audiograph",
64
+ ".afp" => "application/vnd.ibm.modcap",
65
+ ".ai" => "application/postscript",
66
+ ".aif" => "audio/x-aiff",
67
+ ".aiff" => "audio/x-aiff",
68
+ ".ami" => "application/vnd.amiga.ami",
69
+ ".appcache" => "text/cache-manifest",
70
+ ".apr" => "application/vnd.lotus-approach",
71
+ ".asc" => "application/pgp-signature",
72
+ ".asf" => "video/x-ms-asf",
73
+ ".asm" => "text/x-asm",
74
+ ".aso" => "application/vnd.accpac.simply.aso",
75
+ ".asx" => "video/x-ms-asf",
76
+ ".atc" => "application/vnd.acucorp",
77
+ ".atom" => "application/atom+xml",
78
+ ".atomcat" => "application/atomcat+xml",
79
+ ".atomsvc" => "application/atomsvc+xml",
80
+ ".atx" => "application/vnd.antix.game-component",
81
+ ".au" => "audio/basic",
82
+ ".avi" => "video/x-msvideo",
83
+ ".bat" => "application/x-msdownload",
84
+ ".bcpio" => "application/x-bcpio",
85
+ ".bdm" => "application/vnd.syncml.dm+wbxml",
86
+ ".bh2" => "application/vnd.fujitsu.oasysprs",
87
+ ".bin" => "application/octet-stream",
88
+ ".bmi" => "application/vnd.bmi",
89
+ ".bmp" => "image/bmp",
90
+ ".box" => "application/vnd.previewsystems.box",
91
+ ".btif" => "image/prs.btif",
92
+ ".bz" => "application/x-bzip",
93
+ ".bz2" => "application/x-bzip2",
94
+ ".c" => "text/x-c",
95
+ ".c4g" => "application/vnd.clonk.c4group",
96
+ ".cab" => "application/vnd.ms-cab-compressed",
97
+ ".cc" => "text/x-c",
98
+ ".ccxml" => "application/ccxml+xml",
99
+ ".cdbcmsg" => "application/vnd.contact.cmsg",
100
+ ".cdkey" => "application/vnd.mediastation.cdkey",
101
+ ".cdx" => "chemical/x-cdx",
102
+ ".cdxml" => "application/vnd.chemdraw+xml",
103
+ ".cdy" => "application/vnd.cinderella",
104
+ ".cer" => "application/pkix-cert",
105
+ ".cgm" => "image/cgm",
106
+ ".chat" => "application/x-chat",
107
+ ".chm" => "application/vnd.ms-htmlhelp",
108
+ ".chrt" => "application/vnd.kde.kchart",
109
+ ".cif" => "chemical/x-cif",
110
+ ".cii" => "application/vnd.anser-web-certificate-issue-initiation",
111
+ ".cil" => "application/vnd.ms-artgalry",
112
+ ".cla" => "application/vnd.claymore",
113
+ ".class" => "application/octet-stream",
114
+ ".clkk" => "application/vnd.crick.clicker.keyboard",
115
+ ".clkp" => "application/vnd.crick.clicker.palette",
116
+ ".clkt" => "application/vnd.crick.clicker.template",
117
+ ".clkw" => "application/vnd.crick.clicker.wordbank",
118
+ ".clkx" => "application/vnd.crick.clicker",
119
+ ".clp" => "application/x-msclip",
120
+ ".cmc" => "application/vnd.cosmocaller",
121
+ ".cmdf" => "chemical/x-cmdf",
122
+ ".cml" => "chemical/x-cml",
123
+ ".cmp" => "application/vnd.yellowriver-custom-menu",
124
+ ".cmx" => "image/x-cmx",
125
+ ".com" => "application/x-msdownload",
126
+ ".conf" => "text/plain",
127
+ ".cpio" => "application/x-cpio",
128
+ ".cpp" => "text/x-c",
129
+ ".cpt" => "application/mac-compactpro",
130
+ ".crd" => "application/x-mscardfile",
131
+ ".crl" => "application/pkix-crl",
132
+ ".crt" => "application/x-x509-ca-cert",
133
+ ".csh" => "application/x-csh",
134
+ ".csml" => "chemical/x-csml",
135
+ ".csp" => "application/vnd.commonspace",
136
+ ".css" => "text/css",
137
+ ".csv" => "text/csv",
138
+ ".curl" => "application/vnd.curl",
139
+ ".cww" => "application/prs.cww",
140
+ ".cxx" => "text/x-c",
141
+ ".daf" => "application/vnd.mobius.daf",
142
+ ".davmount" => "application/davmount+xml",
143
+ ".dcr" => "application/x-director",
144
+ ".dd2" => "application/vnd.oma.dd2+xml",
145
+ ".ddd" => "application/vnd.fujixerox.ddd",
146
+ ".deb" => "application/x-debian-package",
147
+ ".der" => "application/x-x509-ca-cert",
148
+ ".dfac" => "application/vnd.dreamfactory",
149
+ ".diff" => "text/x-diff",
150
+ ".dis" => "application/vnd.mobius.dis",
151
+ ".djv" => "image/vnd.djvu",
152
+ ".djvu" => "image/vnd.djvu",
153
+ ".dll" => "application/x-msdownload",
154
+ ".dmg" => "application/octet-stream",
155
+ ".dna" => "application/vnd.dna",
156
+ ".doc" => "application/msword",
157
+ ".docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
158
+ ".dot" => "application/msword",
159
+ ".dp" => "application/vnd.osgi.dp",
160
+ ".dpg" => "application/vnd.dpgraph",
161
+ ".dsc" => "text/prs.lines.tag",
162
+ ".dtd" => "application/xml-dtd",
163
+ ".dts" => "audio/vnd.dts",
164
+ ".dtshd" => "audio/vnd.dts.hd",
165
+ ".dv" => "video/x-dv",
166
+ ".dvi" => "application/x-dvi",
167
+ ".dwf" => "model/vnd.dwf",
168
+ ".dwg" => "image/vnd.dwg",
169
+ ".dxf" => "image/vnd.dxf",
170
+ ".dxp" => "application/vnd.spotfire.dxp",
171
+ ".ear" => "application/java-archive",
172
+ ".ecelp4800" => "audio/vnd.nuera.ecelp4800",
173
+ ".ecelp7470" => "audio/vnd.nuera.ecelp7470",
174
+ ".ecelp9600" => "audio/vnd.nuera.ecelp9600",
175
+ ".ecma" => "application/ecmascript",
176
+ ".edm" => "application/vnd.novadigm.edm",
177
+ ".edx" => "application/vnd.novadigm.edx",
178
+ ".efif" => "application/vnd.picsel",
179
+ ".ei6" => "application/vnd.pg.osasli",
180
+ ".eml" => "message/rfc822",
181
+ ".eol" => "audio/vnd.digital-winds",
182
+ ".eot" => "application/vnd.ms-fontobject",
183
+ ".eps" => "application/postscript",
184
+ ".es3" => "application/vnd.eszigno3+xml",
185
+ ".esf" => "application/vnd.epson.esf",
186
+ ".etx" => "text/x-setext",
187
+ ".exe" => "application/x-msdownload",
188
+ ".ext" => "application/vnd.novadigm.ext",
189
+ ".ez" => "application/andrew-inset",
190
+ ".ez2" => "application/vnd.ezpix-album",
191
+ ".ez3" => "application/vnd.ezpix-package",
192
+ ".f" => "text/x-fortran",
193
+ ".f77" => "text/x-fortran",
194
+ ".f90" => "text/x-fortran",
195
+ ".fbs" => "image/vnd.fastbidsheet",
196
+ ".fdf" => "application/vnd.fdf",
197
+ ".fe_launch" => "application/vnd.denovo.fcselayout-link",
198
+ ".fg5" => "application/vnd.fujitsu.oasysgp",
199
+ ".fli" => "video/x-fli",
200
+ ".flo" => "application/vnd.micrografx.flo",
201
+ ".flv" => "video/x-flv",
202
+ ".flw" => "application/vnd.kde.kivio",
203
+ ".flx" => "text/vnd.fmi.flexstor",
204
+ ".fly" => "text/vnd.fly",
205
+ ".fm" => "application/vnd.framemaker",
206
+ ".fnc" => "application/vnd.frogans.fnc",
207
+ ".for" => "text/x-fortran",
208
+ ".fpx" => "image/vnd.fpx",
209
+ ".fsc" => "application/vnd.fsc.weblaunch",
210
+ ".fst" => "image/vnd.fst",
211
+ ".ftc" => "application/vnd.fluxtime.clip",
212
+ ".fti" => "application/vnd.anser-web-funds-transfer-initiation",
213
+ ".fvt" => "video/vnd.fvt",
214
+ ".fzs" => "application/vnd.fuzzysheet",
215
+ ".g3" => "image/g3fax",
216
+ ".gac" => "application/vnd.groove-account",
217
+ ".gdl" => "model/vnd.gdl",
218
+ ".gem" => "application/octet-stream",
219
+ ".gemspec" => "text/x-script.ruby",
220
+ ".ghf" => "application/vnd.groove-help",
221
+ ".gif" => "image/gif",
222
+ ".gim" => "application/vnd.groove-identity-message",
223
+ ".gmx" => "application/vnd.gmx",
224
+ ".gph" => "application/vnd.flographit",
225
+ ".gqf" => "application/vnd.grafeq",
226
+ ".gram" => "application/srgs",
227
+ ".grv" => "application/vnd.groove-injector",
228
+ ".grxml" => "application/srgs+xml",
229
+ ".gtar" => "application/x-gtar",
230
+ ".gtm" => "application/vnd.groove-tool-message",
231
+ ".gtw" => "model/vnd.gtw",
232
+ ".gv" => "text/vnd.graphviz",
233
+ ".gz" => "application/x-gzip",
234
+ ".h" => "text/x-c",
235
+ ".h261" => "video/h261",
236
+ ".h263" => "video/h263",
237
+ ".h264" => "video/h264",
238
+ ".hbci" => "application/vnd.hbci",
239
+ ".hdf" => "application/x-hdf",
240
+ ".hh" => "text/x-c",
241
+ ".hlp" => "application/winhlp",
242
+ ".hpgl" => "application/vnd.hp-hpgl",
243
+ ".hpid" => "application/vnd.hp-hpid",
244
+ ".hps" => "application/vnd.hp-hps",
245
+ ".hqx" => "application/mac-binhex40",
246
+ ".htc" => "text/x-component",
247
+ ".htke" => "application/vnd.kenameaapp",
248
+ ".htm" => "text/html",
249
+ ".html" => "text/html",
250
+ ".hvd" => "application/vnd.yamaha.hv-dic",
251
+ ".hvp" => "application/vnd.yamaha.hv-voice",
252
+ ".hvs" => "application/vnd.yamaha.hv-script",
253
+ ".icc" => "application/vnd.iccprofile",
254
+ ".ice" => "x-conference/x-cooltalk",
255
+ ".ico" => "image/vnd.microsoft.icon",
256
+ ".ics" => "text/calendar",
257
+ ".ief" => "image/ief",
258
+ ".ifb" => "text/calendar",
259
+ ".ifm" => "application/vnd.shana.informed.formdata",
260
+ ".igl" => "application/vnd.igloader",
261
+ ".igs" => "model/iges",
262
+ ".igx" => "application/vnd.micrografx.igx",
263
+ ".iif" => "application/vnd.shana.informed.interchange",
264
+ ".imp" => "application/vnd.accpac.simply.imp",
265
+ ".ims" => "application/vnd.ms-ims",
266
+ ".ipk" => "application/vnd.shana.informed.package",
267
+ ".irm" => "application/vnd.ibm.rights-management",
268
+ ".irp" => "application/vnd.irepository.package+xml",
269
+ ".iso" => "application/octet-stream",
270
+ ".itp" => "application/vnd.shana.informed.formtemplate",
271
+ ".ivp" => "application/vnd.immervision-ivp",
272
+ ".ivu" => "application/vnd.immervision-ivu",
273
+ ".jad" => "text/vnd.sun.j2me.app-descriptor",
274
+ ".jam" => "application/vnd.jam",
275
+ ".jar" => "application/java-archive",
276
+ ".java" => "text/x-java-source",
277
+ ".jisp" => "application/vnd.jisp",
278
+ ".jlt" => "application/vnd.hp-jlyt",
279
+ ".jnlp" => "application/x-java-jnlp-file",
280
+ ".joda" => "application/vnd.joost.joda-archive",
281
+ ".jp2" => "image/jp2",
282
+ ".jpeg" => "image/jpeg",
283
+ ".jpg" => "image/jpeg",
284
+ ".jpgv" => "video/jpeg",
285
+ ".jpm" => "video/jpm",
286
+ ".js" => "application/javascript",
287
+ ".json" => "application/json",
288
+ ".karbon" => "application/vnd.kde.karbon",
289
+ ".kfo" => "application/vnd.kde.kformula",
290
+ ".kia" => "application/vnd.kidspiration",
291
+ ".kml" => "application/vnd.google-earth.kml+xml",
292
+ ".kmz" => "application/vnd.google-earth.kmz",
293
+ ".kne" => "application/vnd.kinar",
294
+ ".kon" => "application/vnd.kde.kontour",
295
+ ".kpr" => "application/vnd.kde.kpresenter",
296
+ ".ksp" => "application/vnd.kde.kspread",
297
+ ".ktz" => "application/vnd.kahootz",
298
+ ".kwd" => "application/vnd.kde.kword",
299
+ ".latex" => "application/x-latex",
300
+ ".lbd" => "application/vnd.llamagraphics.life-balance.desktop",
301
+ ".lbe" => "application/vnd.llamagraphics.life-balance.exchange+xml",
302
+ ".les" => "application/vnd.hhe.lesson-player",
303
+ ".link66" => "application/vnd.route66.link66+xml",
304
+ ".log" => "text/plain",
305
+ ".lostxml" => "application/lost+xml",
306
+ ".lrm" => "application/vnd.ms-lrm",
307
+ ".ltf" => "application/vnd.frogans.ltf",
308
+ ".lvp" => "audio/vnd.lucent.voice",
309
+ ".lwp" => "application/vnd.lotus-wordpro",
310
+ ".m3u" => "audio/x-mpegurl",
311
+ ".m4a" => "audio/mp4a-latm",
312
+ ".m4v" => "video/mp4",
313
+ ".ma" => "application/mathematica",
314
+ ".mag" => "application/vnd.ecowin.chart",
315
+ ".man" => "text/troff",
316
+ ".manifest" => "text/cache-manifest",
317
+ ".mathml" => "application/mathml+xml",
318
+ ".mbk" => "application/vnd.mobius.mbk",
319
+ ".mbox" => "application/mbox",
320
+ ".mc1" => "application/vnd.medcalcdata",
321
+ ".mcd" => "application/vnd.mcd",
322
+ ".mdb" => "application/x-msaccess",
323
+ ".mdi" => "image/vnd.ms-modi",
324
+ ".mdoc" => "text/troff",
325
+ ".me" => "text/troff",
326
+ ".mfm" => "application/vnd.mfmp",
327
+ ".mgz" => "application/vnd.proteus.magazine",
328
+ ".mid" => "audio/midi",
329
+ ".midi" => "audio/midi",
330
+ ".mif" => "application/vnd.mif",
331
+ ".mime" => "message/rfc822",
332
+ ".mj2" => "video/mj2",
333
+ ".mlp" => "application/vnd.dolby.mlp",
334
+ ".mmd" => "application/vnd.chipnuts.karaoke-mmd",
335
+ ".mmf" => "application/vnd.smaf",
336
+ ".mml" => "application/mathml+xml",
337
+ ".mmr" => "image/vnd.fujixerox.edmics-mmr",
338
+ ".mng" => "video/x-mng",
339
+ ".mny" => "application/x-msmoney",
340
+ ".mov" => "video/quicktime",
341
+ ".movie" => "video/x-sgi-movie",
342
+ ".mp3" => "audio/mpeg",
343
+ ".mp4" => "video/mp4",
344
+ ".mp4a" => "audio/mp4",
345
+ ".mp4s" => "application/mp4",
346
+ ".mp4v" => "video/mp4",
347
+ ".mpc" => "application/vnd.mophun.certificate",
348
+ ".mpeg" => "video/mpeg",
349
+ ".mpg" => "video/mpeg",
350
+ ".mpga" => "audio/mpeg",
351
+ ".mpkg" => "application/vnd.apple.installer+xml",
352
+ ".mpm" => "application/vnd.blueice.multipass",
353
+ ".mpn" => "application/vnd.mophun.application",
354
+ ".mpp" => "application/vnd.ms-project",
355
+ ".mpy" => "application/vnd.ibm.minipay",
356
+ ".mqy" => "application/vnd.mobius.mqy",
357
+ ".mrc" => "application/marc",
358
+ ".ms" => "text/troff",
359
+ ".mscml" => "application/mediaservercontrol+xml",
360
+ ".mseq" => "application/vnd.mseq",
361
+ ".msf" => "application/vnd.epson.msf",
362
+ ".msh" => "model/mesh",
363
+ ".msi" => "application/x-msdownload",
364
+ ".msl" => "application/vnd.mobius.msl",
365
+ ".msty" => "application/vnd.muvee.style",
366
+ ".mts" => "model/vnd.mts",
367
+ ".mus" => "application/vnd.musician",
368
+ ".mvb" => "application/x-msmediaview",
369
+ ".mwf" => "application/vnd.mfer",
370
+ ".mxf" => "application/mxf",
371
+ ".mxl" => "application/vnd.recordare.musicxml",
372
+ ".mxml" => "application/xv+xml",
373
+ ".mxs" => "application/vnd.triscape.mxs",
374
+ ".mxu" => "video/vnd.mpegurl",
375
+ ".n" => "application/vnd.nokia.n-gage.symbian.install",
376
+ ".nc" => "application/x-netcdf",
377
+ ".ngdat" => "application/vnd.nokia.n-gage.data",
378
+ ".nlu" => "application/vnd.neurolanguage.nlu",
379
+ ".nml" => "application/vnd.enliven",
380
+ ".nnd" => "application/vnd.noblenet-directory",
381
+ ".nns" => "application/vnd.noblenet-sealer",
382
+ ".nnw" => "application/vnd.noblenet-web",
383
+ ".npx" => "image/vnd.net-fpx",
384
+ ".nsf" => "application/vnd.lotus-notes",
385
+ ".oa2" => "application/vnd.fujitsu.oasys2",
386
+ ".oa3" => "application/vnd.fujitsu.oasys3",
387
+ ".oas" => "application/vnd.fujitsu.oasys",
388
+ ".obd" => "application/x-msbinder",
389
+ ".oda" => "application/oda",
390
+ ".odc" => "application/vnd.oasis.opendocument.chart",
391
+ ".odf" => "application/vnd.oasis.opendocument.formula",
392
+ ".odg" => "application/vnd.oasis.opendocument.graphics",
393
+ ".odi" => "application/vnd.oasis.opendocument.image",
394
+ ".odp" => "application/vnd.oasis.opendocument.presentation",
395
+ ".ods" => "application/vnd.oasis.opendocument.spreadsheet",
396
+ ".odt" => "application/vnd.oasis.opendocument.text",
397
+ ".oga" => "audio/ogg",
398
+ ".ogg" => "application/ogg",
399
+ ".ogv" => "video/ogg",
400
+ ".ogx" => "application/ogg",
401
+ ".org" => "application/vnd.lotus-organizer",
402
+ ".otc" => "application/vnd.oasis.opendocument.chart-template",
403
+ ".otf" => "application/vnd.oasis.opendocument.formula-template",
404
+ ".otg" => "application/vnd.oasis.opendocument.graphics-template",
405
+ ".oth" => "application/vnd.oasis.opendocument.text-web",
406
+ ".oti" => "application/vnd.oasis.opendocument.image-template",
407
+ ".otm" => "application/vnd.oasis.opendocument.text-master",
408
+ ".ots" => "application/vnd.oasis.opendocument.spreadsheet-template",
409
+ ".ott" => "application/vnd.oasis.opendocument.text-template",
410
+ ".oxt" => "application/vnd.openofficeorg.extension",
411
+ ".p" => "text/x-pascal",
412
+ ".p10" => "application/pkcs10",
413
+ ".p12" => "application/x-pkcs12",
414
+ ".p7b" => "application/x-pkcs7-certificates",
415
+ ".p7m" => "application/pkcs7-mime",
416
+ ".p7r" => "application/x-pkcs7-certreqresp",
417
+ ".p7s" => "application/pkcs7-signature",
418
+ ".pas" => "text/x-pascal",
419
+ ".pbd" => "application/vnd.powerbuilder6",
420
+ ".pbm" => "image/x-portable-bitmap",
421
+ ".pcl" => "application/vnd.hp-pcl",
422
+ ".pclxl" => "application/vnd.hp-pclxl",
423
+ ".pcx" => "image/x-pcx",
424
+ ".pdb" => "chemical/x-pdb",
425
+ ".pdf" => "application/pdf",
426
+ ".pem" => "application/x-x509-ca-cert",
427
+ ".pfr" => "application/font-tdpfr",
428
+ ".pgm" => "image/x-portable-graymap",
429
+ ".pgn" => "application/x-chess-pgn",
430
+ ".pgp" => "application/pgp-encrypted",
431
+ ".pic" => "image/x-pict",
432
+ ".pict" => "image/pict",
433
+ ".pkg" => "application/octet-stream",
434
+ ".pki" => "application/pkixcmp",
435
+ ".pkipath" => "application/pkix-pkipath",
436
+ ".pl" => "text/x-script.perl",
437
+ ".plb" => "application/vnd.3gpp.pic-bw-large",
438
+ ".plc" => "application/vnd.mobius.plc",
439
+ ".plf" => "application/vnd.pocketlearn",
440
+ ".pls" => "application/pls+xml",
441
+ ".pm" => "text/x-script.perl-module",
442
+ ".pml" => "application/vnd.ctc-posml",
443
+ ".png" => "image/png",
444
+ ".pnm" => "image/x-portable-anymap",
445
+ ".pntg" => "image/x-macpaint",
446
+ ".portpkg" => "application/vnd.macports.portpkg",
447
+ ".ppd" => "application/vnd.cups-ppd",
448
+ ".ppm" => "image/x-portable-pixmap",
449
+ ".pps" => "application/vnd.ms-powerpoint",
450
+ ".ppt" => "application/vnd.ms-powerpoint",
451
+ ".prc" => "application/vnd.palm",
452
+ ".pre" => "application/vnd.lotus-freelance",
453
+ ".prf" => "application/pics-rules",
454
+ ".ps" => "application/postscript",
455
+ ".psb" => "application/vnd.3gpp.pic-bw-small",
456
+ ".psd" => "image/vnd.adobe.photoshop",
457
+ ".ptid" => "application/vnd.pvi.ptid1",
458
+ ".pub" => "application/x-mspublisher",
459
+ ".pvb" => "application/vnd.3gpp.pic-bw-var",
460
+ ".pwn" => "application/vnd.3m.post-it-notes",
461
+ ".py" => "text/x-script.python",
462
+ ".pya" => "audio/vnd.ms-playready.media.pya",
463
+ ".pyv" => "video/vnd.ms-playready.media.pyv",
464
+ ".qam" => "application/vnd.epson.quickanime",
465
+ ".qbo" => "application/vnd.intu.qbo",
466
+ ".qfx" => "application/vnd.intu.qfx",
467
+ ".qps" => "application/vnd.publishare-delta-tree",
468
+ ".qt" => "video/quicktime",
469
+ ".qtif" => "image/x-quicktime",
470
+ ".qxd" => "application/vnd.quark.quarkxpress",
471
+ ".ra" => "audio/x-pn-realaudio",
472
+ ".rake" => "text/x-script.ruby",
473
+ ".ram" => "audio/x-pn-realaudio",
474
+ ".rar" => "application/x-rar-compressed",
475
+ ".ras" => "image/x-cmu-raster",
476
+ ".rb" => "text/x-script.ruby",
477
+ ".rcprofile" => "application/vnd.ipunplugged.rcprofile",
478
+ ".rdf" => "application/rdf+xml",
479
+ ".rdz" => "application/vnd.data-vision.rdz",
480
+ ".rep" => "application/vnd.businessobjects",
481
+ ".rgb" => "image/x-rgb",
482
+ ".rif" => "application/reginfo+xml",
483
+ ".rl" => "application/resource-lists+xml",
484
+ ".rlc" => "image/vnd.fujixerox.edmics-rlc",
485
+ ".rld" => "application/resource-lists-diff+xml",
486
+ ".rm" => "application/vnd.rn-realmedia",
487
+ ".rmp" => "audio/x-pn-realaudio-plugin",
488
+ ".rms" => "application/vnd.jcp.javame.midlet-rms",
489
+ ".rnc" => "application/relax-ng-compact-syntax",
490
+ ".roff" => "text/troff",
491
+ ".rpm" => "application/x-redhat-package-manager",
492
+ ".rpss" => "application/vnd.nokia.radio-presets",
493
+ ".rpst" => "application/vnd.nokia.radio-preset",
494
+ ".rq" => "application/sparql-query",
495
+ ".rs" => "application/rls-services+xml",
496
+ ".rsd" => "application/rsd+xml",
497
+ ".rss" => "application/rss+xml",
498
+ ".rtf" => "application/rtf",
499
+ ".rtx" => "text/richtext",
500
+ ".ru" => "text/x-script.ruby",
501
+ ".s" => "text/x-asm",
502
+ ".saf" => "application/vnd.yamaha.smaf-audio",
503
+ ".sbml" => "application/sbml+xml",
504
+ ".sc" => "application/vnd.ibm.secure-container",
505
+ ".scd" => "application/x-msschedule",
506
+ ".scm" => "application/vnd.lotus-screencam",
507
+ ".scq" => "application/scvp-cv-request",
508
+ ".scs" => "application/scvp-cv-response",
509
+ ".sdkm" => "application/vnd.solent.sdkm+xml",
510
+ ".sdp" => "application/sdp",
511
+ ".see" => "application/vnd.seemail",
512
+ ".sema" => "application/vnd.sema",
513
+ ".semd" => "application/vnd.semd",
514
+ ".semf" => "application/vnd.semf",
515
+ ".setpay" => "application/set-payment-initiation",
516
+ ".setreg" => "application/set-registration-initiation",
517
+ ".sfd" => "application/vnd.hydrostatix.sof-data",
518
+ ".sfs" => "application/vnd.spotfire.sfs",
519
+ ".sgm" => "text/sgml",
520
+ ".sgml" => "text/sgml",
521
+ ".sh" => "application/x-sh",
522
+ ".shar" => "application/x-shar",
523
+ ".shf" => "application/shf+xml",
524
+ ".sig" => "application/pgp-signature",
525
+ ".sit" => "application/x-stuffit",
526
+ ".sitx" => "application/x-stuffitx",
527
+ ".skp" => "application/vnd.koan",
528
+ ".slt" => "application/vnd.epson.salt",
529
+ ".smi" => "application/smil+xml",
530
+ ".snd" => "audio/basic",
531
+ ".so" => "application/octet-stream",
532
+ ".spf" => "application/vnd.yamaha.smaf-phrase",
533
+ ".spl" => "application/x-futuresplash",
534
+ ".spot" => "text/vnd.in3d.spot",
535
+ ".spp" => "application/scvp-vp-response",
536
+ ".spq" => "application/scvp-vp-request",
537
+ ".src" => "application/x-wais-source",
538
+ ".srx" => "application/sparql-results+xml",
539
+ ".sse" => "application/vnd.kodak-descriptor",
540
+ ".ssf" => "application/vnd.epson.ssf",
541
+ ".ssml" => "application/ssml+xml",
542
+ ".stf" => "application/vnd.wt.stf",
543
+ ".stk" => "application/hyperstudio",
544
+ ".str" => "application/vnd.pg.format",
545
+ ".sus" => "application/vnd.sus-calendar",
546
+ ".sv4cpio" => "application/x-sv4cpio",
547
+ ".sv4crc" => "application/x-sv4crc",
548
+ ".svd" => "application/vnd.svd",
549
+ ".svg" => "image/svg+xml",
550
+ ".svgz" => "image/svg+xml",
551
+ ".swf" => "application/x-shockwave-flash",
552
+ ".swi" => "application/vnd.arastra.swi",
553
+ ".t" => "text/troff",
554
+ ".tao" => "application/vnd.tao.intent-module-archive",
555
+ ".tar" => "application/x-tar",
556
+ ".tbz" => "application/x-bzip-compressed-tar",
557
+ ".tcap" => "application/vnd.3gpp2.tcap",
558
+ ".tcl" => "application/x-tcl",
559
+ ".tex" => "application/x-tex",
560
+ ".texi" => "application/x-texinfo",
561
+ ".texinfo" => "application/x-texinfo",
562
+ ".text" => "text/plain",
563
+ ".tif" => "image/tiff",
564
+ ".tiff" => "image/tiff",
565
+ ".tmo" => "application/vnd.tmobile-livetv",
566
+ ".torrent" => "application/x-bittorrent",
567
+ ".tpl" => "application/vnd.groove-tool-template",
568
+ ".tpt" => "application/vnd.trid.tpt",
569
+ ".tr" => "text/troff",
570
+ ".tra" => "application/vnd.trueapp",
571
+ ".trm" => "application/x-msterminal",
572
+ ".tsv" => "text/tab-separated-values",
573
+ ".ttf" => "application/octet-stream",
574
+ ".twd" => "application/vnd.simtech-mindmapper",
575
+ ".txd" => "application/vnd.genomatix.tuxedo",
576
+ ".txf" => "application/vnd.mobius.txf",
577
+ ".txt" => "text/plain",
578
+ ".ufd" => "application/vnd.ufdl",
579
+ ".umj" => "application/vnd.umajin",
580
+ ".unityweb" => "application/vnd.unity",
581
+ ".uoml" => "application/vnd.uoml+xml",
582
+ ".uri" => "text/uri-list",
583
+ ".ustar" => "application/x-ustar",
584
+ ".utz" => "application/vnd.uiq.theme",
585
+ ".uu" => "text/x-uuencode",
586
+ ".vcd" => "application/x-cdlink",
587
+ ".vcf" => "text/x-vcard",
588
+ ".vcg" => "application/vnd.groove-vcard",
589
+ ".vcs" => "text/x-vcalendar",
590
+ ".vcx" => "application/vnd.vcx",
591
+ ".vis" => "application/vnd.visionary",
592
+ ".viv" => "video/vnd.vivo",
593
+ ".vrml" => "model/vrml",
594
+ ".vsd" => "application/vnd.visio",
595
+ ".vsf" => "application/vnd.vsf",
596
+ ".vtu" => "model/vnd.vtu",
597
+ ".vxml" => "application/voicexml+xml",
598
+ ".war" => "application/java-archive",
599
+ ".wav" => "audio/x-wav",
600
+ ".wax" => "audio/x-ms-wax",
601
+ ".wbmp" => "image/vnd.wap.wbmp",
602
+ ".wbs" => "application/vnd.criticaltools.wbs+xml",
603
+ ".wbxml" => "application/vnd.wap.wbxml",
604
+ ".webm" => "video/webm",
605
+ ".wm" => "video/x-ms-wm",
606
+ ".wma" => "audio/x-ms-wma",
607
+ ".wmd" => "application/x-ms-wmd",
608
+ ".wmf" => "application/x-msmetafile",
609
+ ".wml" => "text/vnd.wap.wml",
610
+ ".wmlc" => "application/vnd.wap.wmlc",
611
+ ".wmls" => "text/vnd.wap.wmlscript",
612
+ ".wmlsc" => "application/vnd.wap.wmlscriptc",
613
+ ".wmv" => "video/x-ms-wmv",
614
+ ".wmx" => "video/x-ms-wmx",
615
+ ".wmz" => "application/x-ms-wmz",
616
+ ".woff" => "application/font-woff",
617
+ ".woff2" => "application/font-woff2",
618
+ ".wpd" => "application/vnd.wordperfect",
619
+ ".wpl" => "application/vnd.ms-wpl",
620
+ ".wps" => "application/vnd.ms-works",
621
+ ".wqd" => "application/vnd.wqd",
622
+ ".wri" => "application/x-mswrite",
623
+ ".wrl" => "model/vrml",
624
+ ".wsdl" => "application/wsdl+xml",
625
+ ".wspolicy" => "application/wspolicy+xml",
626
+ ".wtb" => "application/vnd.webturbo",
627
+ ".wvx" => "video/x-ms-wvx",
628
+ ".x3d" => "application/vnd.hzn-3d-crossword",
629
+ ".xar" => "application/vnd.xara",
630
+ ".xbd" => "application/vnd.fujixerox.docuworks.binder",
631
+ ".xbm" => "image/x-xbitmap",
632
+ ".xdm" => "application/vnd.syncml.dm+xml",
633
+ ".xdp" => "application/vnd.adobe.xdp+xml",
634
+ ".xdw" => "application/vnd.fujixerox.docuworks",
635
+ ".xenc" => "application/xenc+xml",
636
+ ".xer" => "application/patch-ops-error+xml",
637
+ ".xfdf" => "application/vnd.adobe.xfdf",
638
+ ".xfdl" => "application/vnd.xfdl",
639
+ ".xhtml" => "application/xhtml+xml",
640
+ ".xif" => "image/vnd.xiff",
641
+ ".xls" => "application/vnd.ms-excel",
642
+ ".xlsx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
643
+ ".xml" => "application/xml",
644
+ ".xo" => "application/vnd.olpc-sugar",
645
+ ".xop" => "application/xop+xml",
646
+ ".xpm" => "image/x-xpixmap",
647
+ ".xpr" => "application/vnd.is-xpr",
648
+ ".xps" => "application/vnd.ms-xpsdocument",
649
+ ".xpw" => "application/vnd.intercon.formnet",
650
+ ".xsl" => "application/xml",
651
+ ".xslt" => "application/xslt+xml",
652
+ ".xsm" => "application/vnd.syncml+xml",
653
+ ".xspf" => "application/xspf+xml",
654
+ ".xul" => "application/vnd.mozilla.xul+xml",
655
+ ".xwd" => "image/x-xwindowdump",
656
+ ".xyz" => "chemical/x-xyz",
657
+ ".yaml" => "text/yaml",
658
+ ".yml" => "text/yaml",
659
+ ".zaz" => "application/vnd.zzazz.deck+xml",
660
+ ".zip" => "application/zip",
661
+ ".zmm" => "application/vnd.handheld-entertainment+xml",
204
662
  }
205
663
  end
206
664
  end