title: What is correct way of transfering a file by using HTTP Response?
body: <p>i am trying to build simple web server, that able to transfer files. <br />
  I know, there is a lot of examples, but most of them too complex to understand for someone who never worked with HTTP<br />
  So i have...</p>
  
  <pre><code>    public Hashtable MimeTypes = new Hashtable();
  
      public HttpServer(int port)
      {
          this.port = port;
  
          MimeTypes.Add("html", "text/html");
          MimeTypes.Add("htm", "text/html");
          MimeTypes.Add("css", "text/css");
          MimeTypes.Add("js", "application/x-javascript");
  
          MimeTypes.Add("png", "image/png");
          MimeTypes.Add("gif", "image/gif");
          MimeTypes.Add("jpg", "image/jpeg");
          MimeTypes.Add("jpeg", "image/jpeg");
      }
  
      public void writeSuccess(string mime_type, string file_name, int file_size)
      {
          outputStream.Write("HTTP/1.0 200 OK\n");
          outputStream.Write("Content-Type: " + mime_type + "\n");
  
          if (file_name != null)//if file name isn't null, this mean we need to add additional headers
          {
              outputStream.Write("Content-Disposition: attachment; filename=" + file_name);
              outputStream.Write("Content-Length: " + file_size);
          }
  
          outputStream.Write("Connection: close\n");
          outputStream.Write("\n");
      }
  
  public override void handleGETRequest(HttpProcessor p)
  {
      Console.WriteLine("request: {0}", p.http_url);
  
      byte[] file_content = null;
  
      try { file_content = File.ReadAllBytes(work_folder + p.http_url); } //tring to read requested file
      catch (Exception exc) { p.writeFailure(); return; } //return failure if no such file
  
      string[] splitted_html_url = p.http_url.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries ); //splitting url for future format check
  
      string mime_type = "application/octet-stream"; //the most generic type
  
      if (MimeTypes.Contains(splitted_html_url[splitted_html_url.Length - 1]))
          mime_type = (string)MimeTypes[splitted_html_url[splitted_html_url.Length - 1]]; //set mimy type that math to requested file format
  
      if (mime_type.Contains("image") || mime_type == "application/octet-stream") //hacky thing for tests...
          p.writeSuccess(mime_type, p.http_url.Remove(0, 1), file_content.Length); //if mime type is image or unknown, than pass file name and length to responce builder
      else
          p.writeSuccess(mime_type, null, 0); //er else just add general headers
  
      p.outputStream.Write(Encoding.ASCII.GetString(file_content)); //write file content after headers
  }
  </code></pre>
  
  <p>It works for HTML transfers, but i can't make it transfer images :(<br />
  If i make html page with this tag:</p>
  
  <pre><code>&lt;img src = "logo225x90.gif" width = "100%" height = "100%" /&gt;
  </code></pre>
  
  <p>and place this file to right directory, it still showed in browser as missing file</p>