├── .gitignore ├── GoHttp.c ├── README.md ├── httpd.conf └── mime.types /.gitignore: -------------------------------------------------------------------------------- 1 | # Object files 2 | *.o 3 | 4 | # Libraries 5 | *.lib 6 | *.a 7 | 8 | # Shared objects (inc. Windows DLLs) 9 | *.dll 10 | *.so 11 | *.so.* 12 | *.dylib 13 | 14 | # Executables 15 | *.exe 16 | *.out 17 | *.app 18 | GoHttp -------------------------------------------------------------------------------- /GoHttp.c: -------------------------------------------------------------------------------- 1 | // 2 | // GoHttp is purely written for educational purposes 3 | // DO NOT USE IN PRODUCTION! 4 | // 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | 19 | #define BUFFER_SIZE 512 20 | #define MAX_FILE_SIZE 5*1024 21 | #define MAX_CONNECTIONS 3 22 | #define TRUE 1 23 | #define FALSE 0 24 | #define EXIT_SUCCESS 0 25 | #define EXIT_FAILURE 1 26 | 27 | int port; 28 | int deamon = FALSE; 29 | char *wwwroot; 30 | char *conf_file; 31 | char *log_file; 32 | char *mime_file; 33 | 34 | FILE *filePointer = NULL; 35 | 36 | struct sigaction sa; 37 | struct sockaddr_in address; 38 | struct sockaddr_storage connector; 39 | int current_socket; 40 | int connecting_socket; 41 | socklen_t addr_size; 42 | 43 | static void sigchld_handler(int s) 44 | { 45 | int saved_errno = errno; 46 | while(waitpid(-1, NULL, WNOHANG) > 0); 47 | errno = saved_errno; 48 | } 49 | 50 | static void setup_sigchld_handler() 51 | { 52 | sa.sa_handler = sigchld_handler; // reap all dead processes 53 | sigemptyset(&sa.sa_mask); 54 | sa.sa_flags = SA_RESTART; 55 | if (sigaction(SIGCHLD, &sa, NULL) == -1) { 56 | perror("sigaction"); 57 | exit(1); 58 | } 59 | } 60 | 61 | static void daemonize(void) 62 | { 63 | pid_t pid, sid; 64 | 65 | /* already a daemon */ 66 | if ( getppid() == 1 ) return; 67 | 68 | /* Fork off the parent process */ 69 | pid = fork(); 70 | if (pid < 0) { 71 | exit(EXIT_FAILURE); 72 | } 73 | /* If we got a good PID, then we can exit the parent process. */ 74 | if (pid > 0) { 75 | exit(EXIT_SUCCESS); 76 | } 77 | 78 | /* At this point we are executing as the child process */ 79 | 80 | /* Change the file mode mask */ 81 | umask(0); 82 | 83 | /* Create a new SID for the child process */ 84 | sid = setsid(); 85 | if (sid < 0) { 86 | exit(EXIT_FAILURE); 87 | } 88 | 89 | /* Change the current working directory. This prevents the current 90 | directory from being locked; hence not being able to remove it. */ 91 | if ((chdir("/")) < 0) { 92 | exit(EXIT_FAILURE); 93 | } 94 | 95 | /* Redirect standard files to /dev/null */ 96 | // freopen( "/dev/null", "r", stdin); 97 | // freopen( "/dev/null", "w", stdout); 98 | // freopen( "/dev/null", "w", stderr); 99 | } 100 | 101 | sendString(char *message, int socket) 102 | { 103 | int length, bytes_sent; 104 | length = strlen(message); 105 | 106 | bytes_sent = send(socket, message, length, 0); 107 | 108 | return bytes_sent; 109 | } 110 | 111 | int sendBinary(int *byte, int length) 112 | { 113 | int bytes_sent; 114 | 115 | bytes_sent = send(connecting_socket, byte, length, 0); 116 | 117 | return bytes_sent; 118 | 119 | 120 | return 0; 121 | } 122 | void sendHeader(char *Status_code, char *Content_Type, int TotalSize, int socket) 123 | { 124 | char *head = "\r\nHTTP/1.1 "; 125 | char *content_head = "\r\nContent-Type: "; 126 | char *server_head = "\r\nServer: PT06"; 127 | char *length_head = "\r\nContent-Length: "; 128 | char *date_head = "\r\nDate: "; 129 | char *newline = "\r\n"; 130 | char contentLength[100]; 131 | 132 | time_t rawtime; 133 | 134 | time ( &rawtime ); 135 | 136 | // int contentLength = strlen(HTML); 137 | sprintf(contentLength, "%i", TotalSize); 138 | 139 | char *message = malloc(( 140 | strlen(head) + 141 | strlen(content_head) + 142 | strlen(server_head) + 143 | strlen(length_head) + 144 | strlen(date_head) + 145 | strlen(newline) + 146 | strlen(Status_code) + 147 | strlen(Content_Type) + 148 | strlen(contentLength) + 149 | 28 + 150 | sizeof(char)) * 2); 151 | 152 | if ( message != NULL ) 153 | { 154 | 155 | strcpy(message, head); 156 | 157 | strcat(message, Status_code); 158 | 159 | strcat(message, content_head); 160 | strcat(message, Content_Type); 161 | strcat(message, server_head); 162 | strcat(message, length_head); 163 | strcat(message, contentLength); 164 | strcat(message, date_head); 165 | strcat(message, (char*)ctime(&rawtime)); 166 | strcat(message, newline); 167 | 168 | sendString(message, socket); 169 | 170 | free(message); 171 | } 172 | } 173 | 174 | void sendHTML(char *statusCode, char *contentType, char *content, int size, int socket) 175 | { 176 | sendHeader(statusCode, contentType, size, socket); 177 | sendString(content, socket); 178 | } 179 | 180 | void sendFile(FILE *fp, int file_size) 181 | { 182 | int current_char = 0; 183 | 184 | do{ 185 | current_char = fgetc(fp); 186 | sendBinary(¤t_char, sizeof(char)); 187 | } 188 | while(current_char != EOF); 189 | } 190 | 191 | int scan(char *input, char *output, int start, int max) 192 | { 193 | if ( start >= strlen(input) ) 194 | return -1; 195 | 196 | int appending_char_count = 0; 197 | int i = start; 198 | int count = 0; 199 | 200 | for ( ; i < strlen(input); i ++ ) 201 | { 202 | if ( *(input + i) != '\t' && *(input + i) != ' ' && *(input + i) != '\n' && *(input + i) != '\r') 203 | { 204 | if (count < (max-1)) 205 | { 206 | *(output + appending_char_count) = *(input + i ) ; 207 | appending_char_count += 1; 208 | 209 | count++; 210 | } 211 | } 212 | else 213 | break; 214 | } 215 | *(output + appending_char_count) = '\0'; 216 | 217 | // Find next word start 218 | i += 1; 219 | 220 | for (; i < strlen(input); i ++ ) 221 | { 222 | if ( *(input + i ) != '\t' && *(input + i) != ' ' && *(input + i) != '\n' && *(input + i) != '\r') 223 | break; 224 | } 225 | 226 | return i; 227 | } 228 | 229 | 230 | 231 | 232 | int checkMime(char *extension, char *mime_type) 233 | { 234 | char *current_word = malloc(600); 235 | char *word_holder = malloc(600); 236 | char *line = malloc(200); 237 | int startline = 0; 238 | 239 | FILE *mimeFile = fopen(mime_file, "r"); 240 | 241 | free(mime_type); 242 | 243 | mime_type = (char*)malloc(200); 244 | 245 | memset (mime_type,'\0',200); 246 | 247 | while(fgets(line, 200, mimeFile) != NULL) { 248 | 249 | if ( line[0] != '#' ) 250 | { 251 | startline = scan(line, current_word, 0, 600); 252 | while ( 1 ) 253 | { 254 | startline = scan(line, word_holder, startline, 600); 255 | if ( startline != -1 ) 256 | { 257 | if ( strcmp ( word_holder, extension ) == 0 ) 258 | { 259 | memcpy(mime_type, current_word, strlen(current_word)); 260 | free(current_word); 261 | free(word_holder); 262 | free(line); 263 | return 1; 264 | } 265 | } 266 | else 267 | { 268 | break; 269 | } 270 | } 271 | } 272 | 273 | memset (line,'\0',200); 274 | } 275 | 276 | free(current_word); 277 | free(word_holder); 278 | free(line); 279 | 280 | return 0; 281 | } 282 | 283 | int getHttpVersion(char *input, char *output) 284 | { 285 | char *filename = malloc(100); 286 | int start = scan(input, filename, 4, 100); 287 | if ( start > 0 ) 288 | { 289 | if ( scan(input, output, start, 20) ) 290 | { 291 | 292 | output[strlen(output)+1] = '\0'; 293 | 294 | if ( strcmp("HTTP/1.1" , output) == 0 ) 295 | return 1; 296 | 297 | else if ( strcmp("HTTP/1.0", output) == 0 ) 298 | 299 | return 0; 300 | else 301 | return -1; 302 | } 303 | else 304 | return -1; 305 | } 306 | 307 | return -1; 308 | } 309 | 310 | int GetExtension(char *input, char *output, int max) 311 | { 312 | int in_position = 0; 313 | int appended_position = 0; 314 | int i = 0; 315 | int count = 0; 316 | 317 | for ( ; i < strlen(input); i ++ ) 318 | { 319 | if ( in_position == 1 ) 320 | { 321 | if(count < max) 322 | { 323 | output[appended_position] = input[i]; 324 | appended_position +=1; 325 | count++; 326 | } 327 | } 328 | 329 | if ( input[i] == '.' ) 330 | in_position = 1; 331 | 332 | } 333 | 334 | output[appended_position+1] = '\0'; 335 | 336 | if ( strlen(output) > 0 ) 337 | return 1; 338 | 339 | return -1; 340 | } 341 | 342 | int Content_Lenght(FILE *fp) 343 | { 344 | int filesize = 0; 345 | 346 | fseek(fp, 0, SEEK_END); 347 | filesize = ftell(fp); 348 | rewind(fp); 349 | 350 | return filesize; 351 | } 352 | 353 | int handleHttpGET(char *input) 354 | { 355 | // IF NOT EXISTS 356 | // RETURN -1 357 | // IF EXISTS 358 | // RETURN 1 359 | 360 | char *filename = (char*)malloc(200 * sizeof(char)); 361 | char *path = (char*)malloc(1000 * sizeof(char)); 362 | char *extension = (char*)malloc(10 * sizeof(char)); 363 | char *mime = (char*)malloc(200 * sizeof(char)); 364 | char *httpVersion = (char*)malloc(20 * sizeof(char)); 365 | 366 | int contentLength = 0; 367 | int mimeSupported = 0; 368 | int fileNameLenght = 0; 369 | 370 | 371 | memset(path, '\0', 1000); 372 | memset(filename, '\0', 200); 373 | memset(extension, '\0', 10); 374 | memset(mime, '\0', 200); 375 | memset(httpVersion, '\0', 20); 376 | 377 | fileNameLenght = scan(input, filename, 5, 200); 378 | 379 | 380 | if ( fileNameLenght > 0 ) 381 | { 382 | 383 | if ( getHttpVersion(input, httpVersion) != -1 ) 384 | { 385 | FILE *fp; 386 | 387 | if ( GetExtension(filename, extension, 10) == -1 ) 388 | { 389 | printf("File extension not existing"); 390 | 391 | sendString("400 Bad Request\n", connecting_socket); 392 | 393 | free(filename); 394 | free(mime); 395 | free(path); 396 | free(extension); 397 | 398 | return -1; 399 | } 400 | 401 | mimeSupported = checkMime(extension, mime); 402 | 403 | 404 | if ( mimeSupported != 1) 405 | { 406 | printf("Mime not supported"); 407 | 408 | sendString("400 Bad Request\n", connecting_socket); 409 | 410 | free(filename); 411 | free(mime); 412 | free(path); 413 | free(extension); 414 | 415 | return -1; 416 | } 417 | 418 | // Open the requesting file as binary // 419 | 420 | strcpy(path, wwwroot); 421 | 422 | strcat(path, filename); 423 | 424 | fp = fopen(path, "rb"); 425 | 426 | if ( fp == NULL ) 427 | { 428 | printf("Unable to open file"); 429 | 430 | sendString("404 Not Found\n", connecting_socket); 431 | 432 | free(filename); 433 | free(mime); 434 | free(extension); 435 | free(path); 436 | 437 | return -1; 438 | } 439 | 440 | 441 | // Calculate Content Length // 442 | contentLength = Content_Lenght(fp); 443 | if (contentLength < 0 ) 444 | { 445 | printf("File size is zero"); 446 | 447 | free(filename); 448 | free(mime); 449 | free(extension); 450 | free(path); 451 | 452 | fclose(fp); 453 | 454 | return -1; 455 | } 456 | 457 | // Send File Content // 458 | sendHeader("200 OK", mime,contentLength, connecting_socket); 459 | 460 | sendFile(fp, contentLength); 461 | 462 | free(filename); 463 | free(mime); 464 | free(extension); 465 | free(path); 466 | 467 | fclose(fp); 468 | 469 | return 1; 470 | } 471 | else 472 | { 473 | sendString("501 Not Implemented\n", connecting_socket); 474 | } 475 | } 476 | 477 | return -1; 478 | } 479 | 480 | int getRequestType(char *input) 481 | { 482 | // IF NOT VALID REQUEST 483 | // RETURN -1 484 | // IF VALID REQUEST 485 | // RETURN 1 IF GET 486 | // RETURN 2 IF HEAD 487 | // RETURN 0 IF NOT YET IMPLEMENTED 488 | 489 | int type = -1; 490 | 491 | if ( strlen ( input ) > 0 ) 492 | { 493 | type = 1; 494 | } 495 | 496 | char *requestType = malloc(5); 497 | 498 | scan(input, requestType, 0, 5); 499 | 500 | if ( type == 1 && strcmp("GET", requestType) == 0) 501 | { 502 | type = 1; 503 | } 504 | else if (type == 1 && strcmp("HEAD", requestType) == 0) 505 | { 506 | type = 2; 507 | } 508 | else if (strlen(input) > 4 && strcmp("POST", requestType) == 0 ) 509 | { 510 | type = 0; 511 | } 512 | else 513 | { 514 | type = -1; 515 | } 516 | return type; 517 | } 518 | 519 | int receive(int socket) 520 | { 521 | int msgLen = 0; 522 | char buffer[BUFFER_SIZE]; 523 | 524 | memset (buffer,'\0', BUFFER_SIZE); 525 | 526 | if ((msgLen = recv(socket, buffer, BUFFER_SIZE, 0)) == -1) 527 | { 528 | printf("Error handling incoming request"); 529 | return -1; 530 | } 531 | 532 | int request = getRequestType(buffer); 533 | 534 | if ( request == 1 ) // GET 535 | { 536 | handleHttpGET(buffer); 537 | } 538 | else if ( request == 2 ) // HEAD 539 | { 540 | // SendHeader(); 541 | } 542 | else if ( request == 0 ) // POST 543 | { 544 | sendString("501 Not Implemented\n", connecting_socket); 545 | } 546 | else // GARBAGE 547 | { 548 | sendString("400 Bad Request\n", connecting_socket); 549 | } 550 | 551 | return 1; 552 | } 553 | 554 | /** 555 | Create a socket and assign current_socket to the descriptor 556 | **/ 557 | void createSocket() 558 | { 559 | current_socket = socket(AF_INET, SOCK_STREAM, 0); 560 | 561 | if ( current_socket == -1 ) 562 | { 563 | perror("Create socket"); 564 | exit(-1); 565 | } 566 | } 567 | 568 | /** 569 | Bind to the current_socket descriptor and listen to the port in PORT 570 | **/ 571 | void bindSocket() 572 | { 573 | address.sin_family = AF_INET; 574 | address.sin_addr.s_addr = INADDR_ANY; 575 | address.sin_port = htons(port); 576 | 577 | if ( bind(current_socket, (struct sockaddr *)&address, sizeof(address)) < 0 ) 578 | { 579 | perror("Bind to port"); 580 | exit(-1); 581 | } 582 | } 583 | 584 | /** 585 | Start listening for connections and accept no more than MAX_CONNECTIONS in the Quee 586 | **/ 587 | void startListener() 588 | { 589 | if ( listen(current_socket, MAX_CONNECTIONS) < 0 ) 590 | { 591 | perror("Listen on port"); 592 | exit(-1); 593 | } 594 | } 595 | 596 | /** 597 | Handles the current connector 598 | **/ 599 | void handle(int socket) 600 | { 601 | // --- Workflow --- // 602 | // 1. Receive ( recv() ) the GET / HEAD 603 | // 2. Process the request and see if the file exists 604 | // 3. Read the file content 605 | // 4. Send out with correct mine and http 1.1 606 | 607 | if (receive((int)socket) < 0) 608 | { 609 | perror("Receive"); 610 | exit(-1); 611 | } 612 | } 613 | 614 | void acceptConnection() 615 | { 616 | // signal(SIGCHLD, SIG_IGN); 617 | 618 | // int child_process = fork(); 619 | 620 | int pid; 621 | 622 | addr_size = sizeof(connector); 623 | 624 | connecting_socket = accept(current_socket, (struct sockaddr *)&connector, &addr_size); 625 | 626 | if ((pid = fork()) == -1) 627 | { 628 | close(connecting_socket); 629 | } 630 | 631 | else if(pid == 0) 632 | { 633 | if ( connecting_socket < 0 ) 634 | { 635 | perror("Accepting sockets"); 636 | exit(-1); 637 | } 638 | 639 | handle(connecting_socket); 640 | 641 | close(connecting_socket); 642 | 643 | exit(0); 644 | } 645 | /* 646 | if ( child_process == 0 ) 647 | { 648 | exit(0); 649 | } 650 | 651 | while (-1 != waitpid (-1, NULL, WNOHANG)); 652 | 653 | */ // while (-1 != waitpid (-1, NULL, WNOHANG)); 654 | 655 | } 656 | 657 | void start() 658 | { 659 | createSocket(); 660 | 661 | bindSocket(); 662 | 663 | startListener(); 664 | 665 | // reap zombie processes 666 | setup_sigchld_handler(); 667 | 668 | while ( 1 ) 669 | { 670 | acceptConnection(); 671 | } 672 | } 673 | 674 | void initConfiguration() 675 | { 676 | 677 | } 678 | 679 | void init() 680 | { 681 | char* currentLine = malloc(100); 682 | wwwroot = malloc(100); 683 | conf_file = malloc(100); 684 | log_file = malloc(100); 685 | mime_file = malloc(600); 686 | 687 | // Setting default values 688 | conf_file = "httpd.conf"; 689 | log_file = ".log"; 690 | strcpy(mime_file, "mime.types"); 691 | 692 | // Set deamon to FALSE 693 | deamon = FALSE; 694 | 695 | filePointer = fopen(conf_file, "r"); 696 | 697 | // Ensure that the configuration file is open 698 | if (filePointer == NULL) 699 | { 700 | fprintf(stderr, "Can't open configuration file!\n"); 701 | exit(1); 702 | } 703 | 704 | // Get server root directory from configuration file 705 | if (fscanf(filePointer, "%s %s", currentLine, wwwroot) != 2) 706 | { 707 | fprintf(stderr, "Error in configuration file on line 1!\n"); 708 | exit(1); 709 | } 710 | 711 | // Get default port from configuration file 712 | if (fscanf(filePointer, "%s %i", currentLine, &port) != 2) 713 | { 714 | fprintf(stderr, "Error in configuration file on line 2!\n"); 715 | exit(1); 716 | } 717 | 718 | fclose(filePointer); 719 | free(currentLine); 720 | } 721 | 722 | int main(int argc, char* argv[]) 723 | { 724 | int parameterCount; 725 | char* fileExt = malloc(10); 726 | char* mime_type = malloc(800); 727 | 728 | init(); 729 | 730 | for (parameterCount = 1; parameterCount < argc; parameterCount++) 731 | { 732 | // If flag -p is used, set port 733 | if (strcmp(argv[parameterCount], "-p") == 0) 734 | { 735 | // Indicate that we want to jump over the next parameter 736 | parameterCount++; 737 | printf("Setting port to %i\n", atoi(argv[parameterCount])); 738 | port = atoi(argv[parameterCount]); 739 | } 740 | 741 | // If flag -d is used, set deamon to TRUE; 742 | else if (strcmp(argv[parameterCount], "-d") == 0) 743 | { 744 | printf("Setting deamon = TRUE"); 745 | deamon = TRUE; 746 | } 747 | 748 | else if (strcmp(argv[parameterCount], "-l") == 0) 749 | { 750 | // Indicate that we want to jump over the next parameter 751 | parameterCount++; 752 | printf("Setting logfile = %s\n", argv[parameterCount]); 753 | log_file = (char*)argv[parameterCount]; 754 | } 755 | else 756 | { 757 | printf("Usage: %s [-p port] [-d] [-l logfile]\n", argv[0]); 758 | printf("\t\t-p port\t\tWhich port to listen to.\n"); 759 | printf("\t\t-d\t\tEnables deamon mode.\n"); 760 | printf("\t\t-l logfile\tWhich file to store the log to.\n"); 761 | return -1; 762 | } 763 | } 764 | 765 | printf("Settings:\n"); 766 | printf("Port:\t\t\t%i\n", port); 767 | printf("Server root:\t\t%s\n", wwwroot); 768 | printf("Configuration file:\t%s\n", conf_file); 769 | printf("Logfile:\t\t%s\n", log_file); 770 | printf("Deamon:\t\t\t%i\n", deamon); 771 | 772 | if ( deamon == TRUE ) 773 | { 774 | daemonize(); 775 | } 776 | 777 | start(); 778 | 779 | return 0; 780 | } 781 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | GoHttp 2 | ====== 3 | GoHttp is a simple web server written in C for educational purposes. This web server runs on GNU/Linux. 4 | 5 | **NOT FOR PRODUCTION USE!** 6 | 7 | ## What is implemented? 8 | This web server is far from complete and the purpose of it is to be very light weight to give an idea of where to start when wanting to understand web servers and C. 9 | 10 | It supports GET and HEAD so you can use it to receive any files that correspond with the mime types in mime.types. 11 | 12 | ## I want to add support for POST, can I contribute? 13 | Sure! If you want to send a pull request please do! Keep in mind though that this is for educational purposes so keep the code clean and understandable - no golfing! 14 | 15 | # How do I run it? 16 | 17 | 1. Download the source 18 | 2. Compile the source using GCC 19 | 3. Run 20 | 21 | ## Command line arguments 22 | You can start the web server with the following command line arguments: 23 | 24 | -p port number 25 | -d run as daemon 26 | -l log file 27 | 28 | ## What about configuration? 29 | You can open httpd.conf and change the following: 30 | 31 | wwwroot /home/frw/public_html/ 32 | port 7000 33 | 34 | # Credit 35 | If it weren't for the course in Advance UNIX Programming that I took at Blekinge Institute of Technology I would never have written this. It all originated from a question on [StackOverflow](http://stackoverflow.com/questions/409087/creating-a-web-server-in-pure-c) from 2009 where I asked for information on how to write a simple web server in C. 36 | -------------------------------------------------------------------------------- /httpd.conf: -------------------------------------------------------------------------------- 1 | wwwroot /home/frw/public_html/ 2 | port 7000 3 | -------------------------------------------------------------------------------- /mime.types: -------------------------------------------------------------------------------- 1 | # This is a comment. I love comments. 2 | 3 | # This file controls what Internet media types are sent to the client for 4 | # given file extension(s). Sending the correct media type to the client 5 | # is important so they know how to handle the content of the file. 6 | # Extra types can either be added here or by using an AddType directive 7 | # in your config files. For more information about Internet media types, 8 | # please read RFC 2045, 2046, 2047, 2048, and 2077. The Internet media type 9 | # registry is at . 10 | 11 | # MIME type Extensions 12 | application/activemessage 13 | application/andrew-inset ez 14 | application/applefile 15 | application/atom+xml atom 16 | application/atomcat+xml atomcat 17 | application/atomicmail 18 | application/atomsvc+xml atomsvc 19 | application/auth-policy+xml 20 | application/batch-smtp 21 | application/beep+xml 22 | application/cals-1840 23 | application/ccxml+xml ccxml 24 | application/cellml+xml 25 | application/cnrp+xml 26 | application/commonground 27 | application/conference-info+xml 28 | application/cpl+xml 29 | application/csta+xml 30 | application/cstadata+xml 31 | application/cybercash 32 | application/davmount+xml davmount 33 | application/dca-rft 34 | application/dec-dx 35 | application/dialog-info+xml 36 | application/dicom 37 | application/dns 38 | application/dvcs 39 | application/ecmascript ecma 40 | application/edi-consent 41 | application/edi-x12 42 | application/edifact 43 | application/epp+xml 44 | application/eshop 45 | application/fastinfoset 46 | application/fastsoap 47 | application/fits 48 | application/font-tdpfr pfr 49 | application/h224 50 | application/http 51 | application/hyperstudio stk 52 | application/iges 53 | application/im-iscomposing+xml 54 | application/index 55 | application/index.cmd 56 | application/index.obj 57 | application/index.response 58 | application/index.vnd 59 | application/iotp 60 | application/ipp 61 | application/isup 62 | application/javascript js 63 | application/json json 64 | application/kpml-request+xml 65 | application/kpml-response+xml 66 | application/mac-binhex40 hqx 67 | application/mac-compactpro cpt 68 | application/macwriteii 69 | application/marc mrc 70 | application/mathematica ma nb mb 71 | application/mathml+xml mathml 72 | application/mbms-associated-procedure-description+xml 73 | application/mbms-deregister+xml 74 | application/mbms-envelope+xml 75 | application/mbms-msk+xml 76 | application/mbms-msk-response+xml 77 | application/mbms-protection-description+xml 78 | application/mbms-reception-report+xml 79 | application/mbms-register+xml 80 | application/mbms-register-response+xml 81 | application/mbms-user-service-description+xml 82 | application/mbox mbox 83 | application/mediaservercontrol+xml mscml 84 | application/mikey 85 | application/moss-keys 86 | application/moss-signature 87 | application/mosskey-data 88 | application/mosskey-request 89 | application/mp4 mp4s 90 | application/mpeg4-generic 91 | application/mpeg4-iod 92 | application/mpeg4-iod-xmt 93 | application/msword doc dot 94 | application/mxf mxf 95 | application/nasdata 96 | application/news-message-id 97 | application/news-transmission 98 | application/nss 99 | application/ocsp-request 100 | application/ocsp-response 101 | application/octet-stream bin dms lha lzh class so iso dmg dist distz pkg bpk dump elc 102 | application/oda oda 103 | application/oebps-package+xml 104 | application/ogg ogg 105 | application/parityfec 106 | application/pdf pdf 107 | application/pgp-encrypted pgp 108 | application/pgp-keys 109 | application/pgp-signature asc sig 110 | application/pics-rules prf 111 | application/pidf+xml 112 | application/pkcs10 p10 113 | application/pkcs7-mime p7m p7c 114 | application/pkcs7-signature p7s 115 | application/pkix-cert cer 116 | application/pkix-crl crl 117 | application/pkix-pkipath pkipath 118 | application/pkixcmp pki 119 | application/pls+xml pls 120 | application/poc-settings+xml 121 | application/postscript ai eps ps 122 | application/prs.alvestrand.titrax-sheet 123 | application/prs.cww cww 124 | application/prs.nprend 125 | application/prs.plucker 126 | application/qsig 127 | application/rdf+xml rdf 128 | application/reginfo+xml rif 129 | application/relax-ng-compact-syntax rnc 130 | application/remote-printing 131 | application/resource-lists+xml rl 132 | application/riscos 133 | application/rlmi+xml 134 | application/rls-services+xml rs 135 | application/rsd+xml rsd 136 | application/rss+xml rss 137 | application/rtf rtf 138 | application/rtx 139 | application/samlassertion+xml 140 | application/samlmetadata+xml 141 | application/sbml+xml sbml 142 | application/scvp-cv-request scq 143 | application/scvp-cv-response scs 144 | application/scvp-vp-request spq 145 | application/scvp-vp-response spp 146 | application/sdp sdp 147 | application/set-payment 148 | application/set-payment-initiation setpay 149 | application/set-registration 150 | application/set-registration-initiation setreg 151 | application/sgml 152 | application/sgml-open-catalog 153 | application/shf+xml shf 154 | application/sieve 155 | application/simple-filter+xml 156 | application/simple-message-summary 157 | application/simplesymbolcontainer 158 | application/slate 159 | application/smil 160 | application/smil+xml smi smil 161 | application/soap+fastinfoset 162 | application/soap+xml 163 | application/sparql-query rq 164 | application/sparql-results+xml srx 165 | application/spirits-event+xml 166 | application/srgs gram 167 | application/srgs+xml grxml 168 | application/ssml+xml ssml 169 | application/timestamp-query 170 | application/timestamp-reply 171 | application/tve-trigger 172 | application/ulpfec 173 | application/vemmi 174 | application/vividence.scriptfile 175 | application/vnd.3gpp.bsf+xml 176 | application/vnd.3gpp.pic-bw-large plb 177 | application/vnd.3gpp.pic-bw-small psb 178 | application/vnd.3gpp.pic-bw-var pvb 179 | application/vnd.3gpp.sms 180 | application/vnd.3gpp2.bcmcsinfo+xml 181 | application/vnd.3gpp2.sms 182 | application/vnd.3gpp2.tcap tcap 183 | application/vnd.3m.post-it-notes pwn 184 | application/vnd.accpac.simply.aso aso 185 | application/vnd.accpac.simply.imp imp 186 | application/vnd.acucobol acu 187 | application/vnd.acucorp atc acutc 188 | application/vnd.adobe.xdp+xml xdp 189 | application/vnd.adobe.xfdf xfdf 190 | application/vnd.aether.imp 191 | application/vnd.amiga.ami ami 192 | application/vnd.anser-web-certificate-issue-initiation cii 193 | application/vnd.anser-web-funds-transfer-initiation fti 194 | application/vnd.antix.game-component atx 195 | application/vnd.apple.installer+xml mpkg 196 | application/vnd.audiograph aep 197 | application/vnd.autopackage 198 | application/vnd.avistar+xml 199 | application/vnd.blueice.multipass mpm 200 | application/vnd.bmi bmi 201 | application/vnd.businessobjects rep 202 | application/vnd.cab-jscript 203 | application/vnd.canon-cpdl 204 | application/vnd.canon-lips 205 | application/vnd.cendio.thinlinc.clientconf 206 | application/vnd.chemdraw+xml cdxml 207 | application/vnd.chipnuts.karaoke-mmd mmd 208 | application/vnd.cinderella cdy 209 | application/vnd.cirpack.isdn-ext 210 | application/vnd.claymore cla 211 | application/vnd.clonk.c4group c4g c4d c4f c4p c4u 212 | application/vnd.commerce-battelle 213 | application/vnd.commonspace csp cst 214 | application/vnd.contact.cmsg cdbcmsg 215 | application/vnd.cosmocaller cmc 216 | application/vnd.crick.clicker clkx 217 | application/vnd.crick.clicker.keyboard clkk 218 | application/vnd.crick.clicker.palette clkp 219 | application/vnd.crick.clicker.template clkt 220 | application/vnd.crick.clicker.wordbank clkw 221 | application/vnd.criticaltools.wbs+xml wbs 222 | application/vnd.ctc-posml pml 223 | application/vnd.cups-pdf 224 | application/vnd.cups-postscript 225 | application/vnd.cups-ppd ppd 226 | application/vnd.cups-raster 227 | application/vnd.cups-raw 228 | application/vnd.curl curl 229 | application/vnd.cybank 230 | application/vnd.data-vision.rdz rdz 231 | application/vnd.denovo.fcselayout-link fe_launch 232 | application/vnd.dna dna 233 | application/vnd.dolby.mlp mlp 234 | application/vnd.dpgraph dpg 235 | application/vnd.dreamfactory dfac 236 | application/vnd.dvb.esgcontainer 237 | application/vnd.dvb.ipdcesgaccess 238 | application/vnd.dxr 239 | application/vnd.ecdis-update 240 | application/vnd.ecowin.chart mag 241 | application/vnd.ecowin.filerequest 242 | application/vnd.ecowin.fileupdate 243 | application/vnd.ecowin.series 244 | application/vnd.ecowin.seriesrequest 245 | application/vnd.ecowin.seriesupdate 246 | application/vnd.enliven nml 247 | application/vnd.epson.esf esf 248 | application/vnd.epson.msf msf 249 | application/vnd.epson.quickanime qam 250 | application/vnd.epson.salt slt 251 | application/vnd.epson.ssf ssf 252 | application/vnd.ericsson.quickcall 253 | application/vnd.eszigno3+xml es3 et3 254 | application/vnd.eudora.data 255 | application/vnd.ezpix-album ez2 256 | application/vnd.ezpix-package ez3 257 | application/vnd.fdf fdf 258 | application/vnd.ffsns 259 | application/vnd.fints 260 | application/vnd.flographit gph 261 | application/vnd.fluxtime.clip ftc 262 | application/vnd.framemaker fm frame maker 263 | application/vnd.frogans.fnc fnc 264 | application/vnd.frogans.ltf ltf 265 | application/vnd.fsc.weblaunch fsc 266 | application/vnd.fujitsu.oasys oas 267 | application/vnd.fujitsu.oasys2 oa2 268 | application/vnd.fujitsu.oasys3 oa3 269 | application/vnd.fujitsu.oasysgp fg5 270 | application/vnd.fujitsu.oasysprs bh2 271 | application/vnd.fujixerox.art-ex 272 | application/vnd.fujixerox.art4 273 | application/vnd.fujixerox.hbpl 274 | application/vnd.fujixerox.ddd ddd 275 | application/vnd.fujixerox.docuworks xdw 276 | application/vnd.fujixerox.docuworks.binder xbd 277 | application/vnd.fut-misnet 278 | application/vnd.fuzzysheet fzs 279 | application/vnd.genomatix.tuxedo txd 280 | application/vnd.google-earth.kml+xml kml 281 | application/vnd.google-earth.kmz kmz 282 | application/vnd.grafeq gqf gqs 283 | application/vnd.gridmp 284 | application/vnd.groove-account gac 285 | application/vnd.groove-help ghf 286 | application/vnd.groove-identity-message gim 287 | application/vnd.groove-injector grv 288 | application/vnd.groove-tool-message gtm 289 | application/vnd.groove-tool-template tpl 290 | application/vnd.groove-vcard vcg 291 | application/vnd.handheld-entertainment+xml zmm 292 | application/vnd.hbci hbci 293 | application/vnd.hcl-bireports 294 | application/vnd.hhe.lesson-player les 295 | application/vnd.hp-hpgl hpgl 296 | application/vnd.hp-hpid hpid 297 | application/vnd.hp-hps hps 298 | application/vnd.hp-jlyt jlt 299 | application/vnd.hp-pcl pcl 300 | application/vnd.hp-pclxl pclxl 301 | application/vnd.httphone 302 | application/vnd.hzn-3d-crossword x3d 303 | application/vnd.ibm.afplinedata 304 | application/vnd.ibm.electronic-media 305 | application/vnd.ibm.minipay mpy 306 | application/vnd.ibm.modcap afp listafp list3820 307 | application/vnd.ibm.rights-management irm 308 | application/vnd.ibm.secure-container sc 309 | application/vnd.igloader igl 310 | application/vnd.immervision-ivp ivp 311 | application/vnd.immervision-ivu ivu 312 | application/vnd.informedcontrol.rms+xml 313 | application/vnd.intercon.formnet xpw xpx 314 | application/vnd.intertrust.digibox 315 | application/vnd.intertrust.nncp 316 | application/vnd.intu.qbo qbo 317 | application/vnd.intu.qfx qfx 318 | application/vnd.ipunplugged.rcprofile rcprofile 319 | application/vnd.irepository.package+xml irp 320 | application/vnd.is-xpr xpr 321 | application/vnd.jam jam 322 | application/vnd.japannet-directory-service 323 | application/vnd.japannet-jpnstore-wakeup 324 | application/vnd.japannet-payment-wakeup 325 | application/vnd.japannet-registration 326 | application/vnd.japannet-registration-wakeup 327 | application/vnd.japannet-setstore-wakeup 328 | application/vnd.japannet-verification 329 | application/vnd.japannet-verification-wakeup 330 | application/vnd.jcp.javame.midlet-rms rms 331 | application/vnd.jisp jisp 332 | application/vnd.joost.joda-archive joda 333 | application/vnd.kahootz ktz ktr 334 | application/vnd.kde.karbon karbon 335 | application/vnd.kde.kchart chrt 336 | application/vnd.kde.kformula kfo 337 | application/vnd.kde.kivio flw 338 | application/vnd.kde.kontour kon 339 | application/vnd.kde.kpresenter kpr kpt 340 | application/vnd.kde.kspread ksp 341 | application/vnd.kde.kword kwd kwt 342 | application/vnd.kenameaapp htke 343 | application/vnd.kidspiration kia 344 | application/vnd.kinar kne knp 345 | application/vnd.koan skp skd skt skm 346 | application/vnd.liberty-request+xml 347 | application/vnd.llamagraphics.life-balance.desktop lbd 348 | application/vnd.llamagraphics.life-balance.exchange+xml lbe 349 | application/vnd.lotus-1-2-3 123 350 | application/vnd.lotus-approach apr 351 | application/vnd.lotus-freelance pre 352 | application/vnd.lotus-notes nsf 353 | application/vnd.lotus-organizer org 354 | application/vnd.lotus-screencam scm 355 | application/vnd.lotus-wordpro lwp 356 | application/vnd.macports.portpkg portpkg 357 | application/vnd.marlin.drm.actiontoken+xml 358 | application/vnd.marlin.drm.conftoken+xml 359 | application/vnd.marlin.drm.mdcf 360 | application/vnd.mcd mcd 361 | application/vnd.medcalcdata mc1 362 | application/vnd.mediastation.cdkey cdkey 363 | application/vnd.meridian-slingshot 364 | application/vnd.mfer mwf 365 | application/vnd.mfmp mfm 366 | application/vnd.micrografx.flo flo 367 | application/vnd.micrografx.igx igx 368 | application/vnd.mif mif 369 | application/vnd.minisoft-hp3000-save 370 | application/vnd.mitsubishi.misty-guard.trustweb 371 | application/vnd.mobius.daf daf 372 | application/vnd.mobius.dis dis 373 | application/vnd.mobius.mbk mbk 374 | application/vnd.mobius.mqy mqy 375 | application/vnd.mobius.msl msl 376 | application/vnd.mobius.plc plc 377 | application/vnd.mobius.txf txf 378 | application/vnd.mophun.application mpn 379 | application/vnd.mophun.certificate mpc 380 | application/vnd.motorola.flexsuite 381 | application/vnd.motorola.flexsuite.adsi 382 | application/vnd.motorola.flexsuite.fis 383 | application/vnd.motorola.flexsuite.gotap 384 | application/vnd.motorola.flexsuite.kmr 385 | application/vnd.motorola.flexsuite.ttc 386 | application/vnd.motorola.flexsuite.wem 387 | application/vnd.mozilla.xul+xml xul 388 | application/vnd.ms-artgalry cil 389 | application/vnd.ms-asf asf 390 | application/vnd.ms-cab-compressed cab 391 | application/vnd.ms-excel xls xlm xla xlc xlt xlw 392 | application/vnd.ms-fontobject eot 393 | application/vnd.ms-htmlhelp chm 394 | application/vnd.ms-ims ims 395 | application/vnd.ms-lrm lrm 396 | application/vnd.ms-playready.initiator+xml 397 | application/vnd.ms-powerpoint ppt pps pot 398 | application/vnd.ms-project mpp mpt 399 | application/vnd.ms-tnef 400 | application/vnd.ms-wmdrm.lic-chlg-req 401 | application/vnd.ms-wmdrm.lic-resp 402 | application/vnd.ms-wmdrm.meter-chlg-req 403 | application/vnd.ms-wmdrm.meter-resp 404 | application/vnd.ms-works wps wks wcm wdb 405 | application/vnd.ms-wpl wpl 406 | application/vnd.ms-xpsdocument xps 407 | application/vnd.mseq mseq 408 | application/vnd.msign 409 | application/vnd.multiad.creator 410 | application/vnd.multiad.creator.cif 411 | application/vnd.music-niff 412 | application/vnd.musician mus 413 | application/vnd.muvee.style msty 414 | application/vnd.ncd.control 415 | application/vnd.ncd.reference 416 | application/vnd.nervana 417 | application/vnd.netfpx 418 | application/vnd.neurolanguage.nlu nlu 419 | application/vnd.noblenet-directory nnd 420 | application/vnd.noblenet-sealer nns 421 | application/vnd.noblenet-web nnw 422 | application/vnd.nokia.catalogs 423 | application/vnd.nokia.conml+wbxml 424 | application/vnd.nokia.conml+xml 425 | application/vnd.nokia.isds-radio-presets 426 | application/vnd.nokia.iptv.config+xml 427 | application/vnd.nokia.landmark+wbxml 428 | application/vnd.nokia.landmark+xml 429 | application/vnd.nokia.landmarkcollection+xml 430 | application/vnd.nokia.n-gage.ac+xml 431 | application/vnd.nokia.n-gage.data ngdat 432 | application/vnd.nokia.n-gage.symbian.install n-gage 433 | application/vnd.nokia.ncd 434 | application/vnd.nokia.pcd+wbxml 435 | application/vnd.nokia.pcd+xml 436 | application/vnd.nokia.radio-preset rpst 437 | application/vnd.nokia.radio-presets rpss 438 | application/vnd.novadigm.edm edm 439 | application/vnd.novadigm.edx edx 440 | application/vnd.novadigm.ext ext 441 | application/vnd.oasis.opendocument.chart odc 442 | application/vnd.oasis.opendocument.chart-template otc 443 | application/vnd.oasis.opendocument.formula odf 444 | application/vnd.oasis.opendocument.formula-template otf 445 | application/vnd.oasis.opendocument.graphics odg 446 | application/vnd.oasis.opendocument.graphics-template otg 447 | application/vnd.oasis.opendocument.image odi 448 | application/vnd.oasis.opendocument.image-template oti 449 | application/vnd.oasis.opendocument.presentation odp 450 | application/vnd.oasis.opendocument.presentation-template otp 451 | application/vnd.oasis.opendocument.spreadsheet ods 452 | application/vnd.oasis.opendocument.spreadsheet-template ots 453 | application/vnd.oasis.opendocument.text odt 454 | application/vnd.oasis.opendocument.text-master otm 455 | application/vnd.oasis.opendocument.text-template ott 456 | application/vnd.oasis.opendocument.text-web oth 457 | application/vnd.obn 458 | application/vnd.olpc-sugar xo 459 | application/vnd.oma-scws-config 460 | application/vnd.oma-scws-http-request 461 | application/vnd.oma-scws-http-response 462 | application/vnd.oma.bcast.associated-procedure-parameter+xml 463 | application/vnd.oma.bcast.drm-trigger+xml 464 | application/vnd.oma.bcast.imd+xml 465 | application/vnd.oma.bcast.notification+xml 466 | application/vnd.oma.bcast.sgboot 467 | application/vnd.oma.bcast.sgdd+xml 468 | application/vnd.oma.bcast.sgdu 469 | application/vnd.oma.bcast.simple-symbol-container 470 | application/vnd.oma.bcast.smartcard-trigger+xml 471 | application/vnd.oma.bcast.sprov+xml 472 | application/vnd.oma.dd2+xml dd2 473 | application/vnd.oma.drm.risd+xml 474 | application/vnd.oma.group-usage-list+xml 475 | application/vnd.oma.poc.detailed-progress-report+xml 476 | application/vnd.oma.poc.final-report+xml 477 | application/vnd.oma.poc.groups+xml 478 | application/vnd.oma.poc.optimized-progress-report+xml 479 | application/vnd.oma.xcap-directory+xml 480 | application/vnd.omads-email+xml 481 | application/vnd.omads-file+xml 482 | application/vnd.omads-folder+xml 483 | application/vnd.omaloc-supl-init 484 | application/vnd.openofficeorg.extension oxt 485 | application/vnd.osa.netdeploy 486 | application/vnd.osgi.dp dp 487 | application/vnd.otps.ct-kip+xml 488 | application/vnd.palm prc pdb pqa oprc 489 | application/vnd.paos.xml 490 | application/vnd.pg.format str 491 | application/vnd.pg.osasli ei6 492 | application/vnd.piaccess.application-licence 493 | application/vnd.picsel efif 494 | application/vnd.poc.group-advertisement+xml 495 | application/vnd.pocketlearn plf 496 | application/vnd.powerbuilder6 pbd 497 | application/vnd.powerbuilder6-s 498 | application/vnd.powerbuilder7 499 | application/vnd.powerbuilder7-s 500 | application/vnd.powerbuilder75 501 | application/vnd.powerbuilder75-s 502 | application/vnd.preminet 503 | application/vnd.previewsystems.box box 504 | application/vnd.proteus.magazine mgz 505 | application/vnd.publishare-delta-tree qps 506 | application/vnd.pvi.ptid1 ptid 507 | application/vnd.pwg-multiplexed 508 | application/vnd.pwg-xhtml-print+xml 509 | application/vnd.qualcomm.brew-app-res 510 | application/vnd.quark.quarkxpress qxd qxt qwd qwt qxl qxb 511 | application/vnd.rapid 512 | application/vnd.recordare.musicxml mxl 513 | application/vnd.recordare.musicxml+xml 514 | application/vnd.renlearn.rlprint 515 | application/vnd.rn-realmedia rm 516 | application/vnd.ruckus.download 517 | application/vnd.s3sms 518 | application/vnd.sbm.mid2 519 | application/vnd.scribus 520 | application/vnd.sealed.3df 521 | application/vnd.sealed.csf 522 | application/vnd.sealed.doc 523 | application/vnd.sealed.eml 524 | application/vnd.sealed.mht 525 | application/vnd.sealed.net 526 | application/vnd.sealed.ppt 527 | application/vnd.sealed.tiff 528 | application/vnd.sealed.xls 529 | application/vnd.sealedmedia.softseal.html 530 | application/vnd.sealedmedia.softseal.pdf 531 | application/vnd.seemail see 532 | application/vnd.sema sema 533 | application/vnd.semd semd 534 | application/vnd.semf semf 535 | application/vnd.shana.informed.formdata ifm 536 | application/vnd.shana.informed.formtemplate itp 537 | application/vnd.shana.informed.interchange iif 538 | application/vnd.shana.informed.package ipk 539 | application/vnd.simtech-mindmapper twd twds 540 | application/vnd.smaf mmf 541 | application/vnd.solent.sdkm+xml sdkm sdkd 542 | application/vnd.spotfire.dxp dxp 543 | application/vnd.spotfire.sfs sfs 544 | application/vnd.sss-cod 545 | application/vnd.sss-dtf 546 | application/vnd.sss-ntf 547 | application/vnd.street-stream 548 | application/vnd.sun.wadl+xml 549 | application/vnd.sus-calendar sus susp 550 | application/vnd.svd svd 551 | application/vnd.swiftview-ics 552 | application/vnd.syncml+xml xsm 553 | application/vnd.syncml.dm+wbxml bdm 554 | application/vnd.syncml.dm+xml xdm 555 | application/vnd.syncml.ds.notification 556 | application/vnd.tao.intent-module-archive tao 557 | application/vnd.tmobile-livetv tmo 558 | application/vnd.trid.tpt tpt 559 | application/vnd.triscape.mxs mxs 560 | application/vnd.trueapp tra 561 | application/vnd.truedoc 562 | application/vnd.ufdl ufd ufdl 563 | application/vnd.uiq.theme utz 564 | application/vnd.umajin umj 565 | application/vnd.unity unityweb 566 | application/vnd.uoml+xml uoml 567 | application/vnd.uplanet.alert 568 | application/vnd.uplanet.alert-wbxml 569 | application/vnd.uplanet.bearer-choice 570 | application/vnd.uplanet.bearer-choice-wbxml 571 | application/vnd.uplanet.cacheop 572 | application/vnd.uplanet.cacheop-wbxml 573 | application/vnd.uplanet.channel 574 | application/vnd.uplanet.channel-wbxml 575 | application/vnd.uplanet.list 576 | application/vnd.uplanet.list-wbxml 577 | application/vnd.uplanet.listcmd 578 | application/vnd.uplanet.listcmd-wbxml 579 | application/vnd.uplanet.signal 580 | application/vnd.vcx vcx 581 | application/vnd.vd-study 582 | application/vnd.vectorworks 583 | application/vnd.vidsoft.vidconference 584 | application/vnd.visio vsd vst vss vsw 585 | application/vnd.visionary vis 586 | application/vnd.vividence.scriptfile 587 | application/vnd.vsf vsf 588 | application/vnd.wap.sic 589 | application/vnd.wap.slc 590 | application/vnd.wap.wbxml wbxml 591 | application/vnd.wap.wmlc wmlc 592 | application/vnd.wap.wmlscriptc wmlsc 593 | application/vnd.webturbo wtb 594 | application/vnd.wfa.wsc 595 | application/vnd.wmc 596 | application/vnd.wordperfect wpd 597 | application/vnd.wqd wqd 598 | application/vnd.wrq-hp3000-labelled 599 | application/vnd.wt.stf stf 600 | application/vnd.wv.csp+wbxml 601 | application/vnd.wv.csp+xml 602 | application/vnd.wv.ssp+xml 603 | application/vnd.xara xar 604 | application/vnd.xfdl xfdl 605 | application/vnd.xmpie.cpkg 606 | application/vnd.xmpie.dpkg 607 | application/vnd.xmpie.plan 608 | application/vnd.xmpie.ppkg 609 | application/vnd.xmpie.xlim 610 | application/vnd.yamaha.hv-dic hvd 611 | application/vnd.yamaha.hv-script hvs 612 | application/vnd.yamaha.hv-voice hvp 613 | application/vnd.yamaha.smaf-audio saf 614 | application/vnd.yamaha.smaf-phrase spf 615 | application/vnd.yellowriver-custom-menu cmp 616 | application/vnd.zzazz.deck+xml zaz 617 | application/voicexml+xml vxml 618 | application/watcherinfo+xml 619 | application/whoispp-query 620 | application/whoispp-response 621 | application/winhlp hlp 622 | application/wita 623 | application/wordperfect5.1 624 | application/wsdl+xml wsdl 625 | application/wspolicy+xml wspolicy 626 | application/x-ace-compressed ace 627 | application/x-bcpio bcpio 628 | application/x-bittorrent torrent 629 | application/x-bzip bz 630 | application/x-bzip2 bz2 boz 631 | application/x-cdlink vcd 632 | application/x-chat chat 633 | application/x-chess-pgn pgn 634 | application/x-compress 635 | application/x-cpio cpio 636 | application/x-csh csh 637 | application/x-director dcr dir dxr fgd 638 | application/x-dvi dvi 639 | application/x-futuresplash spl 640 | application/x-gtar gtar 641 | application/x-gzip 642 | application/x-hdf hdf 643 | application/x-latex latex 644 | application/x-ms-wmd wmd 645 | application/x-ms-wmz wmz 646 | application/x-msaccess mdb 647 | application/x-msbinder obd 648 | application/x-mscardfile crd 649 | application/x-msclip clp 650 | application/x-msdownload exe dll com bat msi 651 | application/x-msmediaview mvb m13 m14 652 | application/x-msmetafile wmf 653 | application/x-msmoney mny 654 | application/x-mspublisher pub 655 | application/x-msschedule scd 656 | application/x-msterminal trm 657 | application/x-mswrite wri 658 | application/x-netcdf nc cdf 659 | application/x-pkcs12 p12 pfx 660 | application/x-pkcs7-certificates p7b spc 661 | application/x-pkcs7-certreqresp p7r 662 | application/x-rar-compressed rar 663 | application/x-sh sh 664 | application/x-shar shar 665 | application/x-shockwave-flash swf 666 | application/x-stuffit sit 667 | application/x-stuffitx sitx 668 | application/x-sv4cpio sv4cpio 669 | application/x-sv4crc sv4crc 670 | application/x-tar tar 671 | application/x-tcl tcl 672 | application/x-tex tex 673 | application/x-texinfo texinfo texi 674 | application/x-ustar ustar 675 | application/x-wais-source src 676 | application/x-x509-ca-cert der crt 677 | application/x400-bp 678 | application/xcap-att+xml 679 | application/xcap-caps+xml 680 | application/xcap-el+xml 681 | application/xcap-error+xml 682 | application/xcap-ns+xml 683 | application/xenc+xml xenc 684 | application/xhtml+xml xhtml xht 685 | application/xml xml xsl 686 | application/xml-dtd dtd 687 | application/xml-external-parsed-entity 688 | application/xmpp+xml 689 | application/xop+xml xop 690 | application/xslt+xml xslt 691 | application/xspf+xml xspf 692 | application/xv+xml mxml xhvml xvml xvm 693 | application/zip zip 694 | audio/32kadpcm 695 | audio/3gpp 696 | audio/3gpp2 697 | audio/ac3 698 | audio/amr 699 | audio/amr-wb 700 | audio/amr-wb+ 701 | audio/asc 702 | audio/basic au snd 703 | audio/bv16 704 | audio/bv32 705 | audio/clearmode 706 | audio/cn 707 | audio/dat12 708 | audio/dls 709 | audio/dsr-es201108 710 | audio/dsr-es202050 711 | audio/dsr-es202211 712 | audio/dsr-es202212 713 | audio/dvi4 714 | audio/eac3 715 | audio/evrc 716 | audio/evrc-qcp 717 | audio/evrc0 718 | audio/evrc1 719 | audio/evrcb 720 | audio/evrcb0 721 | audio/evrcb1 722 | audio/g722 723 | audio/g7221 724 | audio/g723 725 | audio/g726-16 726 | audio/g726-24 727 | audio/g726-32 728 | audio/g726-40 729 | audio/g728 730 | audio/g729 731 | audio/g7291 732 | audio/g729d 733 | audio/g729e 734 | audio/gsm 735 | audio/gsm-efr 736 | audio/ilbc 737 | audio/l16 738 | audio/l20 739 | audio/l24 740 | audio/l8 741 | audio/lpc 742 | audio/midi mid midi kar rmi 743 | audio/mobile-xmf 744 | audio/mp4 mp4a 745 | audio/mp4a-latm 746 | audio/mpa 747 | audio/mpa-robust 748 | audio/mpeg mpga mp2 mp2a mp3 m2a m3a 749 | audio/mpeg4-generic 750 | audio/parityfec 751 | audio/pcma 752 | audio/pcmu 753 | audio/prs.sid 754 | audio/qcelp 755 | audio/red 756 | audio/rtp-enc-aescm128 757 | audio/rtp-midi 758 | audio/rtx 759 | audio/smv 760 | audio/smv0 761 | audio/smv-qcp 762 | audio/sp-midi 763 | audio/t140c 764 | audio/t38 765 | audio/telephone-event 766 | audio/tone 767 | audio/ulpfec 768 | audio/vdvi 769 | audio/vmr-wb 770 | audio/vnd.3gpp.iufp 771 | audio/vnd.4sb 772 | audio/vnd.audiokoz 773 | audio/vnd.celp 774 | audio/vnd.cisco.nse 775 | audio/vnd.cmles.radio-events 776 | audio/vnd.cns.anp1 777 | audio/vnd.cns.inf1 778 | audio/vnd.digital-winds eol 779 | audio/vnd.dlna.adts 780 | audio/vnd.dolby.mlp 781 | audio/vnd.everad.plj 782 | audio/vnd.hns.audio 783 | audio/vnd.lucent.voice lvp 784 | audio/vnd.nokia.mobile-xmf 785 | audio/vnd.nortel.vbk 786 | audio/vnd.nuera.ecelp4800 ecelp4800 787 | audio/vnd.nuera.ecelp7470 ecelp7470 788 | audio/vnd.nuera.ecelp9600 ecelp9600 789 | audio/vnd.octel.sbc 790 | audio/vnd.qcelp 791 | audio/vnd.rhetorex.32kadpcm 792 | audio/vnd.sealedmedia.softseal.mpeg 793 | audio/vnd.vmx.cvsd 794 | audio/wav wav 795 | audio/x-aiff aif aiff aifc 796 | audio/x-mpegurl m3u 797 | audio/x-ms-wax wax 798 | audio/x-ms-wma wma 799 | audio/x-pn-realaudio ram ra 800 | audio/x-pn-realaudio-plugin rmp 801 | audio/x-wav wav 802 | chemical/x-cdx cdx 803 | chemical/x-cif cif 804 | chemical/x-cmdf cmdf 805 | chemical/x-cml cml 806 | chemical/x-csml csml 807 | chemical/x-pdb pdb 808 | chemical/x-xyz xyz 809 | image/bmp bmp 810 | image/cgm cgm 811 | image/fits 812 | image/g3fax g3 813 | image/gif gif 814 | image/ief ief 815 | image/jp2 816 | image/jpeg jpeg jpg jpe 817 | image/jpm 818 | image/jpx 819 | image/naplps 820 | image/png png 821 | image/prs.btif btif 822 | image/prs.pti 823 | image/svg+xml svg svgz 824 | image/t38 825 | image/tiff tiff tif 826 | image/tiff-fx 827 | image/vnd.adobe.photoshop psd 828 | image/vnd.cns.inf2 829 | image/vnd.djvu djvu djv 830 | image/vnd.dwg dwg 831 | image/vnd.dxf dxf 832 | image/vnd.fastbidsheet fbs 833 | image/vnd.fpx fpx 834 | image/vnd.fst fst 835 | image/vnd.fujixerox.edmics-mmr mmr 836 | image/vnd.fujixerox.edmics-rlc rlc 837 | image/vnd.globalgraphics.pgb 838 | image/vnd.microsoft.icon 839 | image/vnd.mix 840 | image/vnd.ms-modi mdi 841 | image/vnd.net-fpx npx 842 | image/vnd.sealed.png 843 | image/vnd.sealedmedia.softseal.gif 844 | image/vnd.sealedmedia.softseal.jpg 845 | image/vnd.svf 846 | image/vnd.wap.wbmp wbmp 847 | image/vnd.xiff xif 848 | image/x-cmu-raster ras 849 | image/x-cmx cmx 850 | image/x-icon ico 851 | image/x-pcx pcx 852 | image/x-pict pic pct 853 | image/x-portable-anymap pnm 854 | image/x-portable-bitmap pbm 855 | image/x-portable-graymap pgm 856 | image/x-portable-pixmap ppm 857 | image/x-rgb rgb 858 | image/x-xbitmap xbm 859 | image/x-xpixmap xpm 860 | image/x-xwindowdump xwd 861 | message/cpim 862 | message/delivery-status 863 | message/disposition-notification 864 | message/external-body 865 | message/http 866 | message/news 867 | message/partial 868 | message/rfc822 eml mime 869 | message/s-http 870 | message/sip 871 | message/sipfrag 872 | message/tracking-status 873 | message/vnd.si.simp 874 | model/iges igs iges 875 | model/mesh msh mesh silo 876 | model/vnd.dwf dwf 877 | model/vnd.flatland.3dml 878 | model/vnd.gdl gdl 879 | model/vnd.gs.gdl 880 | model/vnd.gtw gtw 881 | model/vnd.moml+xml 882 | model/vnd.mts mts 883 | model/vnd.parasolid.transmit.binary 884 | model/vnd.parasolid.transmit.text 885 | model/vnd.vtu vtu 886 | model/vrml wrl vrml 887 | multipart/alternative 888 | multipart/appledouble 889 | multipart/byteranges 890 | multipart/digest 891 | multipart/encrypted 892 | multipart/form-data 893 | multipart/header-set 894 | multipart/mixed 895 | multipart/parallel 896 | multipart/related 897 | multipart/report 898 | multipart/signed 899 | multipart/voice-message 900 | text/calendar ics ifb 901 | text/css css 902 | text/csv csv 903 | text/directory 904 | text/dns 905 | text/enriched 906 | text/html html htm 907 | text/parityfec 908 | text/plain txt text conf def list log in 909 | text/prs.fallenstein.rst 910 | text/prs.lines.tag dsc 911 | text/red 912 | text/rfc822-headers 913 | text/richtext rtx 914 | text/rtf 915 | text/rtp-enc-aescm128 916 | text/rtx 917 | text/sgml sgml sgm 918 | text/t140 919 | text/tab-separated-values tsv 920 | text/troff t tr roff man me ms 921 | text/ulpfec 922 | text/uri-list uri uris urls 923 | text/vnd.abc 924 | text/vnd.curl 925 | text/vnd.dmclientscript 926 | text/vnd.esmertec.theme-descriptor 927 | text/vnd.fly fly 928 | text/vnd.fmi.flexstor flx 929 | text/vnd.in3d.3dml 3dml 930 | text/vnd.in3d.spot spot 931 | text/vnd.iptc.newsml 932 | text/vnd.iptc.nitf 933 | text/vnd.latex-z 934 | text/vnd.motorola.reflex 935 | text/vnd.ms-mediapackage 936 | text/vnd.net2phone.commcenter.command 937 | text/vnd.si.uricatalogue 938 | text/vnd.sun.j2me.app-descriptor jad 939 | text/vnd.trolltech.linguist 940 | text/vnd.wap.si 941 | text/vnd.wap.sl 942 | text/vnd.wap.wml wml 943 | text/vnd.wap.wmlscript wmls 944 | text/x-asm s asm 945 | text/x-c c cc cxx cpp h hh dic 946 | text/x-fortran f for f77 f90 947 | text/x-pascal p pas 948 | text/x-java-source java 949 | text/x-setext etx 950 | text/x-uuencode uu 951 | text/x-vcalendar vcs 952 | text/x-vcard vcf 953 | text/xml 954 | text/xml-external-parsed-entity 955 | video/3gpp 3gp 956 | video/3gpp-tt 957 | video/3gpp2 3g2 958 | video/bmpeg 959 | video/bt656 960 | video/celb 961 | video/dv 962 | video/h261 h261 963 | video/h263 h263 964 | video/h263-1998 965 | video/h263-2000 966 | video/h264 h264 967 | video/jpeg jpgv 968 | video/jpm jpm jpgm 969 | video/mj2 mj2 mjp2 970 | video/mp1s 971 | video/mp2p 972 | video/mp2t 973 | video/mp4 mp4 mp4v mpg4 974 | video/mp4v-es 975 | video/mpeg mpeg mpg mpe m1v m2v 976 | video/mpeg4-generic 977 | video/mpv 978 | video/nv 979 | video/parityfec 980 | video/pointer 981 | video/quicktime qt mov 982 | video/raw 983 | video/rtp-enc-aescm128 984 | video/rtx 985 | video/smpte292m 986 | video/ulpfec 987 | video/vc1 988 | video/vnd.dlna.mpeg-tts 989 | video/vnd.fvt fvt 990 | video/vnd.hns.video 991 | video/vnd.motorola.video 992 | video/vnd.motorola.videop 993 | video/vnd.mpegurl mxu m4u 994 | video/vnd.nokia.interleaved-multimedia 995 | video/vnd.nokia.videovoip 996 | video/vnd.objectvideo 997 | video/vnd.sealed.mpeg1 998 | video/vnd.sealed.mpeg4 999 | video/vnd.sealed.swf 1000 | video/vnd.sealedmedia.softseal.mov 1001 | video/vnd.vivo viv 1002 | video/x-fli fli 1003 | video/x-ms-asf asf asx 1004 | video/x-ms-wm wm 1005 | video/x-ms-wmv wmv 1006 | video/x-ms-wmx wmx 1007 | video/x-ms-wvx wvx 1008 | video/x-msvideo avi 1009 | video/x-sgi-movie movie 1010 | x-conference/x-cooltalk ice 1011 | --------------------------------------------------------------------------------