Rabu, 10 April 2013

Web Server, Proxy Server, dan Contoh Program Web Server Menggunakan Bahasa Pemrograman Java

Web server merupakan software yang memberikan layanan data yang berfungsi menerima permintaan HTTP atau HTTPS dari klien yang dikenal dengan browser web dan mengirimkan kembali (response) hasilnya dalam bentuk halaman - halaman web yang umumnya berbentuk dokumen HTML. 
Fitur-fitur dasar Web Server:

  1. HTTP: Setiap program web server bekerja dengan cara menerima request HTTP dari client dan merespon HTTP ke client tersebut sesuai permintaan(bisa berupa dokumen HTML, gambar, atau dokumen lain). Web server juga bisa mengirim respon kesalahan ketika terjadi kesalahan permintaan dari client berupa dokumen HTML atau teks yang menjelaskan penyebab terjadinya kesalahan.
  2. Logging: Setiap web server mampu mencatat informasi detil permintaan client dan responnya berupa log.
  3. Autentifikasi: Fitur untuk otorisasi permintaan dari client sebelum menggunakan resource dari web server, biasanya berupa username dan password.
  4. Penanganan konten statis
  5. Dukungan HTTPS: Dengan HTTPS memungkinkan koneksi aman dengan enkripsi ke server pada port 433 menggunakan SSL atau TSL.
  6. Kompresi konten: Hal ini digunakan untuk mengurangi waktu respon server (misal: menggunakan encoding gzip) sehingga hemat bandwidth.
  7. Virtual hosting: Berguna untuk melayani banyak website dengan satu IP address.
  8. Dukungan berkas berukuran besar
  9. Pengatur bandwidth: Berfungsi untuk membatasi kecepatan respon agar menghemat bandwidth dengan membatasu kecepatan respon supaya dapat melayani client lebih banyak.

Contoh Web Server:
Apache Tomcat, Microsoft Windows Server 2003 Internet Information Services, Lighttpd, Sun Java System, Xitami, Nginx, dan Zeus.

Proxy server adalah sebuah perangkat yang menjembatani komputer baik komputer client maupun komputer server dimana fungsi dasarnya yaitu connection sharing, filtering, dan chacing. Untuk connection sharing, Proxy server dapat bertindak sebagai gateway untuk jaringan lokal terhadap jaringan luar atau internet, karena paket data yang dikirimkan dari jaringan lokal ke jaringan luar harus melewati proxy server. Proxy sever sebagai connection sharing ini dapat bekerja pada layer Data-Link, layer Network dan Transport, maupun layer Aplikasi dalam hirarki layer komunikasi jaringan menurut OSI, namun sebagian besar pengertian, proxy server bekerja pada layer aplikasi.

Gambaran jelas yang membedakan web server dan proxy server adalah sebagai berikut:
Diagram Kerja Web Server

Simulasi Kerja Proxy Server
Contoh source code program web server yang menggunakan bahasa pemrograman Java:



import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author BASKARA
 */
public class WebServer {
    public static void main(String[] args) {
        try {
            Socket s = null;//langkah 1
            ServerSocket ss;
            ss = new ServerSocket(1234);
            s = ss.accept();
            InputStream in = s.getInputStream();
            OutputStream out = s.getOutputStream();
            
            int dummy;
            char prev;
            prev = 0;
            String line;
            
            while(true)//langkah 2
            {
                dummy = in.read();
                System.out.print((char)dummy);
                if((char)dummy=='\r'&&prev=='\n')
                {
                    break;
                }
                prev=(char)dummy;
            }
            
            FileInputStream fstream = new FileInputStream("lokasiteks.txt");//langkah 3
            
            DataInputStream dis = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader (dis));//langkah 4
            String txt = "\n";
            
            while((line = br.readLine())!= null)//langkah 5
            {
                txt+= line;
            }
            
            out.write(txt.getBytes());//langkah 6
            
            out.flush();
            s.close();
        } catch (IOException ex) {
            Logger.getLogger(WebServer.class.getName()).log(Level.SEVERE, null, ex);
        }
}
}


Penjelasan cara kerja:
  • Buat socket dan server socket lalu deklarasikan variabelnya. (Langkah 1)
  • Baca request dari client. (Langkah 2)
  • Buka file, lalu simpan dalam sebuah data stream. (Langkah 3)
  • Baca data stream tadi secara byte per byte. (Langkah 4)
  • Simpan karakter dalam string baru. (Langkah 5)
  • Tulis dalam output stream string yang isinya tulisan file yang dibuka, lalu flush dan tutup koneksi. (Langkah 6)