puma 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puma might be problematic. Click here for more details.
- data/.gemtest +0 -0
- data/COPYING +55 -0
- data/History.txt +69 -0
- data/LICENSE +26 -0
- data/Manifest.txt +57 -0
- data/README.md +60 -0
- data/Rakefile +10 -0
- data/TODO +5 -0
- data/bin/puma +15 -0
- data/examples/builder.rb +29 -0
- data/examples/camping/README +3 -0
- data/examples/camping/blog.rb +294 -0
- data/examples/camping/tepee.rb +149 -0
- data/examples/httpd.conf +474 -0
- data/examples/mime.yaml +3 -0
- data/examples/mongrel.conf +9 -0
- data/examples/monitrc +57 -0
- data/examples/random_thrash.rb +19 -0
- data/examples/simpletest.rb +52 -0
- data/examples/webrick_compare.rb +20 -0
- data/ext/puma_http11/Http11Service.java +13 -0
- data/ext/puma_http11/ext_help.h +15 -0
- data/ext/puma_http11/extconf.rb +5 -0
- data/ext/puma_http11/http11_parser.c +1225 -0
- data/ext/puma_http11/http11_parser.h +63 -0
- data/ext/puma_http11/http11_parser.java.rl +159 -0
- data/ext/puma_http11/http11_parser.rl +146 -0
- data/ext/puma_http11/http11_parser_common.rl +54 -0
- data/ext/puma_http11/org/jruby/mongrel/Http11.java +241 -0
- data/ext/puma_http11/org/jruby/mongrel/Http11Parser.java +486 -0
- data/ext/puma_http11/puma_http11.c +482 -0
- data/lib/puma.rb +18 -0
- data/lib/puma/cli.rb +131 -0
- data/lib/puma/const.rb +132 -0
- data/lib/puma/events.rb +36 -0
- data/lib/puma/gems.rb +20 -0
- data/lib/puma/mime_types.yml +616 -0
- data/lib/puma/server.rb +419 -0
- data/lib/puma/thread_pool.rb +95 -0
- data/lib/puma/utils.rb +44 -0
- data/lib/rack/handler/puma.rb +33 -0
- data/puma.gemspec +37 -0
- data/tasks/gem.rake +22 -0
- data/tasks/java.rake +12 -0
- data/tasks/native.rake +25 -0
- data/tasks/ragel.rake +20 -0
- data/test/lobster.ru +4 -0
- data/test/mime.yaml +3 -0
- data/test/test_http10.rb +27 -0
- data/test/test_http11.rb +151 -0
- data/test/test_persistent.rb +159 -0
- data/test/test_rack_handler.rb +10 -0
- data/test/test_rack_server.rb +107 -0
- data/test/test_thread_pool.rb +102 -0
- data/test/test_unix_socket.rb +34 -0
- data/test/test_ws.rb +97 -0
- data/test/testhelp.rb +41 -0
- data/tools/trickletest.rb +45 -0
- metadata +165 -0
data/lib/puma.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
# Standard libraries
|
3
|
+
require 'socket'
|
4
|
+
require 'tempfile'
|
5
|
+
require 'yaml'
|
6
|
+
require 'time'
|
7
|
+
require 'etc'
|
8
|
+
require 'uri'
|
9
|
+
require 'stringio'
|
10
|
+
|
11
|
+
# Gem conditional loader
|
12
|
+
require 'puma/gems'
|
13
|
+
require 'thread'
|
14
|
+
|
15
|
+
# Ruby Puma
|
16
|
+
require 'puma/const'
|
17
|
+
require 'puma/server'
|
18
|
+
require 'puma/utils'
|
data/lib/puma/cli.rb
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
require 'uri'
|
3
|
+
|
4
|
+
require 'puma/server'
|
5
|
+
require 'puma/const'
|
6
|
+
|
7
|
+
module Puma
|
8
|
+
class CLI
|
9
|
+
DefaultTCPHost = "0.0.0.0"
|
10
|
+
DefaultTCPPort = 9292
|
11
|
+
|
12
|
+
def initialize(argv, stdout=STDOUT, stderr=STDERR)
|
13
|
+
@argv = argv
|
14
|
+
@stdout = stdout
|
15
|
+
@stderr = stderr
|
16
|
+
|
17
|
+
@events = Events.new @stdout, @stderr
|
18
|
+
|
19
|
+
setup_options
|
20
|
+
end
|
21
|
+
|
22
|
+
def log(str)
|
23
|
+
@stdout.puts str
|
24
|
+
end
|
25
|
+
|
26
|
+
def error(str)
|
27
|
+
@stderr.puts "ERROR: #{str}"
|
28
|
+
exit 1
|
29
|
+
end
|
30
|
+
|
31
|
+
def setup_options
|
32
|
+
@options = {
|
33
|
+
:min_threads => 0,
|
34
|
+
:max_threads => 16
|
35
|
+
}
|
36
|
+
|
37
|
+
@binds = []
|
38
|
+
|
39
|
+
@parser = OptionParser.new do |o|
|
40
|
+
o.on '-t', '--threads INT', "min:max threads to use (default 0:16)" do |arg|
|
41
|
+
min, max = arg.split(":")
|
42
|
+
if max
|
43
|
+
@options[:min_threads] = min.to_i
|
44
|
+
@options[:max_threads] = max.to_i
|
45
|
+
else
|
46
|
+
@options[:min_threads] = 0
|
47
|
+
@options[:max_threads] = arg.to_i
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
o.on "-b", "--bind URI", "URI to bind to (tcp:// and unix:// only)" do |arg|
|
52
|
+
@binds << arg
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
@parser.banner = "puma <options> <rackup file>"
|
57
|
+
|
58
|
+
@parser.on_tail "-h", "--help", "Show help" do
|
59
|
+
log @parser
|
60
|
+
exit 1
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def load_rackup
|
65
|
+
@app, options = Rack::Builder.parse_file @rackup
|
66
|
+
@options.merge! options
|
67
|
+
|
68
|
+
options.each do |key,val|
|
69
|
+
if key.to_s[0,4] == "bind"
|
70
|
+
@binds << val
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def run
|
76
|
+
@parser.parse! @argv
|
77
|
+
|
78
|
+
@rackup = ARGV.shift || "config.ru"
|
79
|
+
|
80
|
+
unless File.exists?(@rackup)
|
81
|
+
raise "Missing rackup file '#{@rackup}'"
|
82
|
+
end
|
83
|
+
|
84
|
+
load_rackup
|
85
|
+
|
86
|
+
if @binds.empty?
|
87
|
+
@options[:Host] ||= DefaultTCPHost
|
88
|
+
@options[:Port] ||= DefaultTCPPort
|
89
|
+
end
|
90
|
+
|
91
|
+
min_t = @options[:min_threads]
|
92
|
+
max_t = @options[:max_threads]
|
93
|
+
|
94
|
+
server = Puma::Server.new @app, @events
|
95
|
+
server.min_threads = min_t
|
96
|
+
server.max_threads = max_t
|
97
|
+
|
98
|
+
log "Puma #{Puma::Const::PUMA_VERSION} starting..."
|
99
|
+
log "* Min threads: #{min_t}, max threads: #{max_t}"
|
100
|
+
|
101
|
+
if @options[:Host]
|
102
|
+
log "* Listening on tcp://#{@options[:Host]}:#{@options[:Port]}"
|
103
|
+
server.add_tcp_listener @options[:Host], @options[:Port]
|
104
|
+
end
|
105
|
+
|
106
|
+
@binds.each do |str|
|
107
|
+
uri = URI.parse str
|
108
|
+
case uri.scheme
|
109
|
+
when "tcp"
|
110
|
+
log "* Listening on #{str}"
|
111
|
+
server.add_tcp_listener uri.host, uri.port
|
112
|
+
when "unix"
|
113
|
+
log "* Listening on #{str}"
|
114
|
+
path = "#{uri.host}#{uri.path}"
|
115
|
+
|
116
|
+
server.add_unix_listener path
|
117
|
+
else
|
118
|
+
error "Invalid URI: #{str}"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
if server.attempt_bonjour(@rackup)
|
123
|
+
log "* Announced services via bonjour"
|
124
|
+
end
|
125
|
+
|
126
|
+
log "Use Ctrl-C to stop"
|
127
|
+
|
128
|
+
server.run.join
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
data/lib/puma/const.rb
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
|
2
|
+
module Puma
|
3
|
+
|
4
|
+
# Every standard HTTP code mapped to the appropriate message. These are
|
5
|
+
# used so frequently that they are placed directly in Puma for easy
|
6
|
+
# access rather than Puma::Const itself.
|
7
|
+
HTTP_STATUS_CODES = {
|
8
|
+
100 => 'Continue',
|
9
|
+
101 => 'Switching Protocols',
|
10
|
+
200 => 'OK',
|
11
|
+
201 => 'Created',
|
12
|
+
202 => 'Accepted',
|
13
|
+
203 => 'Non-Authoritative Information',
|
14
|
+
204 => 'No Content',
|
15
|
+
205 => 'Reset Content',
|
16
|
+
206 => 'Partial Content',
|
17
|
+
300 => 'Multiple Choices',
|
18
|
+
301 => 'Moved Permanently',
|
19
|
+
302 => 'Moved Temporarily',
|
20
|
+
303 => 'See Other',
|
21
|
+
304 => 'Not Modified',
|
22
|
+
305 => 'Use Proxy',
|
23
|
+
400 => 'Bad Request',
|
24
|
+
401 => 'Unauthorized',
|
25
|
+
402 => 'Payment Required',
|
26
|
+
403 => 'Forbidden',
|
27
|
+
404 => 'Not Found',
|
28
|
+
405 => 'Method Not Allowed',
|
29
|
+
406 => 'Not Acceptable',
|
30
|
+
407 => 'Proxy Authentication Required',
|
31
|
+
408 => 'Request Time-out',
|
32
|
+
409 => 'Conflict',
|
33
|
+
410 => 'Gone',
|
34
|
+
411 => 'Length Required',
|
35
|
+
412 => 'Precondition Failed',
|
36
|
+
413 => 'Request Entity Too Large',
|
37
|
+
414 => 'Request-URI Too Large',
|
38
|
+
415 => 'Unsupported Media Type',
|
39
|
+
500 => 'Internal Server Error',
|
40
|
+
501 => 'Not Implemented',
|
41
|
+
502 => 'Bad Gateway',
|
42
|
+
503 => 'Service Unavailable',
|
43
|
+
504 => 'Gateway Time-out',
|
44
|
+
505 => 'HTTP Version not supported'
|
45
|
+
}
|
46
|
+
|
47
|
+
# Frequently used constants when constructing requests or responses. Many times
|
48
|
+
# the constant just refers to a string with the same contents. Using these constants
|
49
|
+
# gave about a 3% to 10% performance improvement over using the strings directly.
|
50
|
+
#
|
51
|
+
# The constants are frozen because Hash#[]= when called with a String key dups
|
52
|
+
# the String UNLESS the String is frozen. This saves us therefore 2 object
|
53
|
+
# allocations when creating the env hash later.
|
54
|
+
#
|
55
|
+
# While Puma does try to emulate the CGI/1.2 protocol, it does not use the REMOTE_IDENT,
|
56
|
+
# REMOTE_USER, or REMOTE_HOST parameters since those are either a security problem or
|
57
|
+
# too taxing on performance.
|
58
|
+
module Const
|
59
|
+
|
60
|
+
# The default number of seconds for another request within a persistent
|
61
|
+
# session.
|
62
|
+
PERSISTENT_TIMEOUT = 20
|
63
|
+
|
64
|
+
DATE = "Date".freeze
|
65
|
+
|
66
|
+
SCRIPT_NAME = "SCRIPT_NAME".freeze
|
67
|
+
|
68
|
+
# The original URI requested by the client.
|
69
|
+
REQUEST_URI= 'REQUEST_URI'.freeze
|
70
|
+
REQUEST_PATH = 'REQUEST_PATH'.freeze
|
71
|
+
|
72
|
+
PATH_INFO = 'PATH_INFO'.freeze
|
73
|
+
|
74
|
+
PUMA_VERSION = VERSION = "0.8.0".freeze
|
75
|
+
|
76
|
+
PUMA_TMP_BASE = "puma".freeze
|
77
|
+
|
78
|
+
# The standard empty 404 response for bad requests. Use Error4040Handler for custom stuff.
|
79
|
+
ERROR_404_RESPONSE = "HTTP/1.1 404 Not Found\r\nConnection: close\r\nServer: Puma #{PUMA_VERSION}\r\n\r\nNOT FOUND".freeze
|
80
|
+
|
81
|
+
CONTENT_LENGTH = "CONTENT_LENGTH".freeze
|
82
|
+
|
83
|
+
# A common header for indicating the server is too busy. Not used yet.
|
84
|
+
ERROR_503_RESPONSE = "HTTP/1.1 503 Service Unavailable\r\n\r\nBUSY".freeze
|
85
|
+
|
86
|
+
# The basic max request size we'll try to read.
|
87
|
+
CHUNK_SIZE = 16 * 1024
|
88
|
+
|
89
|
+
# This is the maximum header that is allowed before a client is booted. The parser detects
|
90
|
+
# this, but we'd also like to do this as well.
|
91
|
+
MAX_HEADER = 1024 * (80 + 32)
|
92
|
+
|
93
|
+
# Maximum request body size before it is moved out of memory and into a tempfile for reading.
|
94
|
+
MAX_BODY = MAX_HEADER
|
95
|
+
|
96
|
+
# A frozen format for this is about 15% faster
|
97
|
+
STATUS_FORMAT = "HTTP/1.1 %d %s\r\nConnection: close\r\n".freeze
|
98
|
+
|
99
|
+
CONTENT_TYPE = "Content-Type".freeze
|
100
|
+
|
101
|
+
LAST_MODIFIED = "Last-Modified".freeze
|
102
|
+
ETAG = "ETag".freeze
|
103
|
+
SLASH = "/".freeze
|
104
|
+
REQUEST_METHOD = "REQUEST_METHOD".freeze
|
105
|
+
GET = "GET".freeze
|
106
|
+
HEAD = "HEAD".freeze
|
107
|
+
# ETag is based on the apache standard of hex mtime-size-inode (inode is 0 on win32)
|
108
|
+
ETAG_FORMAT = "\"%x-%x-%x\"".freeze
|
109
|
+
LINE_END = "\r\n".freeze
|
110
|
+
REMOTE_ADDR = "REMOTE_ADDR".freeze
|
111
|
+
HTTP_X_FORWARDED_FOR = "HTTP_X_FORWARDED_FOR".freeze
|
112
|
+
HTTP_IF_MODIFIED_SINCE = "HTTP_IF_MODIFIED_SINCE".freeze
|
113
|
+
HTTP_IF_NONE_MATCH = "HTTP_IF_NONE_MATCH".freeze
|
114
|
+
REDIRECT = "HTTP/1.1 302 Found\r\nLocation: %s\r\nConnection: close\r\n\r\n".freeze
|
115
|
+
HOST = "HOST".freeze
|
116
|
+
|
117
|
+
SERVER_NAME = "SERVER_NAME".freeze
|
118
|
+
SERVER_PORT = "SERVER_PORT".freeze
|
119
|
+
HTTP_HOST = "HTTP_HOST".freeze
|
120
|
+
PORT_80 = "80".freeze
|
121
|
+
|
122
|
+
SERVER_PROTOCOL = "SERVER_PROTOCOL".freeze
|
123
|
+
HTTP_11 = "HTTP/1.1".freeze
|
124
|
+
|
125
|
+
SERVER_SOFTWARE = "SERVER_SOFTWARE".freeze
|
126
|
+
GATEWAY_INTERFACE = "GATEWAY_INTERFACE".freeze
|
127
|
+
CGI_VER = "CGI/1.2".freeze
|
128
|
+
|
129
|
+
STOP_COMMAND = "!".freeze
|
130
|
+
|
131
|
+
end
|
132
|
+
end
|
data/lib/puma/events.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'puma/const'
|
2
|
+
require 'stringio'
|
3
|
+
|
4
|
+
module Puma
|
5
|
+
class Events
|
6
|
+
|
7
|
+
include Const
|
8
|
+
|
9
|
+
def initialize(stdout, stderr)
|
10
|
+
@stdout = stdout
|
11
|
+
@stderr = stderr
|
12
|
+
end
|
13
|
+
|
14
|
+
attr_reader :stdout, :stderr
|
15
|
+
|
16
|
+
def parse_error(server, env, error)
|
17
|
+
@stderr.puts "#{Time.now}: HTTP parse error, malformed request (#{env[HTTP_X_FORWARDED_FOR] || env[REMOTE_ADDR]}): #{error.inspect}"
|
18
|
+
@stderr.puts "#{Time.now}: ENV: #{env.inspect}\n---\n"
|
19
|
+
end
|
20
|
+
|
21
|
+
def unknown_error(server, env, error, kind="Unknown")
|
22
|
+
if error.respond_to? :render
|
23
|
+
error.render "#{Time.now}: #{kind} error", @stderr
|
24
|
+
else
|
25
|
+
@stderr.puts "#{Time.now}: #{kind} error: #{error.inspect}"
|
26
|
+
@stderr.puts error.backtrace.join("\n")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
DEFAULT = new(STDOUT, STDERR)
|
31
|
+
|
32
|
+
def self.strings
|
33
|
+
Events.new StringIO.new, StringIO.new
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/puma/gems.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Puma
|
2
|
+
module Gems
|
3
|
+
class << self
|
4
|
+
def optional(library, version = nil)
|
5
|
+
begin
|
6
|
+
Kernel.require library
|
7
|
+
rescue LoadError, RuntimeError => e
|
8
|
+
begin
|
9
|
+
# ActiveSupport breaks 'require' by making it always return a true value
|
10
|
+
Kernel.require 'rubygems'
|
11
|
+
version ? gem(library, version) : gem(library)
|
12
|
+
retry
|
13
|
+
rescue Gem::LoadError, LoadError, RuntimeError
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,616 @@
|
|
1
|
+
---
|
2
|
+
.a: application/octet-stream
|
3
|
+
.abc: text/vnd.abc
|
4
|
+
.acgi: text/html
|
5
|
+
.afl: video/animaflex
|
6
|
+
.ai: application/postscript
|
7
|
+
.aif: audio/aiff
|
8
|
+
.aifc: audio/aiff
|
9
|
+
.aiff: audio/aiff
|
10
|
+
.aip: text/x-audiosoft-intra
|
11
|
+
.ani: application/x-navi-animation
|
12
|
+
.aps: application/mime
|
13
|
+
.arc: application/octet-stream
|
14
|
+
.arj: application/octet-stream
|
15
|
+
.art: image/x-jg
|
16
|
+
.asf: video/x-ms-asf
|
17
|
+
.asm: text/x-asm
|
18
|
+
.asp: text/asp
|
19
|
+
.asr: video/x-ms-asf
|
20
|
+
.asx: video/x-ms-asf
|
21
|
+
.atom: application/atom+xml
|
22
|
+
.au: audio/basic
|
23
|
+
.au: audio/x-au
|
24
|
+
.avi: video/avi
|
25
|
+
.avs: video/avs-video
|
26
|
+
.axs: application/olescript
|
27
|
+
.bas: text/plain
|
28
|
+
.bcpio: application/x-bcpio
|
29
|
+
.bin: application/octet-stream
|
30
|
+
.bm: image/bmp
|
31
|
+
.bmp: image/bmp
|
32
|
+
.boo: application/book
|
33
|
+
.book: application/book
|
34
|
+
.boz: application/x-bzip2
|
35
|
+
.bsh: application/x-bsh
|
36
|
+
.bz2: application/x-bzip2
|
37
|
+
.bz: application/x-bzip
|
38
|
+
.c: text/plain
|
39
|
+
.cat: application/octet-stream
|
40
|
+
.cc: text/plain
|
41
|
+
.ccad: application/clariscad
|
42
|
+
.cco: application/x-cocoa
|
43
|
+
.cdf: application/cdf
|
44
|
+
.cer: application/x-x509-ca-cert
|
45
|
+
.cha: application/x-chat
|
46
|
+
.chat: application/x-chat
|
47
|
+
.class: application/java
|
48
|
+
.class: application/octet-stream
|
49
|
+
.clp: application/x-msclip
|
50
|
+
.cmx: image/x-cmx
|
51
|
+
.cod: image/cis-cod
|
52
|
+
.com: application/octet-stream
|
53
|
+
.com: text/plain
|
54
|
+
.conf: text/plain
|
55
|
+
.cpio: application/x-cpio
|
56
|
+
.cpp: text/x-c
|
57
|
+
.cpt: application/x-cpt
|
58
|
+
.crd: application/x-mscardfile
|
59
|
+
.crl: application/pkcs-crl
|
60
|
+
.crl: application/pkix-crl
|
61
|
+
.crt: application/x-x509-ca-cert
|
62
|
+
.csh: application/x-csh
|
63
|
+
.csh: text/x-script.csh
|
64
|
+
.css: text/css
|
65
|
+
.cxx: text/plain
|
66
|
+
.dcr: application/x-director
|
67
|
+
.deb: application/octet-stream
|
68
|
+
.deepv: application/x-deepv
|
69
|
+
.def: text/plain
|
70
|
+
.der: application/x-x509-ca-cert
|
71
|
+
.dhh: application/david-heinemeier-hansson
|
72
|
+
.dif: video/x-dv
|
73
|
+
.dir: application/x-director
|
74
|
+
.dl: video/dl
|
75
|
+
.dll: application/octet-stream
|
76
|
+
.dmg: application/octet-stream
|
77
|
+
.dms: application/octet-stream
|
78
|
+
.doc: application/msword
|
79
|
+
.dp: application/commonground
|
80
|
+
.drw: application/drafting
|
81
|
+
.dump: application/octet-stream
|
82
|
+
.dv: video/x-dv
|
83
|
+
.dvi: application/x-dvi
|
84
|
+
.dwg: application/acad
|
85
|
+
.dwg: image/x-dwg
|
86
|
+
.dxf: application/dxf
|
87
|
+
.dxf: image/x-dwg
|
88
|
+
.dxr: application/x-director
|
89
|
+
.ear: application/java-archive
|
90
|
+
.el: text/x-script.elisp
|
91
|
+
.elc: application/x-bytecode.elisp (compiled elisp)
|
92
|
+
.elc: application/x-elc
|
93
|
+
.env: application/x-envoy
|
94
|
+
.eot: application/octet-stream
|
95
|
+
.eps: application/postscript
|
96
|
+
.es: application/x-esrehber
|
97
|
+
.etx: text/x-setext
|
98
|
+
.evy: application/envoy
|
99
|
+
.evy: application/x-envoy
|
100
|
+
.exe: application/octet-stream
|
101
|
+
.f77: text/x-fortran
|
102
|
+
.f90: text/plain
|
103
|
+
.f90: text/x-fortran
|
104
|
+
.f: text/x-fortran
|
105
|
+
.fdf: application/vnd.fdf
|
106
|
+
.fif: application/fractals
|
107
|
+
.fif: image/fif
|
108
|
+
.fli: video/fli
|
109
|
+
.fli: video/x-fli
|
110
|
+
.flo: image/florian
|
111
|
+
.flr: x-world/x-vrml
|
112
|
+
.flv: video/x-flv
|
113
|
+
.flx: text/vnd.fmi.flexstor
|
114
|
+
.fmf: video/x-atomic3d-feature
|
115
|
+
.for: text/plain
|
116
|
+
.for: text/x-fortran
|
117
|
+
.fpx: image/vnd.fpx
|
118
|
+
.fpx: image/vnd.net-fpx
|
119
|
+
.frl: application/freeloader
|
120
|
+
.funk: audio/make
|
121
|
+
.g3: image/g3fax
|
122
|
+
.g: text/plain
|
123
|
+
.gif: image/gif
|
124
|
+
.gl: video/gl
|
125
|
+
.gl: video/x-gl
|
126
|
+
.gsd: audio/x-gsm
|
127
|
+
.gsm: audio/x-gsm
|
128
|
+
.gsp: application/x-gsp
|
129
|
+
.gss: application/x-gss
|
130
|
+
.gtar: application/x-gtar
|
131
|
+
.gz: application/x-compressed
|
132
|
+
.gzip: application/x-gzip
|
133
|
+
.h: text/plain
|
134
|
+
.hdf: application/x-hdf
|
135
|
+
.help: application/x-helpfile
|
136
|
+
.hgl: application/vnd.hp-hpgl
|
137
|
+
.hh: text/plain
|
138
|
+
.hlb: text/x-script
|
139
|
+
.hlp: application/hlp
|
140
|
+
.hpg: application/vnd.hp-hpgl
|
141
|
+
.hpgl: application/vnd.hp-hpgl
|
142
|
+
.hqx: application/binhex
|
143
|
+
.hta: application/hta
|
144
|
+
.htc: text/x-component
|
145
|
+
.htm: text/html
|
146
|
+
.html: text/html
|
147
|
+
.htmls: text/html
|
148
|
+
.htt: text/webviewhtml
|
149
|
+
.htx: text/html
|
150
|
+
.ico: image/x-icon
|
151
|
+
.idc: text/plain
|
152
|
+
.ief: image/ief
|
153
|
+
.iefs: image/ief
|
154
|
+
.iges: application/iges
|
155
|
+
.igs: application/iges
|
156
|
+
.iii: application/x-iphone
|
157
|
+
.ima: application/x-ima
|
158
|
+
.imap: application/x-httpd-imap
|
159
|
+
.img: application/octet-stream
|
160
|
+
.inf: application/inf
|
161
|
+
.ins: application/x-internet-signup
|
162
|
+
.ins: application/x-internett-signup
|
163
|
+
.ip: application/x-ip2
|
164
|
+
.iso: application/octet-stream
|
165
|
+
.isp: application/x-internet-signup
|
166
|
+
.isu: video/x-isvideo
|
167
|
+
.it: audio/it
|
168
|
+
.iv: application/x-inventor
|
169
|
+
.ivr: i-world/i-vrml
|
170
|
+
.ivy: application/x-livescreen
|
171
|
+
.jam: audio/x-jam
|
172
|
+
.jar: application/java-archive
|
173
|
+
.jardiff: application/x-java-archive-diff
|
174
|
+
.jav: text/plain
|
175
|
+
.jav: text/x-java-source
|
176
|
+
.java: text/plain
|
177
|
+
.java: text/x-java-source
|
178
|
+
.jcm: application/x-java-commerce
|
179
|
+
.jfif-tbnl: image/jpeg
|
180
|
+
.jfif: image/jpeg
|
181
|
+
.jfif: image/pipeg
|
182
|
+
.jfif: image/pjpeg
|
183
|
+
.jng: image/x-jng
|
184
|
+
.jnlp: application/x-java-jnlp-file
|
185
|
+
.jpe: image/jpeg
|
186
|
+
.jpeg: image/jpeg
|
187
|
+
.jpg: image/jpeg
|
188
|
+
.jps: image/x-jps
|
189
|
+
.js: application/x-javascript
|
190
|
+
.js: text/javascript
|
191
|
+
.jut: image/jutvision
|
192
|
+
.kar: audio/midi
|
193
|
+
.kar: music/x-karaoke
|
194
|
+
.ksh: application/x-ksh
|
195
|
+
.ksh: text/x-script.ksh
|
196
|
+
.la: audio/nspaudio
|
197
|
+
.la: audio/x-nspaudio
|
198
|
+
.lam: audio/x-liveaudio
|
199
|
+
.latex: application/x-latex
|
200
|
+
.lha: application/lha
|
201
|
+
.lha: application/octet-stream
|
202
|
+
.lha: application/x-lha
|
203
|
+
.lhx: application/octet-stream
|
204
|
+
.list: text/plain
|
205
|
+
.lma: audio/nspaudio
|
206
|
+
.lma: audio/x-nspaudio
|
207
|
+
.log: text/plain
|
208
|
+
.lsf: video/x-la-asf
|
209
|
+
.lsp: application/x-lisp
|
210
|
+
.lsp: text/x-script.lisp
|
211
|
+
.lst: text/plain
|
212
|
+
.lsx: text/x-la-asf
|
213
|
+
.lsx: video/x-la-asf
|
214
|
+
.ltx: application/x-latex
|
215
|
+
.lzh: application/octet-stream
|
216
|
+
.lzh: application/x-lzh
|
217
|
+
.lzx: application/lzx
|
218
|
+
.lzx: application/octet-stream
|
219
|
+
.lzx: application/x-lzx
|
220
|
+
.m13: application/x-msmediaview
|
221
|
+
.m14: application/x-msmediaview
|
222
|
+
.m1v: video/mpeg
|
223
|
+
.m2a: audio/mpeg
|
224
|
+
.m2v: video/mpeg
|
225
|
+
.m3u: audio/x-mpegurl
|
226
|
+
.m: text/x-m
|
227
|
+
.man: application/x-troff-man
|
228
|
+
.map: application/x-navimap
|
229
|
+
.mar: text/plain
|
230
|
+
.mbd: application/mbedlet
|
231
|
+
.mc: application/x-magic-cap-package-1.0
|
232
|
+
.mcd: application/mcad
|
233
|
+
.mcd: application/x-mathcad
|
234
|
+
.mcf: image/vasa
|
235
|
+
.mcf: text/mcf
|
236
|
+
.mcp: application/netmc
|
237
|
+
.mdb: application/x-msaccess
|
238
|
+
.me: application/x-troff-me
|
239
|
+
.mht: message/rfc822
|
240
|
+
.mhtml: message/rfc822
|
241
|
+
.mid: audio/mid
|
242
|
+
.mid: audio/midi
|
243
|
+
.mid: audio/x-mid
|
244
|
+
.mid: audio/x-midi
|
245
|
+
.midi: audio/midi
|
246
|
+
.midi: audio/x-mid
|
247
|
+
.midi: audio/x-midi
|
248
|
+
.mif: application/x-frame
|
249
|
+
.mif: application/x-mif
|
250
|
+
.mime: message/rfc822
|
251
|
+
.mime: www/mime
|
252
|
+
.mjf: audio/x-vnd.audioexplosion.mjuicemediafile
|
253
|
+
.mjpg: video/x-motion-jpeg
|
254
|
+
.mm: application/base64
|
255
|
+
.mm: application/x-meme
|
256
|
+
.mme: application/base64
|
257
|
+
.mml: text/mathml
|
258
|
+
.mng: video/x-mng
|
259
|
+
.mod: audio/mod
|
260
|
+
.moov: video/quicktime
|
261
|
+
.mov: video/quicktime
|
262
|
+
.movie: video/x-sgi-movie
|
263
|
+
.mp2: audio/mpeg
|
264
|
+
.mp3: audio/mpeg
|
265
|
+
.mpa: audio/mpeg
|
266
|
+
.mpc: application/x-project
|
267
|
+
.mpe: video/mpeg
|
268
|
+
.mpeg: video/mpeg
|
269
|
+
.mpg: video/mpeg
|
270
|
+
.mpga: audio/mpeg
|
271
|
+
.mpp: application/vnd.ms-project
|
272
|
+
.mpt: application/x-project
|
273
|
+
.mpv2: video/mpeg
|
274
|
+
.mpv: application/x-project
|
275
|
+
.mpx: application/x-project
|
276
|
+
.mrc: application/marc
|
277
|
+
.ms: application/x-troff-ms
|
278
|
+
.msi: application/octet-stream
|
279
|
+
.msm: application/octet-stream
|
280
|
+
.msp: application/octet-stream
|
281
|
+
.mv: video/x-sgi-movie
|
282
|
+
.mvb: application/x-msmediaview
|
283
|
+
.my: audio/make
|
284
|
+
.mzz: application/x-vnd.audioexplosion.mzz
|
285
|
+
.nap: image/naplps
|
286
|
+
.naplps: image/naplps
|
287
|
+
.nc: application/x-netcdf
|
288
|
+
.ncm: application/vnd.nokia.configuration-message
|
289
|
+
.nif: image/x-niff
|
290
|
+
.niff: image/x-niff
|
291
|
+
.nix: application/x-mix-transfer
|
292
|
+
.nsc: application/x-conference
|
293
|
+
.nvd: application/x-navidoc
|
294
|
+
.nws: message/rfc822
|
295
|
+
.o: application/octet-stream
|
296
|
+
.oda: application/oda
|
297
|
+
.omc: application/x-omc
|
298
|
+
.omcd: application/x-omcdatamaker
|
299
|
+
.omcr: application/x-omcregerator
|
300
|
+
.p10: application/pkcs10
|
301
|
+
.p10: application/x-pkcs10
|
302
|
+
.p12: application/pkcs-12
|
303
|
+
.p12: application/x-pkcs12
|
304
|
+
.p7a: application/x-pkcs7-signature
|
305
|
+
.p7b: application/x-pkcs7-certificates
|
306
|
+
.p7c: application/pkcs7-mime
|
307
|
+
.p7c: application/x-pkcs7-mime
|
308
|
+
.p7m: application/pkcs7-mime
|
309
|
+
.p7m: application/x-pkcs7-mime
|
310
|
+
.p7r: application/x-pkcs7-certreqresp
|
311
|
+
.p7s: application/pkcs7-signature
|
312
|
+
.p7s: application/x-pkcs7-signature
|
313
|
+
.p: text/x-pascal
|
314
|
+
.part: application/pro_eng
|
315
|
+
.pas: text/pascal
|
316
|
+
.pbm: image/x-portable-bitmap
|
317
|
+
.pcl: application/vnd.hp-pcl
|
318
|
+
.pcl: application/x-pcl
|
319
|
+
.pct: image/x-pict
|
320
|
+
.pcx: image/x-pcx
|
321
|
+
.pdb: application/x-pilot
|
322
|
+
.pdf: application/pdf
|
323
|
+
.pem: application/x-x509-ca-cert
|
324
|
+
.pfunk: audio/make
|
325
|
+
.pfunk: audio/make.my.funk
|
326
|
+
.pfx: application/x-pkcs12
|
327
|
+
.pgm: image/x-portable-graymap
|
328
|
+
.pgm: image/x-portable-greymap
|
329
|
+
.pic: image/pict
|
330
|
+
.pict: image/pict
|
331
|
+
.pkg: application/x-newton-compatible-pkg
|
332
|
+
.pko: application/vnd.ms-pki.pko
|
333
|
+
.pko: application/ynd.ms-pkipko
|
334
|
+
.pl: application/x-perl
|
335
|
+
.pl: text/plain
|
336
|
+
.pl: text/x-script.perl
|
337
|
+
.plx: application/x-pixclscript
|
338
|
+
.pm4: application/x-pagemaker
|
339
|
+
.pm5: application/x-pagemaker
|
340
|
+
.pm: application/x-perl
|
341
|
+
.pm: image/x-xpixmap
|
342
|
+
.pm: text/x-script.perl-module
|
343
|
+
.pma: application/x-perfmon
|
344
|
+
.pmc: application/x-perfmon
|
345
|
+
.pml: application/x-perfmon
|
346
|
+
.pmr: application/x-perfmon
|
347
|
+
.pmw: application/x-perfmon
|
348
|
+
.png: image/png
|
349
|
+
.pnm: application/x-portable-anymap
|
350
|
+
.pnm: image/x-portable-anymap
|
351
|
+
.pot,: application/vnd.ms-powerpoint
|
352
|
+
.pot: application/mspowerpoint
|
353
|
+
.pot: application/vnd.ms-powerpoint
|
354
|
+
.pov: model/x-pov
|
355
|
+
.ppa: application/vnd.ms-powerpoint
|
356
|
+
.ppm: image/x-portable-pixmap
|
357
|
+
.pps: application/mspowerpoint
|
358
|
+
.ppt: application/mspowerpoint
|
359
|
+
.ppz: application/mspowerpoint
|
360
|
+
.prc: application/x-pilot
|
361
|
+
.pre: application/x-freelance
|
362
|
+
.prf: application/pics-rules
|
363
|
+
.prt: application/pro_eng
|
364
|
+
.ps: application/postscript
|
365
|
+
.psd: application/octet-stream
|
366
|
+
.pub: application/x-mspublisher
|
367
|
+
.pvu: paleovu/x-pv
|
368
|
+
.pwz: application/vnd.ms-powerpoint
|
369
|
+
.py: text/x-script.phyton
|
370
|
+
.pyc: applicaiton/x-bytecode.python
|
371
|
+
.qcp: audio/vnd.qcelp
|
372
|
+
.qd3: x-world/x-3dmf
|
373
|
+
.qd3d: x-world/x-3dmf
|
374
|
+
.qif: image/x-quicktime
|
375
|
+
.qt: video/quicktime
|
376
|
+
.qtc: video/x-qtc
|
377
|
+
.qti: image/x-quicktime
|
378
|
+
.qtif: image/x-quicktime
|
379
|
+
.ra: audio/x-pn-realaudio
|
380
|
+
.ra: audio/x-pn-realaudio-plugin
|
381
|
+
.ra: audio/x-realaudio
|
382
|
+
.ram: audio/x-pn-realaudio
|
383
|
+
.rar: application/x-rar-compressed
|
384
|
+
.ras: application/x-cmu-raster
|
385
|
+
.ras: image/cmu-raster
|
386
|
+
.ras: image/x-cmu-raster
|
387
|
+
.rast: image/cmu-raster
|
388
|
+
.rexx: text/x-script.rexx
|
389
|
+
.rf: image/vnd.rn-realflash
|
390
|
+
.rgb: image/x-rgb
|
391
|
+
.rm: application/vnd.rn-realmedia
|
392
|
+
.rm: audio/x-pn-realaudio
|
393
|
+
.rmi: audio/mid
|
394
|
+
.rmm: audio/x-pn-realaudio
|
395
|
+
.rmp: audio/x-pn-realaudio
|
396
|
+
.rmp: audio/x-pn-realaudio-plugin
|
397
|
+
.rng: application/ringing-tones
|
398
|
+
.rng: application/vnd.nokia.ringing-tone
|
399
|
+
.rnx: application/vnd.rn-realplayer
|
400
|
+
.roff: application/x-troff
|
401
|
+
.rp: image/vnd.rn-realpix
|
402
|
+
.rpm: application/x-redhat-package-manager
|
403
|
+
.rpm: audio/x-pn-realaudio-plugin
|
404
|
+
.rss: text/xml
|
405
|
+
.rt: text/richtext
|
406
|
+
.rt: text/vnd.rn-realtext
|
407
|
+
.rtf: application/rtf
|
408
|
+
.rtf: application/x-rtf
|
409
|
+
.rtf: text/richtext
|
410
|
+
.rtx: application/rtf
|
411
|
+
.rtx: text/richtext
|
412
|
+
.run: application/x-makeself
|
413
|
+
.rv: video/vnd.rn-realvideo
|
414
|
+
.s3m: audio/s3m
|
415
|
+
.s: text/x-asm
|
416
|
+
.saveme: application/octet-stream
|
417
|
+
.sbk: application/x-tbook
|
418
|
+
.scd: application/x-msschedule
|
419
|
+
.scm: application/x-lotusscreencam
|
420
|
+
.scm: text/x-script.guile
|
421
|
+
.scm: text/x-script.scheme
|
422
|
+
.scm: video/x-scm
|
423
|
+
.sct: text/scriptlet
|
424
|
+
.sdml: text/plain
|
425
|
+
.sdp: application/sdp
|
426
|
+
.sdp: application/x-sdp
|
427
|
+
.sdr: application/sounder
|
428
|
+
.sea: application/sea
|
429
|
+
.sea: application/x-sea
|
430
|
+
.set: application/set
|
431
|
+
.setpay: application/set-payment-initiation
|
432
|
+
.setreg: application/set-registration-initiation
|
433
|
+
.sgm: text/sgml
|
434
|
+
.sgm: text/x-sgml
|
435
|
+
.sgml: text/sgml
|
436
|
+
.sgml: text/x-sgml
|
437
|
+
.sh: application/x-bsh
|
438
|
+
.sh: application/x-sh
|
439
|
+
.sh: application/x-shar
|
440
|
+
.sh: text/x-script.sh
|
441
|
+
.shar: application/x-bsh
|
442
|
+
.shar: application/x-shar
|
443
|
+
.shtml: text/html
|
444
|
+
.shtml: text/x-server-parsed-html
|
445
|
+
.sid: audio/x-psid
|
446
|
+
.sit: application/x-sit
|
447
|
+
.sit: application/x-stuffit
|
448
|
+
.skd: application/x-koan
|
449
|
+
.skm: application/x-koan
|
450
|
+
.skp: application/x-koan
|
451
|
+
.skt: application/x-koan
|
452
|
+
.sl: application/x-seelogo
|
453
|
+
.smi: application/smil
|
454
|
+
.smil: application/smil
|
455
|
+
.snd: audio/basic
|
456
|
+
.snd: audio/x-adpcm
|
457
|
+
.sol: application/solids
|
458
|
+
.spc: application/x-pkcs7-certificates
|
459
|
+
.spc: text/x-speech
|
460
|
+
.spl: application/futuresplash
|
461
|
+
.spr: application/x-sprite
|
462
|
+
.sprite: application/x-sprite
|
463
|
+
.src: application/x-wais-source
|
464
|
+
.ssi: text/x-server-parsed-html
|
465
|
+
.ssm: application/streamingmedia
|
466
|
+
.sst: application/vnd.ms-pki.certstore
|
467
|
+
.sst: application/vnd.ms-pkicertstore
|
468
|
+
.step: application/step
|
469
|
+
.stl: application/sla
|
470
|
+
.stl: application/vnd.ms-pki.stl
|
471
|
+
.stl: application/vnd.ms-pkistl
|
472
|
+
.stl: application/x-navistyle
|
473
|
+
.stm: text/html
|
474
|
+
.stp: application/step
|
475
|
+
.sv4cpio: application/x-sv4cpio
|
476
|
+
.sv4crc: application/x-sv4crc
|
477
|
+
.svf: image/vnd.dwg
|
478
|
+
.svf: image/x-dwg
|
479
|
+
.svg: image/svg+xml
|
480
|
+
.svr: application/x-world
|
481
|
+
.svr: x-world/x-svr
|
482
|
+
.swf: application/x-shockwave-flash
|
483
|
+
.t: application/x-troff
|
484
|
+
.talk: text/x-speech
|
485
|
+
.tar: application/x-tar
|
486
|
+
.tbk: application/toolbook
|
487
|
+
.tbk: application/x-tbook
|
488
|
+
.tcl: application/x-tcl
|
489
|
+
.tcl: text/x-script.tcl
|
490
|
+
.tcsh: text/x-script.tcsh
|
491
|
+
.tex: application/x-tex
|
492
|
+
.texi: application/x-texinfo
|
493
|
+
.texinfo: application/x-texinfo
|
494
|
+
.text: application/plain
|
495
|
+
.text: text/plain
|
496
|
+
.tgz: application/gnutar
|
497
|
+
.tgz: application/x-compressed
|
498
|
+
.tif: image/tiff
|
499
|
+
.tiff: image/tiff
|
500
|
+
.tk: application/x-tcl
|
501
|
+
.tr: application/x-troff
|
502
|
+
.trm: application/x-msterminal
|
503
|
+
.tsi: audio/tsp-audio
|
504
|
+
.tsp: application/dsptype
|
505
|
+
.tsp: audio/tsplayer
|
506
|
+
.tsv: text/tab-separated-values
|
507
|
+
.turbot: image/florian
|
508
|
+
.txt: text/plain
|
509
|
+
.uil: text/x-uil
|
510
|
+
.uls: text/iuls
|
511
|
+
.uni: text/uri-list
|
512
|
+
.unis: text/uri-list
|
513
|
+
.unv: application/i-deas
|
514
|
+
.uri: text/uri-list
|
515
|
+
.uris: text/uri-list
|
516
|
+
.ustar: application/x-ustar
|
517
|
+
.ustar: multipart/x-ustar
|
518
|
+
.uu: application/octet-stream
|
519
|
+
.uu: text/x-uuencode
|
520
|
+
.uue: text/x-uuencode
|
521
|
+
.vcd: application/x-cdlink
|
522
|
+
.vcf: text/x-vcard
|
523
|
+
.vcs: text/x-vcalendar
|
524
|
+
.vda: application/vda
|
525
|
+
.vdo: video/vdo
|
526
|
+
.vew: application/groupwise
|
527
|
+
.viv: video/vivo
|
528
|
+
.viv: video/vnd.vivo
|
529
|
+
.vivo: video/vivo
|
530
|
+
.vivo: video/vnd.vivo
|
531
|
+
.vmd: application/vocaltec-media-desc
|
532
|
+
.vmf: application/vocaltec-media-file
|
533
|
+
.voc: audio/voc
|
534
|
+
.voc: audio/x-voc
|
535
|
+
.vos: video/vosaic
|
536
|
+
.vox: audio/voxware
|
537
|
+
.vqe: audio/x-twinvq-plugin
|
538
|
+
.vqf: audio/x-twinvq
|
539
|
+
.vql: audio/x-twinvq-plugin
|
540
|
+
.vrml: application/x-vrml
|
541
|
+
.vrml: model/vrml
|
542
|
+
.vrml: x-world/x-vrml
|
543
|
+
.vrt: x-world/x-vrt
|
544
|
+
.vsd: application/x-visio
|
545
|
+
.vst: application/x-visio
|
546
|
+
.vsw: application/x-visio
|
547
|
+
.w60: application/wordperfect6.0
|
548
|
+
.w61: application/wordperfect6.1
|
549
|
+
.w6w: application/msword
|
550
|
+
.war: application/java-archive
|
551
|
+
.wav: audio/wav
|
552
|
+
.wav: audio/x-wav
|
553
|
+
.wb1: application/x-qpro
|
554
|
+
.wbmp: image/vnd.wap.wbmp
|
555
|
+
.wbmp: image/vnd.wap.wbmp
|
556
|
+
.wcm: application/vnd.ms-works
|
557
|
+
.wdb: application/vnd.ms-works
|
558
|
+
.web: application/vnd.xara
|
559
|
+
.wiz: application/msword
|
560
|
+
.wk1: application/x-123
|
561
|
+
.wks: application/vnd.ms-works
|
562
|
+
.wmf: application/x-msmetafile
|
563
|
+
.wmf: windows/metafile
|
564
|
+
.wml: text/vnd.wap.wml
|
565
|
+
.wmlc: application/vnd.wap.wmlc
|
566
|
+
.wmls: text/vnd.wap.wmlscript
|
567
|
+
.wmlsc: application/vnd.wap.wmlscriptc
|
568
|
+
.wmv: video/x-ms-wmv
|
569
|
+
.word: application/msword
|
570
|
+
.wp5: application/wordperfect
|
571
|
+
.wp6: application/wordperfect
|
572
|
+
.wp: application/wordperfect
|
573
|
+
.wpd: application/wordperfect
|
574
|
+
.wps: application/vnd.ms-works
|
575
|
+
.wq1: application/x-lotus
|
576
|
+
.wri: application/mswrite
|
577
|
+
.wrl: application/x-world
|
578
|
+
.wsc: text/scriplet
|
579
|
+
.wsrc: application/x-wais-source
|
580
|
+
.wtk: application/x-wintalk
|
581
|
+
.x-png: image/png
|
582
|
+
.xaf: x-world/x-vrml
|
583
|
+
.xbm: image/xbm
|
584
|
+
.xdr: video/x-amt-demorun
|
585
|
+
.xgz: xgl/drawing
|
586
|
+
.xhtml: application/xhtml+xml
|
587
|
+
.xif: image/vnd.xiff
|
588
|
+
.xl: application/excel
|
589
|
+
.xla: application/excel
|
590
|
+
.xlb: application/excel
|
591
|
+
.xlc: application/excel
|
592
|
+
.xld: application/excel
|
593
|
+
.xlk: application/excel
|
594
|
+
.xll: application/excel
|
595
|
+
.xlm: application/excel
|
596
|
+
.xls: application/excel
|
597
|
+
.xlt: application/excel
|
598
|
+
.xlv: application/excel
|
599
|
+
.xlw: application/excel
|
600
|
+
.xm: audio/xm
|
601
|
+
.xml: text/xml
|
602
|
+
.xmz: xgl/movie
|
603
|
+
.xof: x-world/x-vrml
|
604
|
+
.xpi: application/x-xpinstall
|
605
|
+
.xpix: application/x-vnd.ls-xpix
|
606
|
+
.xpm: image/x-xpixmap
|
607
|
+
.xpm: image/xpm
|
608
|
+
.xsl: application/xslt+xml
|
609
|
+
.xsr: video/x-amt-showrun
|
610
|
+
.xwd: image/x-xwd
|
611
|
+
.xwd: image/x-xwindowdump
|
612
|
+
.xyz: chemical/x-pdb
|
613
|
+
.z: application/x-compressed
|
614
|
+
.zip: application/zip
|
615
|
+
.zoo: application/octet-stream
|
616
|
+
.zsh: text/x-script.zsh
|