waitress-core 0.0.1
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.
- checksums.yaml +7 -0
- data/Gemfile +4 -0
- data/LICENSE +21 -0
- data/Rakefile +4 -0
- data/bin/waitress +22 -0
- data/ext/Thanks.md +1 -0
- data/ext/waitress_http11/ext_help.h +15 -0
- data/ext/waitress_http11/extconf.rb +6 -0
- data/ext/waitress_http11/http11.c +532 -0
- data/ext/waitress_http11/http11_parser.c +1216 -0
- data/ext/waitress_http11/http11_parser.h +49 -0
- data/ext/waitress_http11/http11_parser.java.rl +171 -0
- data/ext/waitress_http11/http11_parser.rl +165 -0
- data/ext/waitress_http11/http11_parser_common.rl +55 -0
- data/ext/waitress_http11/http11_wrb_parser.h +83 -0
- data/lib/waitress.rb +98 -0
- data/lib/waitress/chef.rb +110 -0
- data/lib/waitress/configure.rb +116 -0
- data/lib/waitress/handlers/dirhandler.rb +39 -0
- data/lib/waitress/handlers/handler.rb +57 -0
- data/lib/waitress/handlers/handler404.rb +25 -0
- data/lib/waitress/handlers/libhandler.rb +58 -0
- data/lib/waitress/kernel.rb +182 -0
- data/lib/waitress/parse/query.rb +60 -0
- data/lib/waitress/request.rb +45 -0
- data/lib/waitress/resources/default_config.rb +52 -0
- data/lib/waitress/resources/http/404.html +18 -0
- data/lib/waitress/resources/http/css/hack.css +37 -0
- data/lib/waitress/resources/http/css/waitress.css +57 -0
- data/lib/waitress/resources/http/fonts/eot/latin/hack-bold-latin-webfont.eot +0 -0
- data/lib/waitress/resources/http/fonts/eot/latin/hack-bolditalic-latin-webfont.eot +0 -0
- data/lib/waitress/resources/http/fonts/eot/latin/hack-italic-latin-webfont.eot +0 -0
- data/lib/waitress/resources/http/fonts/eot/latin/hack-regular-latin-webfont.eot +0 -0
- data/lib/waitress/resources/http/fonts/svg/latin/hack-bold-latin-webfont.svg +241 -0
- data/lib/waitress/resources/http/fonts/svg/latin/hack-bolditalic-latin-webfont.svg +241 -0
- data/lib/waitress/resources/http/fonts/svg/latin/hack-italic-latin-webfont.svg +241 -0
- data/lib/waitress/resources/http/fonts/svg/latin/hack-regular-latin-webfont.svg +241 -0
- data/lib/waitress/resources/http/fonts/web-ttf/latin/hack-bold-latin-webfont.ttf +0 -0
- data/lib/waitress/resources/http/fonts/web-ttf/latin/hack-bolditalic-latin-webfont.ttf +0 -0
- data/lib/waitress/resources/http/fonts/web-ttf/latin/hack-italic-latin-webfont.ttf +0 -0
- data/lib/waitress/resources/http/fonts/web-ttf/latin/hack-regular-latin-webfont.ttf +0 -0
- data/lib/waitress/resources/http/fonts/woff/latin/hack-bold-latin-webfont.woff +0 -0
- data/lib/waitress/resources/http/fonts/woff/latin/hack-bolditalic-latin-webfont.woff +0 -0
- data/lib/waitress/resources/http/fonts/woff/latin/hack-italic-latin-webfont.woff +0 -0
- data/lib/waitress/resources/http/fonts/woff/latin/hack-regular-latin-webfont.woff +0 -0
- data/lib/waitress/resources/http/fonts/woff2/latin/hack-bold-latin-webfont.woff2 +0 -0
- data/lib/waitress/resources/http/fonts/woff2/latin/hack-bolditalic-latin-webfont.woff2 +0 -0
- data/lib/waitress/resources/http/fonts/woff2/latin/hack-italic-latin-webfont.woff2 +0 -0
- data/lib/waitress/resources/http/fonts/woff2/latin/hack-regular-latin-webfont.woff2 +0 -0
- data/lib/waitress/resources/http/img/404.png +0 -0
- data/lib/waitress/resources/http/index.html +15 -0
- data/lib/waitress/response.rb +104 -0
- data/lib/waitress/server.rb +115 -0
- data/lib/waitress/util.rb +713 -0
- data/lib/waitress/version.rb +3 -0
- data/lib/waitress/vhost.rb +217 -0
- data/lib/waitress_http11.so +0 -0
- data/waitress-core.gemspec +27 -0
- metadata +187 -0
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title> Welcome to Waitress </title>
|
4
|
+
<link rel="stylesheet" href="css/hack.css">
|
5
|
+
<link rel="stylesheet" href="css/waitress.css">
|
6
|
+
</head>
|
7
|
+
<body>
|
8
|
+
<div id="maincontainer">
|
9
|
+
<div class="titlecontainer">
|
10
|
+
<h1> Waitress </h1>
|
11
|
+
<h2> Please take a seat and let me take your order </h2>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
</body>
|
15
|
+
</html>
|
@@ -0,0 +1,104 @@
|
|
1
|
+
module Waitress
|
2
|
+
# The response class is used to cook responses to be served to the client.
|
3
|
+
# This class contains things like response headers, status codes and the response
|
4
|
+
# body itself
|
5
|
+
class Response
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@headers = {}
|
9
|
+
status 200
|
10
|
+
default_headers
|
11
|
+
@isdone = false
|
12
|
+
end
|
13
|
+
|
14
|
+
# Returns true if the response has already been sent to the client
|
15
|
+
def done?
|
16
|
+
@isdone
|
17
|
+
end
|
18
|
+
|
19
|
+
# Mark the response as done (already sent to the client)
|
20
|
+
def done state=true
|
21
|
+
@isdone = state
|
22
|
+
end
|
23
|
+
|
24
|
+
# Apply the default headers to this response
|
25
|
+
def default_headers
|
26
|
+
header "Server", "Waitress #{Waitress::VERSION} (#{RUBY_PLATFORM})"
|
27
|
+
end
|
28
|
+
|
29
|
+
# Apply the given Status code to the response, such as 200, 404, 500 or
|
30
|
+
# any other code listed in the HTTP protocol specification
|
31
|
+
def status status_code
|
32
|
+
@status = status_code
|
33
|
+
@status_msg = Waitress::Util.status @status
|
34
|
+
header "Status", "#{@status} #{@status_msg}"
|
35
|
+
end
|
36
|
+
|
37
|
+
# Set the mimetype (Content-Type header) of this response to the one matching
|
38
|
+
# the given file extension as matched by the +Waitress::Util+ class
|
39
|
+
# +filext+:: The file extension to match, e.g. .html, .css, .js
|
40
|
+
def mime filext
|
41
|
+
m = Waitress::Util.mime filext
|
42
|
+
header "Content-Type", m
|
43
|
+
end
|
44
|
+
|
45
|
+
# Set the mimetype (Content-Type header) of this response to the one given.
|
46
|
+
# +type+:: The mime type to use, e.g. application/json, text/html,
|
47
|
+
# application/scon
|
48
|
+
def mime_raw type
|
49
|
+
header "Content-Type", type
|
50
|
+
end
|
51
|
+
|
52
|
+
# Set a header for the response. This header will be encoded to the http
|
53
|
+
# response
|
54
|
+
# Params:
|
55
|
+
# +header+:: The name of the header. e.g. "Content-Type"
|
56
|
+
# +data+:: The data to be encoded into the header. e.g. "text/html"
|
57
|
+
def header header, data
|
58
|
+
@headers[header] = data
|
59
|
+
end
|
60
|
+
|
61
|
+
# Set the Body IO object for the response. This IO object will be read from
|
62
|
+
# when the webpage is served, so usually this is a File reference or a StringIO
|
63
|
+
# +io+:: The io object to use. Not required if you just want to get the IO object
|
64
|
+
def body_io io=:get
|
65
|
+
@io = io unless io == :get
|
66
|
+
@io
|
67
|
+
end
|
68
|
+
|
69
|
+
# Append something to the Body IO. If the Body IO is a StringIO, this will usually be
|
70
|
+
# a String. This is mostly used for the 'echo' function
|
71
|
+
def append obj
|
72
|
+
@io.write obj
|
73
|
+
end
|
74
|
+
|
75
|
+
# Set the body to be a String. This will replace the BodyIO with a StringIO
|
76
|
+
# containing the string
|
77
|
+
# +str+:: The new string to replace the BodyIO with
|
78
|
+
def body str
|
79
|
+
body_io StringIO.new(str)
|
80
|
+
end
|
81
|
+
|
82
|
+
# Serve the response to the given socket. This will write the Headers, Response
|
83
|
+
# Code and Body.
|
84
|
+
def serve sock
|
85
|
+
unless done?
|
86
|
+
sock.write "HTTP/1.1 #{@status} #{@status_msg}\r\n"
|
87
|
+
@headers.each do |k, v|
|
88
|
+
sock.write "#{k}: #{v}\r\n"
|
89
|
+
end
|
90
|
+
sock.write "\r\n"
|
91
|
+
unless @io.nil?
|
92
|
+
@io.pos = 0
|
93
|
+
until @io.eof?
|
94
|
+
s = @io.read(4096)
|
95
|
+
sock.write s
|
96
|
+
end
|
97
|
+
end
|
98
|
+
done
|
99
|
+
sock.close
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'socket'
|
2
|
+
require 'thread'
|
3
|
+
|
4
|
+
module Waitress
|
5
|
+
|
6
|
+
# The Waitress HTTPServer. This class is responsible for handling traffic from
|
7
|
+
# clients and delegating it to the correct Virtual Host to further handle.
|
8
|
+
# New threads and Processes are spawned for each connection to the server
|
9
|
+
class HttpServer < Array
|
10
|
+
|
11
|
+
class HttpParams < Hash
|
12
|
+
attr_accessor :http_body
|
13
|
+
end
|
14
|
+
|
15
|
+
# Create a new Server instance with the given ports. If no ports are given,
|
16
|
+
# port 80 will be used as a default
|
17
|
+
def initialize(*ports)
|
18
|
+
ports << 80 if ports.length == 0
|
19
|
+
@ports = ports
|
20
|
+
end
|
21
|
+
|
22
|
+
# Set or Get the ports for this server. If arguments are provided, the ports
|
23
|
+
# for this server will be replaced with the ones listed. If no arguments are provided,
|
24
|
+
# this method simply returns the ports
|
25
|
+
def ports *ports
|
26
|
+
@ports = *ports unless ports.length == 0
|
27
|
+
@ports
|
28
|
+
end
|
29
|
+
|
30
|
+
# Start the server. If arguments are provided, it will run with the ports
|
31
|
+
# declared in the arguments, otherwise, it will use the ports it already has
|
32
|
+
# set (or 80 for the default)
|
33
|
+
def run *ports
|
34
|
+
@ports = ports unless ports.length == 0
|
35
|
+
@threads = @ports.map { |x| Thread.new { launch_port x } }
|
36
|
+
self.each do |vhost|
|
37
|
+
vhost.on_server_start self
|
38
|
+
end
|
39
|
+
self
|
40
|
+
end
|
41
|
+
|
42
|
+
# Join the server, blocking the current thread in order to keep the server alive.
|
43
|
+
def join
|
44
|
+
@threads.each { |x| x.join }
|
45
|
+
end
|
46
|
+
|
47
|
+
# Handle a client based on an IO stream, if you plan to serve on a non-socket
|
48
|
+
# connection
|
49
|
+
def read_io io
|
50
|
+
handle_client io
|
51
|
+
end
|
52
|
+
|
53
|
+
:private
|
54
|
+
def launch_port port
|
55
|
+
@server = TCPServer.new port
|
56
|
+
while true
|
57
|
+
client = @server.accept
|
58
|
+
go do
|
59
|
+
begin
|
60
|
+
handle_client client
|
61
|
+
rescue => e
|
62
|
+
puts "Server Error: #{e} (Fix This!)"
|
63
|
+
puts e.backtrace
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def handle_client client_socket
|
70
|
+
begin
|
71
|
+
data = client_socket.readpartial(8196)
|
72
|
+
rescue
|
73
|
+
client_socket.close unless client_socket.closed?
|
74
|
+
return
|
75
|
+
end
|
76
|
+
|
77
|
+
gofork do
|
78
|
+
parser = Waitress::HttpParser.new
|
79
|
+
params = HttpParams.new
|
80
|
+
parser.execute(params, data, 0)
|
81
|
+
build_request params, client_socket
|
82
|
+
end.wait
|
83
|
+
client_socket.close
|
84
|
+
end
|
85
|
+
|
86
|
+
def build_request headers, client_socket
|
87
|
+
request_headers = {}
|
88
|
+
headers.each do |k,v|
|
89
|
+
if k.start_with? "HTTP_HEAD_"
|
90
|
+
request_headers[k.sub(/HTTP_HEAD_/, "")] = v
|
91
|
+
end
|
92
|
+
end
|
93
|
+
request = Waitress::Request.new(
|
94
|
+
headers["REQUEST_METHOD"], headers["REQUEST_PATH"], headers["REQUEST_URI"],
|
95
|
+
headers["QUERY_STRING"], headers["HTTP_VERSION"], headers.http_body, request_headers
|
96
|
+
)
|
97
|
+
handle_request request, client_socket
|
98
|
+
end
|
99
|
+
|
100
|
+
def handle_request request, client
|
101
|
+
match, pri = self[0], nil
|
102
|
+
self.each do |vhost|
|
103
|
+
if (request.headers['Host'].to_s =~ vhost.domain) != nil
|
104
|
+
match = vhost if pri.nil? || vhost.priority > pri
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
if match.nil?
|
109
|
+
# Subdomain not found (or default)
|
110
|
+
else
|
111
|
+
match.handle_request request, client
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,713 @@
|
|
1
|
+
module Waitress
|
2
|
+
# A small utility class responsible for determining Mime Types, Status responses
|
3
|
+
# and host details such as Operating System
|
4
|
+
class Util
|
5
|
+
|
6
|
+
# Match a file extension to a valid Mime Type to be used in Content-Type
|
7
|
+
# headers
|
8
|
+
# +ext+:: The file extension to map
|
9
|
+
# +default+:: The default value to use if a match is not found. Defaults to
|
10
|
+
# application/octet-stream
|
11
|
+
def self.mime ext, default='application/octet-stream'
|
12
|
+
MIME_TYPES.fetch(ext.to_s.downcase, default)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Get the status message for a status code. This matches codes used by the
|
16
|
+
# HTTP protocol to their message, e.g. 200 -> OK, 404 -> Not Found, etc
|
17
|
+
# +code+:: The Status Code to match.
|
18
|
+
def self.status code
|
19
|
+
STATUS[code]
|
20
|
+
end
|
21
|
+
|
22
|
+
# Get the host Operating System of the system.
|
23
|
+
def self.os
|
24
|
+
RbConfig::CONFIG['host_os']
|
25
|
+
end
|
26
|
+
|
27
|
+
STATUS = {
|
28
|
+
100 => "Continue",
|
29
|
+
101 => "Switching Protocols",
|
30
|
+
102 => "Processing",
|
31
|
+
|
32
|
+
200 => "OK",
|
33
|
+
201 => "Created",
|
34
|
+
202 => "Accepted",
|
35
|
+
203 => "Non-Authoritative Information",
|
36
|
+
204 => "No Content",
|
37
|
+
205 => "Reset Content",
|
38
|
+
206 => "Partial Content",
|
39
|
+
207 => "Multi-Status",
|
40
|
+
208 => "Already Reported",
|
41
|
+
226 => "IM Used",
|
42
|
+
|
43
|
+
300 => "Multiple Choices",
|
44
|
+
301 => "Moved Permanently",
|
45
|
+
302 => "Found",
|
46
|
+
303 => "See Other",
|
47
|
+
304 => "Not Modified",
|
48
|
+
305 => "Use Proxy",
|
49
|
+
307 => "Temporary Redirect",
|
50
|
+
308 => "Permanent Redirect",
|
51
|
+
|
52
|
+
400 => "Bad Request",
|
53
|
+
401 => "Unauthorized",
|
54
|
+
403 => "Forbidden",
|
55
|
+
404 => "Not Found",
|
56
|
+
405 => "Method Not Allowed",
|
57
|
+
406 => "Not Acceptable",
|
58
|
+
407 => "Proxy Authentication Required",
|
59
|
+
408 => "Request Timeout",
|
60
|
+
409 => "Conflict",
|
61
|
+
410 => "Gone",
|
62
|
+
411 => "Length Required",
|
63
|
+
412 => "Precondition Failed",
|
64
|
+
413 => "Payload Too Large",
|
65
|
+
414 => "Request-URI Too Long",
|
66
|
+
415 => "Unsupported Media Type",
|
67
|
+
416 => "Requested Range Not Satifiable",
|
68
|
+
417 => "Expectation Failed",
|
69
|
+
418 => "I'm a teapot",
|
70
|
+
426 => "Update Required",
|
71
|
+
429 => "Too Many Requests",
|
72
|
+
|
73
|
+
500 => "Internal Server Error",
|
74
|
+
501 => "Not Implemented",
|
75
|
+
502 => "Bad Gateway",
|
76
|
+
503 => "Service Unavailable",
|
77
|
+
504 => "Gateway Timeout",
|
78
|
+
505 => "HTTP Version Not Supported",
|
79
|
+
520 => "Unknown Error"
|
80
|
+
}
|
81
|
+
|
82
|
+
# Taken from Rack::Mime
|
83
|
+
MIME_TYPES = {
|
84
|
+
".123" => "application/vnd.lotus-1-2-3",
|
85
|
+
".3dml" => "text/vnd.in3d.3dml",
|
86
|
+
".3g2" => "video/3gpp2",
|
87
|
+
".3gp" => "video/3gpp",
|
88
|
+
".a" => "application/octet-stream",
|
89
|
+
".acc" => "application/vnd.americandynamics.acc",
|
90
|
+
".ace" => "application/x-ace-compressed",
|
91
|
+
".acu" => "application/vnd.acucobol",
|
92
|
+
".aep" => "application/vnd.audiograph",
|
93
|
+
".afp" => "application/vnd.ibm.modcap",
|
94
|
+
".ai" => "application/postscript",
|
95
|
+
".aif" => "audio/x-aiff",
|
96
|
+
".aiff" => "audio/x-aiff",
|
97
|
+
".ami" => "application/vnd.amiga.ami",
|
98
|
+
".appcache" => "text/cache-manifest",
|
99
|
+
".apr" => "application/vnd.lotus-approach",
|
100
|
+
".asc" => "application/pgp-signature",
|
101
|
+
".asf" => "video/x-ms-asf",
|
102
|
+
".asm" => "text/x-asm",
|
103
|
+
".aso" => "application/vnd.accpac.simply.aso",
|
104
|
+
".asx" => "video/x-ms-asf",
|
105
|
+
".atc" => "application/vnd.acucorp",
|
106
|
+
".atom" => "application/atom+xml",
|
107
|
+
".atomcat" => "application/atomcat+xml",
|
108
|
+
".atomsvc" => "application/atomsvc+xml",
|
109
|
+
".atx" => "application/vnd.antix.game-component",
|
110
|
+
".au" => "audio/basic",
|
111
|
+
".avi" => "video/x-msvideo",
|
112
|
+
".bat" => "application/x-msdownload",
|
113
|
+
".bcpio" => "application/x-bcpio",
|
114
|
+
".bdm" => "application/vnd.syncml.dm+wbxml",
|
115
|
+
".bh2" => "application/vnd.fujitsu.oasysprs",
|
116
|
+
".bin" => "application/octet-stream",
|
117
|
+
".bmi" => "application/vnd.bmi",
|
118
|
+
".bmp" => "image/bmp",
|
119
|
+
".box" => "application/vnd.previewsystems.box",
|
120
|
+
".btif" => "image/prs.btif",
|
121
|
+
".bz" => "application/x-bzip",
|
122
|
+
".bz2" => "application/x-bzip2",
|
123
|
+
".c" => "text/x-c",
|
124
|
+
".c4g" => "application/vnd.clonk.c4group",
|
125
|
+
".cab" => "application/vnd.ms-cab-compressed",
|
126
|
+
".cc" => "text/x-c",
|
127
|
+
".ccxml" => "application/ccxml+xml",
|
128
|
+
".cdbcmsg" => "application/vnd.contact.cmsg",
|
129
|
+
".cdkey" => "application/vnd.mediastation.cdkey",
|
130
|
+
".cdx" => "chemical/x-cdx",
|
131
|
+
".cdxml" => "application/vnd.chemdraw+xml",
|
132
|
+
".cdy" => "application/vnd.cinderella",
|
133
|
+
".cer" => "application/pkix-cert",
|
134
|
+
".cgm" => "image/cgm",
|
135
|
+
".chat" => "application/x-chat",
|
136
|
+
".chm" => "application/vnd.ms-htmlhelp",
|
137
|
+
".chrt" => "application/vnd.kde.kchart",
|
138
|
+
".cif" => "chemical/x-cif",
|
139
|
+
".cii" => "application/vnd.anser-web-certificate-issue-initiation",
|
140
|
+
".cil" => "application/vnd.ms-artgalry",
|
141
|
+
".cla" => "application/vnd.claymore",
|
142
|
+
".class" => "application/octet-stream",
|
143
|
+
".clkk" => "application/vnd.crick.clicker.keyboard",
|
144
|
+
".clkp" => "application/vnd.crick.clicker.palette",
|
145
|
+
".clkt" => "application/vnd.crick.clicker.template",
|
146
|
+
".clkw" => "application/vnd.crick.clicker.wordbank",
|
147
|
+
".clkx" => "application/vnd.crick.clicker",
|
148
|
+
".clp" => "application/x-msclip",
|
149
|
+
".cmc" => "application/vnd.cosmocaller",
|
150
|
+
".cmdf" => "chemical/x-cmdf",
|
151
|
+
".cml" => "chemical/x-cml",
|
152
|
+
".cmp" => "application/vnd.yellowriver-custom-menu",
|
153
|
+
".cmx" => "image/x-cmx",
|
154
|
+
".com" => "application/x-msdownload",
|
155
|
+
".conf" => "text/plain",
|
156
|
+
".cpio" => "application/x-cpio",
|
157
|
+
".cpp" => "text/x-c",
|
158
|
+
".cpt" => "application/mac-compactpro",
|
159
|
+
".crd" => "application/x-mscardfile",
|
160
|
+
".crl" => "application/pkix-crl",
|
161
|
+
".crt" => "application/x-x509-ca-cert",
|
162
|
+
".csh" => "application/x-csh",
|
163
|
+
".csml" => "chemical/x-csml",
|
164
|
+
".csp" => "application/vnd.commonspace",
|
165
|
+
".css" => "text/css",
|
166
|
+
".csv" => "text/csv",
|
167
|
+
".curl" => "application/vnd.curl",
|
168
|
+
".cww" => "application/prs.cww",
|
169
|
+
".cxx" => "text/x-c",
|
170
|
+
".daf" => "application/vnd.mobius.daf",
|
171
|
+
".davmount" => "application/davmount+xml",
|
172
|
+
".dcr" => "application/x-director",
|
173
|
+
".dd2" => "application/vnd.oma.dd2+xml",
|
174
|
+
".ddd" => "application/vnd.fujixerox.ddd",
|
175
|
+
".deb" => "application/x-debian-package",
|
176
|
+
".der" => "application/x-x509-ca-cert",
|
177
|
+
".dfac" => "application/vnd.dreamfactory",
|
178
|
+
".diff" => "text/x-diff",
|
179
|
+
".dis" => "application/vnd.mobius.dis",
|
180
|
+
".djv" => "image/vnd.djvu",
|
181
|
+
".djvu" => "image/vnd.djvu",
|
182
|
+
".dll" => "application/x-msdownload",
|
183
|
+
".dmg" => "application/octet-stream",
|
184
|
+
".dna" => "application/vnd.dna",
|
185
|
+
".doc" => "application/msword",
|
186
|
+
".docm" => "application/vnd.ms-word.document.macroEnabled.12",
|
187
|
+
".docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
188
|
+
".dot" => "application/msword",
|
189
|
+
".dotm" => "application/vnd.ms-word.template.macroEnabled.12",
|
190
|
+
".dotx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.template",
|
191
|
+
".dp" => "application/vnd.osgi.dp",
|
192
|
+
".dpg" => "application/vnd.dpgraph",
|
193
|
+
".dsc" => "text/prs.lines.tag",
|
194
|
+
".dtd" => "application/xml-dtd",
|
195
|
+
".dts" => "audio/vnd.dts",
|
196
|
+
".dtshd" => "audio/vnd.dts.hd",
|
197
|
+
".dv" => "video/x-dv",
|
198
|
+
".dvi" => "application/x-dvi",
|
199
|
+
".dwf" => "model/vnd.dwf",
|
200
|
+
".dwg" => "image/vnd.dwg",
|
201
|
+
".dxf" => "image/vnd.dxf",
|
202
|
+
".dxp" => "application/vnd.spotfire.dxp",
|
203
|
+
".ear" => "application/java-archive",
|
204
|
+
".ecelp4800" => "audio/vnd.nuera.ecelp4800",
|
205
|
+
".ecelp7470" => "audio/vnd.nuera.ecelp7470",
|
206
|
+
".ecelp9600" => "audio/vnd.nuera.ecelp9600",
|
207
|
+
".ecma" => "application/ecmascript",
|
208
|
+
".edm" => "application/vnd.novadigm.edm",
|
209
|
+
".edx" => "application/vnd.novadigm.edx",
|
210
|
+
".efif" => "application/vnd.picsel",
|
211
|
+
".ei6" => "application/vnd.pg.osasli",
|
212
|
+
".eml" => "message/rfc822",
|
213
|
+
".eol" => "audio/vnd.digital-winds",
|
214
|
+
".eot" => "application/vnd.ms-fontobject",
|
215
|
+
".eps" => "application/postscript",
|
216
|
+
".es3" => "application/vnd.eszigno3+xml",
|
217
|
+
".esf" => "application/vnd.epson.esf",
|
218
|
+
".etx" => "text/x-setext",
|
219
|
+
".exe" => "application/x-msdownload",
|
220
|
+
".ext" => "application/vnd.novadigm.ext",
|
221
|
+
".ez" => "application/andrew-inset",
|
222
|
+
".ez2" => "application/vnd.ezpix-album",
|
223
|
+
".ez3" => "application/vnd.ezpix-package",
|
224
|
+
".f" => "text/x-fortran",
|
225
|
+
".f77" => "text/x-fortran",
|
226
|
+
".f90" => "text/x-fortran",
|
227
|
+
".fbs" => "image/vnd.fastbidsheet",
|
228
|
+
".fdf" => "application/vnd.fdf",
|
229
|
+
".fe_launch" => "application/vnd.denovo.fcselayout-link",
|
230
|
+
".fg5" => "application/vnd.fujitsu.oasysgp",
|
231
|
+
".fli" => "video/x-fli",
|
232
|
+
".flo" => "application/vnd.micrografx.flo",
|
233
|
+
".flv" => "video/x-flv",
|
234
|
+
".flw" => "application/vnd.kde.kivio",
|
235
|
+
".flx" => "text/vnd.fmi.flexstor",
|
236
|
+
".fly" => "text/vnd.fly",
|
237
|
+
".fm" => "application/vnd.framemaker",
|
238
|
+
".fnc" => "application/vnd.frogans.fnc",
|
239
|
+
".for" => "text/x-fortran",
|
240
|
+
".fpx" => "image/vnd.fpx",
|
241
|
+
".fsc" => "application/vnd.fsc.weblaunch",
|
242
|
+
".fst" => "image/vnd.fst",
|
243
|
+
".ftc" => "application/vnd.fluxtime.clip",
|
244
|
+
".fti" => "application/vnd.anser-web-funds-transfer-initiation",
|
245
|
+
".fvt" => "video/vnd.fvt",
|
246
|
+
".fzs" => "application/vnd.fuzzysheet",
|
247
|
+
".g3" => "image/g3fax",
|
248
|
+
".gac" => "application/vnd.groove-account",
|
249
|
+
".gdl" => "model/vnd.gdl",
|
250
|
+
".gem" => "application/octet-stream",
|
251
|
+
".gemspec" => "text/x-script.ruby",
|
252
|
+
".ghf" => "application/vnd.groove-help",
|
253
|
+
".gif" => "image/gif",
|
254
|
+
".gim" => "application/vnd.groove-identity-message",
|
255
|
+
".gmx" => "application/vnd.gmx",
|
256
|
+
".gph" => "application/vnd.flographit",
|
257
|
+
".gqf" => "application/vnd.grafeq",
|
258
|
+
".gram" => "application/srgs",
|
259
|
+
".grv" => "application/vnd.groove-injector",
|
260
|
+
".grxml" => "application/srgs+xml",
|
261
|
+
".gtar" => "application/x-gtar",
|
262
|
+
".gtm" => "application/vnd.groove-tool-message",
|
263
|
+
".gtw" => "model/vnd.gtw",
|
264
|
+
".gv" => "text/vnd.graphviz",
|
265
|
+
".gz" => "application/x-gzip",
|
266
|
+
".h" => "text/x-c",
|
267
|
+
".h261" => "video/h261",
|
268
|
+
".h263" => "video/h263",
|
269
|
+
".h264" => "video/h264",
|
270
|
+
".hbci" => "application/vnd.hbci",
|
271
|
+
".hdf" => "application/x-hdf",
|
272
|
+
".hh" => "text/x-c",
|
273
|
+
".hlp" => "application/winhlp",
|
274
|
+
".hpgl" => "application/vnd.hp-hpgl",
|
275
|
+
".hpid" => "application/vnd.hp-hpid",
|
276
|
+
".hps" => "application/vnd.hp-hps",
|
277
|
+
".hqx" => "application/mac-binhex40",
|
278
|
+
".htc" => "text/x-component",
|
279
|
+
".htke" => "application/vnd.kenameaapp",
|
280
|
+
".htm" => "text/html",
|
281
|
+
".html" => "text/html",
|
282
|
+
".hvd" => "application/vnd.yamaha.hv-dic",
|
283
|
+
".hvp" => "application/vnd.yamaha.hv-voice",
|
284
|
+
".hvs" => "application/vnd.yamaha.hv-script",
|
285
|
+
".icc" => "application/vnd.iccprofile",
|
286
|
+
".ice" => "x-conference/x-cooltalk",
|
287
|
+
".ico" => "image/vnd.microsoft.icon",
|
288
|
+
".ics" => "text/calendar",
|
289
|
+
".ief" => "image/ief",
|
290
|
+
".ifb" => "text/calendar",
|
291
|
+
".ifm" => "application/vnd.shana.informed.formdata",
|
292
|
+
".igl" => "application/vnd.igloader",
|
293
|
+
".igs" => "model/iges",
|
294
|
+
".igx" => "application/vnd.micrografx.igx",
|
295
|
+
".iif" => "application/vnd.shana.informed.interchange",
|
296
|
+
".imp" => "application/vnd.accpac.simply.imp",
|
297
|
+
".ims" => "application/vnd.ms-ims",
|
298
|
+
".ipk" => "application/vnd.shana.informed.package",
|
299
|
+
".irm" => "application/vnd.ibm.rights-management",
|
300
|
+
".irp" => "application/vnd.irepository.package+xml",
|
301
|
+
".iso" => "application/octet-stream",
|
302
|
+
".itp" => "application/vnd.shana.informed.formtemplate",
|
303
|
+
".ivp" => "application/vnd.immervision-ivp",
|
304
|
+
".ivu" => "application/vnd.immervision-ivu",
|
305
|
+
".jad" => "text/vnd.sun.j2me.app-descriptor",
|
306
|
+
".jam" => "application/vnd.jam",
|
307
|
+
".jar" => "application/java-archive",
|
308
|
+
".java" => "text/x-java-source",
|
309
|
+
".jisp" => "application/vnd.jisp",
|
310
|
+
".jlt" => "application/vnd.hp-jlyt",
|
311
|
+
".jnlp" => "application/x-java-jnlp-file",
|
312
|
+
".joda" => "application/vnd.joost.joda-archive",
|
313
|
+
".jp2" => "image/jp2",
|
314
|
+
".jpeg" => "image/jpeg",
|
315
|
+
".jpg" => "image/jpeg",
|
316
|
+
".jpgv" => "video/jpeg",
|
317
|
+
".jpm" => "video/jpm",
|
318
|
+
".js" => "application/javascript",
|
319
|
+
".json" => "application/json",
|
320
|
+
".karbon" => "application/vnd.kde.karbon",
|
321
|
+
".kfo" => "application/vnd.kde.kformula",
|
322
|
+
".kia" => "application/vnd.kidspiration",
|
323
|
+
".kml" => "application/vnd.google-earth.kml+xml",
|
324
|
+
".kmz" => "application/vnd.google-earth.kmz",
|
325
|
+
".kne" => "application/vnd.kinar",
|
326
|
+
".kon" => "application/vnd.kde.kontour",
|
327
|
+
".kpr" => "application/vnd.kde.kpresenter",
|
328
|
+
".ksp" => "application/vnd.kde.kspread",
|
329
|
+
".ktz" => "application/vnd.kahootz",
|
330
|
+
".kwd" => "application/vnd.kde.kword",
|
331
|
+
".latex" => "application/x-latex",
|
332
|
+
".lbd" => "application/vnd.llamagraphics.life-balance.desktop",
|
333
|
+
".lbe" => "application/vnd.llamagraphics.life-balance.exchange+xml",
|
334
|
+
".les" => "application/vnd.hhe.lesson-player",
|
335
|
+
".link66" => "application/vnd.route66.link66+xml",
|
336
|
+
".log" => "text/plain",
|
337
|
+
".lostxml" => "application/lost+xml",
|
338
|
+
".lrm" => "application/vnd.ms-lrm",
|
339
|
+
".ltf" => "application/vnd.frogans.ltf",
|
340
|
+
".lvp" => "audio/vnd.lucent.voice",
|
341
|
+
".lwp" => "application/vnd.lotus-wordpro",
|
342
|
+
".m3u" => "audio/x-mpegurl",
|
343
|
+
".m4a" => "audio/mp4a-latm",
|
344
|
+
".m4v" => "video/mp4",
|
345
|
+
".ma" => "application/mathematica",
|
346
|
+
".mag" => "application/vnd.ecowin.chart",
|
347
|
+
".man" => "text/troff",
|
348
|
+
".manifest" => "text/cache-manifest",
|
349
|
+
".mathml" => "application/mathml+xml",
|
350
|
+
".mbk" => "application/vnd.mobius.mbk",
|
351
|
+
".mbox" => "application/mbox",
|
352
|
+
".mc1" => "application/vnd.medcalcdata",
|
353
|
+
".mcd" => "application/vnd.mcd",
|
354
|
+
".mdb" => "application/x-msaccess",
|
355
|
+
".mdi" => "image/vnd.ms-modi",
|
356
|
+
".mdoc" => "text/troff",
|
357
|
+
".me" => "text/troff",
|
358
|
+
".mfm" => "application/vnd.mfmp",
|
359
|
+
".mgz" => "application/vnd.proteus.magazine",
|
360
|
+
".mid" => "audio/midi",
|
361
|
+
".midi" => "audio/midi",
|
362
|
+
".mif" => "application/vnd.mif",
|
363
|
+
".mime" => "message/rfc822",
|
364
|
+
".mj2" => "video/mj2",
|
365
|
+
".mlp" => "application/vnd.dolby.mlp",
|
366
|
+
".mmd" => "application/vnd.chipnuts.karaoke-mmd",
|
367
|
+
".mmf" => "application/vnd.smaf",
|
368
|
+
".mml" => "application/mathml+xml",
|
369
|
+
".mmr" => "image/vnd.fujixerox.edmics-mmr",
|
370
|
+
".mng" => "video/x-mng",
|
371
|
+
".mny" => "application/x-msmoney",
|
372
|
+
".mov" => "video/quicktime",
|
373
|
+
".movie" => "video/x-sgi-movie",
|
374
|
+
".mp3" => "audio/mpeg",
|
375
|
+
".mp4" => "video/mp4",
|
376
|
+
".mp4a" => "audio/mp4",
|
377
|
+
".mp4s" => "application/mp4",
|
378
|
+
".mp4v" => "video/mp4",
|
379
|
+
".mpc" => "application/vnd.mophun.certificate",
|
380
|
+
".mpeg" => "video/mpeg",
|
381
|
+
".mpg" => "video/mpeg",
|
382
|
+
".mpga" => "audio/mpeg",
|
383
|
+
".mpkg" => "application/vnd.apple.installer+xml",
|
384
|
+
".mpm" => "application/vnd.blueice.multipass",
|
385
|
+
".mpn" => "application/vnd.mophun.application",
|
386
|
+
".mpp" => "application/vnd.ms-project",
|
387
|
+
".mpy" => "application/vnd.ibm.minipay",
|
388
|
+
".mqy" => "application/vnd.mobius.mqy",
|
389
|
+
".mrc" => "application/marc",
|
390
|
+
".ms" => "text/troff",
|
391
|
+
".mscml" => "application/mediaservercontrol+xml",
|
392
|
+
".mseq" => "application/vnd.mseq",
|
393
|
+
".msf" => "application/vnd.epson.msf",
|
394
|
+
".msh" => "model/mesh",
|
395
|
+
".msi" => "application/x-msdownload",
|
396
|
+
".msl" => "application/vnd.mobius.msl",
|
397
|
+
".msty" => "application/vnd.muvee.style",
|
398
|
+
".mts" => "model/vnd.mts",
|
399
|
+
".mus" => "application/vnd.musician",
|
400
|
+
".mvb" => "application/x-msmediaview",
|
401
|
+
".mwf" => "application/vnd.mfer",
|
402
|
+
".mxf" => "application/mxf",
|
403
|
+
".mxl" => "application/vnd.recordare.musicxml",
|
404
|
+
".mxml" => "application/xv+xml",
|
405
|
+
".mxs" => "application/vnd.triscape.mxs",
|
406
|
+
".mxu" => "video/vnd.mpegurl",
|
407
|
+
".n" => "application/vnd.nokia.n-gage.symbian.install",
|
408
|
+
".nc" => "application/x-netcdf",
|
409
|
+
".ngdat" => "application/vnd.nokia.n-gage.data",
|
410
|
+
".nlu" => "application/vnd.neurolanguage.nlu",
|
411
|
+
".nml" => "application/vnd.enliven",
|
412
|
+
".nnd" => "application/vnd.noblenet-directory",
|
413
|
+
".nns" => "application/vnd.noblenet-sealer",
|
414
|
+
".nnw" => "application/vnd.noblenet-web",
|
415
|
+
".npx" => "image/vnd.net-fpx",
|
416
|
+
".nsf" => "application/vnd.lotus-notes",
|
417
|
+
".oa2" => "application/vnd.fujitsu.oasys2",
|
418
|
+
".oa3" => "application/vnd.fujitsu.oasys3",
|
419
|
+
".oas" => "application/vnd.fujitsu.oasys",
|
420
|
+
".obd" => "application/x-msbinder",
|
421
|
+
".oda" => "application/oda",
|
422
|
+
".odc" => "application/vnd.oasis.opendocument.chart",
|
423
|
+
".odf" => "application/vnd.oasis.opendocument.formula",
|
424
|
+
".odg" => "application/vnd.oasis.opendocument.graphics",
|
425
|
+
".odi" => "application/vnd.oasis.opendocument.image",
|
426
|
+
".odp" => "application/vnd.oasis.opendocument.presentation",
|
427
|
+
".ods" => "application/vnd.oasis.opendocument.spreadsheet",
|
428
|
+
".odt" => "application/vnd.oasis.opendocument.text",
|
429
|
+
".oga" => "audio/ogg",
|
430
|
+
".ogg" => "application/ogg",
|
431
|
+
".ogv" => "video/ogg",
|
432
|
+
".ogx" => "application/ogg",
|
433
|
+
".org" => "application/vnd.lotus-organizer",
|
434
|
+
".otc" => "application/vnd.oasis.opendocument.chart-template",
|
435
|
+
".otf" => "application/vnd.oasis.opendocument.formula-template",
|
436
|
+
".otg" => "application/vnd.oasis.opendocument.graphics-template",
|
437
|
+
".oth" => "application/vnd.oasis.opendocument.text-web",
|
438
|
+
".oti" => "application/vnd.oasis.opendocument.image-template",
|
439
|
+
".otm" => "application/vnd.oasis.opendocument.text-master",
|
440
|
+
".ots" => "application/vnd.oasis.opendocument.spreadsheet-template",
|
441
|
+
".ott" => "application/vnd.oasis.opendocument.text-template",
|
442
|
+
".oxt" => "application/vnd.openofficeorg.extension",
|
443
|
+
".p" => "text/x-pascal",
|
444
|
+
".p10" => "application/pkcs10",
|
445
|
+
".p12" => "application/x-pkcs12",
|
446
|
+
".p7b" => "application/x-pkcs7-certificates",
|
447
|
+
".p7m" => "application/pkcs7-mime",
|
448
|
+
".p7r" => "application/x-pkcs7-certreqresp",
|
449
|
+
".p7s" => "application/pkcs7-signature",
|
450
|
+
".pas" => "text/x-pascal",
|
451
|
+
".pbd" => "application/vnd.powerbuilder6",
|
452
|
+
".pbm" => "image/x-portable-bitmap",
|
453
|
+
".pcl" => "application/vnd.hp-pcl",
|
454
|
+
".pclxl" => "application/vnd.hp-pclxl",
|
455
|
+
".pcx" => "image/x-pcx",
|
456
|
+
".pdb" => "chemical/x-pdb",
|
457
|
+
".pdf" => "application/pdf",
|
458
|
+
".pem" => "application/x-x509-ca-cert",
|
459
|
+
".pfr" => "application/font-tdpfr",
|
460
|
+
".pgm" => "image/x-portable-graymap",
|
461
|
+
".pgn" => "application/x-chess-pgn",
|
462
|
+
".pgp" => "application/pgp-encrypted",
|
463
|
+
".pic" => "image/x-pict",
|
464
|
+
".pict" => "image/pict",
|
465
|
+
".pkg" => "application/octet-stream",
|
466
|
+
".pki" => "application/pkixcmp",
|
467
|
+
".pkipath" => "application/pkix-pkipath",
|
468
|
+
".pl" => "text/x-script.perl",
|
469
|
+
".plb" => "application/vnd.3gpp.pic-bw-large",
|
470
|
+
".plc" => "application/vnd.mobius.plc",
|
471
|
+
".plf" => "application/vnd.pocketlearn",
|
472
|
+
".pls" => "application/pls+xml",
|
473
|
+
".pm" => "text/x-script.perl-module",
|
474
|
+
".pml" => "application/vnd.ctc-posml",
|
475
|
+
".png" => "image/png",
|
476
|
+
".pnm" => "image/x-portable-anymap",
|
477
|
+
".pntg" => "image/x-macpaint",
|
478
|
+
".portpkg" => "application/vnd.macports.portpkg",
|
479
|
+
".pot" => "application/vnd.ms-powerpoint",
|
480
|
+
".potm" => "application/vnd.ms-powerpoint.template.macroEnabled.12",
|
481
|
+
".potx" => "application/vnd.openxmlformats-officedocument.presentationml.template",
|
482
|
+
".ppa" => "application/vnd.ms-powerpoint",
|
483
|
+
".ppam" => "application/vnd.ms-powerpoint.addin.macroEnabled.12",
|
484
|
+
".ppd" => "application/vnd.cups-ppd",
|
485
|
+
".ppm" => "image/x-portable-pixmap",
|
486
|
+
".pps" => "application/vnd.ms-powerpoint",
|
487
|
+
".ppsm" => "application/vnd.ms-powerpoint.slideshow.macroEnabled.12",
|
488
|
+
".ppsx" => "application/vnd.openxmlformats-officedocument.presentationml.slideshow",
|
489
|
+
".ppt" => "application/vnd.ms-powerpoint",
|
490
|
+
".pptm" => "application/vnd.ms-powerpoint.presentation.macroEnabled.12",
|
491
|
+
".pptx" => "application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
492
|
+
".prc" => "application/vnd.palm",
|
493
|
+
".pre" => "application/vnd.lotus-freelance",
|
494
|
+
".prf" => "application/pics-rules",
|
495
|
+
".ps" => "application/postscript",
|
496
|
+
".psb" => "application/vnd.3gpp.pic-bw-small",
|
497
|
+
".psd" => "image/vnd.adobe.photoshop",
|
498
|
+
".ptid" => "application/vnd.pvi.ptid1",
|
499
|
+
".pub" => "application/x-mspublisher",
|
500
|
+
".pvb" => "application/vnd.3gpp.pic-bw-var",
|
501
|
+
".pwn" => "application/vnd.3m.post-it-notes",
|
502
|
+
".py" => "text/x-script.python",
|
503
|
+
".pya" => "audio/vnd.ms-playready.media.pya",
|
504
|
+
".pyv" => "video/vnd.ms-playready.media.pyv",
|
505
|
+
".qam" => "application/vnd.epson.quickanime",
|
506
|
+
".qbo" => "application/vnd.intu.qbo",
|
507
|
+
".qfx" => "application/vnd.intu.qfx",
|
508
|
+
".qps" => "application/vnd.publishare-delta-tree",
|
509
|
+
".qt" => "video/quicktime",
|
510
|
+
".qtif" => "image/x-quicktime",
|
511
|
+
".qxd" => "application/vnd.quark.quarkxpress",
|
512
|
+
".ra" => "audio/x-pn-realaudio",
|
513
|
+
".rake" => "text/x-script.ruby",
|
514
|
+
".ram" => "audio/x-pn-realaudio",
|
515
|
+
".rar" => "application/x-rar-compressed",
|
516
|
+
".ras" => "image/x-cmu-raster",
|
517
|
+
".rb" => "text/x-script.ruby",
|
518
|
+
".rcprofile" => "application/vnd.ipunplugged.rcprofile",
|
519
|
+
".rdf" => "application/rdf+xml",
|
520
|
+
".rdz" => "application/vnd.data-vision.rdz",
|
521
|
+
".rep" => "application/vnd.businessobjects",
|
522
|
+
".rgb" => "image/x-rgb",
|
523
|
+
".rif" => "application/reginfo+xml",
|
524
|
+
".rl" => "application/resource-lists+xml",
|
525
|
+
".rlc" => "image/vnd.fujixerox.edmics-rlc",
|
526
|
+
".rld" => "application/resource-lists-diff+xml",
|
527
|
+
".rm" => "application/vnd.rn-realmedia",
|
528
|
+
".rmp" => "audio/x-pn-realaudio-plugin",
|
529
|
+
".rms" => "application/vnd.jcp.javame.midlet-rms",
|
530
|
+
".rnc" => "application/relax-ng-compact-syntax",
|
531
|
+
".roff" => "text/troff",
|
532
|
+
".rpm" => "application/x-redhat-package-manager",
|
533
|
+
".rpss" => "application/vnd.nokia.radio-presets",
|
534
|
+
".rpst" => "application/vnd.nokia.radio-preset",
|
535
|
+
".rq" => "application/sparql-query",
|
536
|
+
".rs" => "application/rls-services+xml",
|
537
|
+
".rsd" => "application/rsd+xml",
|
538
|
+
".rss" => "application/rss+xml",
|
539
|
+
".rtf" => "application/rtf",
|
540
|
+
".rtx" => "text/richtext",
|
541
|
+
".ru" => "text/x-script.ruby",
|
542
|
+
".s" => "text/x-asm",
|
543
|
+
".saf" => "application/vnd.yamaha.smaf-audio",
|
544
|
+
".sbml" => "application/sbml+xml",
|
545
|
+
".sc" => "application/vnd.ibm.secure-container",
|
546
|
+
".scd" => "application/x-msschedule",
|
547
|
+
".scm" => "application/vnd.lotus-screencam",
|
548
|
+
".scon" => "application/scon",
|
549
|
+
".scq" => "application/scvp-cv-request",
|
550
|
+
".scs" => "application/scvp-cv-response",
|
551
|
+
".sdkm" => "application/vnd.solent.sdkm+xml",
|
552
|
+
".sdp" => "application/sdp",
|
553
|
+
".see" => "application/vnd.seemail",
|
554
|
+
".sema" => "application/vnd.sema",
|
555
|
+
".semd" => "application/vnd.semd",
|
556
|
+
".semf" => "application/vnd.semf",
|
557
|
+
".setpay" => "application/set-payment-initiation",
|
558
|
+
".setreg" => "application/set-registration-initiation",
|
559
|
+
".sfd" => "application/vnd.hydrostatix.sof-data",
|
560
|
+
".sfs" => "application/vnd.spotfire.sfs",
|
561
|
+
".sgm" => "text/sgml",
|
562
|
+
".sgml" => "text/sgml",
|
563
|
+
".sh" => "application/x-sh",
|
564
|
+
".shar" => "application/x-shar",
|
565
|
+
".shf" => "application/shf+xml",
|
566
|
+
".sig" => "application/pgp-signature",
|
567
|
+
".sit" => "application/x-stuffit",
|
568
|
+
".sitx" => "application/x-stuffitx",
|
569
|
+
".skp" => "application/vnd.koan",
|
570
|
+
".slt" => "application/vnd.epson.salt",
|
571
|
+
".smi" => "application/smil+xml",
|
572
|
+
".snd" => "audio/basic",
|
573
|
+
".so" => "application/octet-stream",
|
574
|
+
".spf" => "application/vnd.yamaha.smaf-phrase",
|
575
|
+
".spl" => "application/x-futuresplash",
|
576
|
+
".spot" => "text/vnd.in3d.spot",
|
577
|
+
".spp" => "application/scvp-vp-response",
|
578
|
+
".spq" => "application/scvp-vp-request",
|
579
|
+
".src" => "application/x-wais-source",
|
580
|
+
".srx" => "application/sparql-results+xml",
|
581
|
+
".sse" => "application/vnd.kodak-descriptor",
|
582
|
+
".ssf" => "application/vnd.epson.ssf",
|
583
|
+
".ssml" => "application/ssml+xml",
|
584
|
+
".stf" => "application/vnd.wt.stf",
|
585
|
+
".stk" => "application/hyperstudio",
|
586
|
+
".str" => "application/vnd.pg.format",
|
587
|
+
".sus" => "application/vnd.sus-calendar",
|
588
|
+
".sv4cpio" => "application/x-sv4cpio",
|
589
|
+
".sv4crc" => "application/x-sv4crc",
|
590
|
+
".svd" => "application/vnd.svd",
|
591
|
+
".svg" => "image/svg+xml",
|
592
|
+
".svgz" => "image/svg+xml",
|
593
|
+
".swf" => "application/x-shockwave-flash",
|
594
|
+
".swi" => "application/vnd.arastra.swi",
|
595
|
+
".t" => "text/troff",
|
596
|
+
".tao" => "application/vnd.tao.intent-module-archive",
|
597
|
+
".tar" => "application/x-tar",
|
598
|
+
".tbz" => "application/x-bzip-compressed-tar",
|
599
|
+
".tcap" => "application/vnd.3gpp2.tcap",
|
600
|
+
".tcl" => "application/x-tcl",
|
601
|
+
".tex" => "application/x-tex",
|
602
|
+
".texi" => "application/x-texinfo",
|
603
|
+
".texinfo" => "application/x-texinfo",
|
604
|
+
".text" => "text/plain",
|
605
|
+
".tif" => "image/tiff",
|
606
|
+
".tiff" => "image/tiff",
|
607
|
+
".tmo" => "application/vnd.tmobile-livetv",
|
608
|
+
".torrent" => "application/x-bittorrent",
|
609
|
+
".tpl" => "application/vnd.groove-tool-template",
|
610
|
+
".tpt" => "application/vnd.trid.tpt",
|
611
|
+
".tr" => "text/troff",
|
612
|
+
".tra" => "application/vnd.trueapp",
|
613
|
+
".trm" => "application/x-msterminal",
|
614
|
+
".tsv" => "text/tab-separated-values",
|
615
|
+
".ttf" => "application/octet-stream",
|
616
|
+
".twd" => "application/vnd.simtech-mindmapper",
|
617
|
+
".txd" => "application/vnd.genomatix.tuxedo",
|
618
|
+
".txf" => "application/vnd.mobius.txf",
|
619
|
+
".txt" => "text/plain",
|
620
|
+
".ufd" => "application/vnd.ufdl",
|
621
|
+
".umj" => "application/vnd.umajin",
|
622
|
+
".unityweb" => "application/vnd.unity",
|
623
|
+
".uoml" => "application/vnd.uoml+xml",
|
624
|
+
".uri" => "text/uri-list",
|
625
|
+
".ustar" => "application/x-ustar",
|
626
|
+
".utz" => "application/vnd.uiq.theme",
|
627
|
+
".uu" => "text/x-uuencode",
|
628
|
+
".vcd" => "application/x-cdlink",
|
629
|
+
".vcf" => "text/x-vcard",
|
630
|
+
".vcg" => "application/vnd.groove-vcard",
|
631
|
+
".vcs" => "text/x-vcalendar",
|
632
|
+
".vcx" => "application/vnd.vcx",
|
633
|
+
".vis" => "application/vnd.visionary",
|
634
|
+
".viv" => "video/vnd.vivo",
|
635
|
+
".vrml" => "model/vrml",
|
636
|
+
".vsd" => "application/vnd.visio",
|
637
|
+
".vsf" => "application/vnd.vsf",
|
638
|
+
".vtu" => "model/vnd.vtu",
|
639
|
+
".vxml" => "application/voicexml+xml",
|
640
|
+
".war" => "application/java-archive",
|
641
|
+
".wav" => "audio/x-wav",
|
642
|
+
".wax" => "audio/x-ms-wax",
|
643
|
+
".wbmp" => "image/vnd.wap.wbmp",
|
644
|
+
".wbs" => "application/vnd.criticaltools.wbs+xml",
|
645
|
+
".wbxml" => "application/vnd.wap.wbxml",
|
646
|
+
".webm" => "video/webm",
|
647
|
+
".wm" => "video/x-ms-wm",
|
648
|
+
".wma" => "audio/x-ms-wma",
|
649
|
+
".wmd" => "application/x-ms-wmd",
|
650
|
+
".wmf" => "application/x-msmetafile",
|
651
|
+
".wml" => "text/vnd.wap.wml",
|
652
|
+
".wmlc" => "application/vnd.wap.wmlc",
|
653
|
+
".wmls" => "text/vnd.wap.wmlscript",
|
654
|
+
".wmlsc" => "application/vnd.wap.wmlscriptc",
|
655
|
+
".wmv" => "video/x-ms-wmv",
|
656
|
+
".wmx" => "video/x-ms-wmx",
|
657
|
+
".wmz" => "application/x-ms-wmz",
|
658
|
+
".woff" => "application/font-woff",
|
659
|
+
".woff2" => "application/font-woff2",
|
660
|
+
".wpd" => "application/vnd.wordperfect",
|
661
|
+
".wpl" => "application/vnd.ms-wpl",
|
662
|
+
".wps" => "application/vnd.ms-works",
|
663
|
+
".wqd" => "application/vnd.wqd",
|
664
|
+
".wri" => "application/x-mswrite",
|
665
|
+
".wrl" => "model/vrml",
|
666
|
+
".wsdl" => "application/wsdl+xml",
|
667
|
+
".wspolicy" => "application/wspolicy+xml",
|
668
|
+
".wtb" => "application/vnd.webturbo",
|
669
|
+
".wvx" => "video/x-ms-wvx",
|
670
|
+
".x3d" => "application/vnd.hzn-3d-crossword",
|
671
|
+
".xar" => "application/vnd.xara",
|
672
|
+
".xbd" => "application/vnd.fujixerox.docuworks.binder",
|
673
|
+
".xbm" => "image/x-xbitmap",
|
674
|
+
".xdm" => "application/vnd.syncml.dm+xml",
|
675
|
+
".xdp" => "application/vnd.adobe.xdp+xml",
|
676
|
+
".xdw" => "application/vnd.fujixerox.docuworks",
|
677
|
+
".xenc" => "application/xenc+xml",
|
678
|
+
".xer" => "application/patch-ops-error+xml",
|
679
|
+
".xfdf" => "application/vnd.adobe.xfdf",
|
680
|
+
".xfdl" => "application/vnd.xfdl",
|
681
|
+
".xhtml" => "application/xhtml+xml",
|
682
|
+
".xif" => "image/vnd.xiff",
|
683
|
+
".xla" => "application/vnd.ms-excel",
|
684
|
+
".xlam" => "application/vnd.ms-excel.addin.macroEnabled.12",
|
685
|
+
".xls" => "application/vnd.ms-excel",
|
686
|
+
".xlsb" => "application/vnd.ms-excel.sheet.binary.macroEnabled.12",
|
687
|
+
".xlsx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
688
|
+
".xlsm" => "application/vnd.ms-excel.sheet.macroEnabled.12",
|
689
|
+
".xlt" => "application/vnd.ms-excel",
|
690
|
+
".xltx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.template",
|
691
|
+
".xml" => "application/xml",
|
692
|
+
".xo" => "application/vnd.olpc-sugar",
|
693
|
+
".xop" => "application/xop+xml",
|
694
|
+
".xpm" => "image/x-xpixmap",
|
695
|
+
".xpr" => "application/vnd.is-xpr",
|
696
|
+
".xps" => "application/vnd.ms-xpsdocument",
|
697
|
+
".xpw" => "application/vnd.intercon.formnet",
|
698
|
+
".xsl" => "application/xml",
|
699
|
+
".xslt" => "application/xslt+xml",
|
700
|
+
".xsm" => "application/vnd.syncml+xml",
|
701
|
+
".xspf" => "application/xspf+xml",
|
702
|
+
".xul" => "application/vnd.mozilla.xul+xml",
|
703
|
+
".xwd" => "image/x-xwindowdump",
|
704
|
+
".xyz" => "chemical/x-xyz",
|
705
|
+
".yaml" => "text/yaml",
|
706
|
+
".yml" => "text/yaml",
|
707
|
+
".zaz" => "application/vnd.zzazz.deck+xml",
|
708
|
+
".zip" => "application/zip",
|
709
|
+
".zmm" => "application/vnd.handheld-entertainment+xml",
|
710
|
+
}
|
711
|
+
|
712
|
+
end
|
713
|
+
end
|