Web server merupakan komputer yang bertugas menyajikan
konten web yang bisa diakses melalui internet. Web server sederhana setidaknya
bisa melayani permintaan dari komputer klien dengan mengirimkan respon berupa
halaman HTML yang diminta.
Proses Permintaan Halaman Web
Saat komputer klien melalui browser-nya hendak
membuka suatu halaman web, browser akan melakukan permintaan ke web
server dengan melakukan HTTP request. Pesan permintaan tersebut dikirim
dengan method GET. Pesan tersebut memiliki header yang memuat informasi
mengenai halaman apa yang akan dibuka. Dengan memanfaatkan informasi tersebut,
web server akan merespon permintaan dengan mengirimkan halaman yang diminta.
Dengan konsep tersebut, web server sederhana dapat dibuat.
Sebuah web server akan membuka dan mengawasi/mendengarkan suatu port
dalam komputer. Pesan atau permintaan yang masuk melalui port tersebut
kemudian akan diproses dan direspon.
Respon Web Server Terhadap Permintaan
Pemrosesan pesan yang masuk melalui port tersebut
terjadi dalam beberapa langkah. Pertama, socket dibuat untuk port
tersebut. Kemudian, input stream dibuat dari socket tersebut untuk
menerima pesan yang datang. Pesan yang datang merupakan data bertipe binary.
Data biner tersebut akan kemudian di ubah ke char yang kemudian akan
disatukan ke dalam sebuah variabel bertipe string. Variabel string
inilah yang memuat pesan lengkap yang dikirim oleh browser klien.
Web server sederhana akan merespon pesan yang sudah diproses
menjadi variable string tersebut. Objek halaman yang diminta oleh klien
kemudian ditentukan path-nya berdasarkan informasi yang tertera dalam string
pesan. Path objek berada setelah kata kunci GET.
Format String Respon Berdasarkan Protokol HTTP
Respon yang diberikan oleh web server sederhana tersebut
merupakan string respon yang memiliki format tertentu. Format respon
tersebut harus sesuai dengan protokol HTTP agar browser klien mengerti
akan respon yang dikirimkan oleh web server.
Adapun format pesan respon tersebut adalah sebagai berikut.
HTTP/1.0
200 OK\r\n
Content-Type:
text/html\r\n
Server:
Bot\r\n
\r\n
<<text html>>
Bagian <<text
html>> merupakan bagian yang akan diisi oleh HTML dari halaman web yang
diminta. Untuk memasukkan string HTML ke dalam string respon, web
server sederhana membutuhkan file input stream untuk membaca sebuah file
HTML dan mendapatkan teks source code HTML.
Setelah string HTML ditambahkan dan semuanya berjalan normal, web server sederhana akan mengirimkan string respon tersebut ke socket melalui output stream. Dari output stream tersebut, data string respon akan mengalir menuju port dari socket yang telah dibuat untuk kemudian dikirim melalui jaringan komputer / internet ke port 80 pada komputer klien.
Sekilas Tentang Port 80
Port 80 merupakan port yang ditujukan untuk
melakukan HTTP request. Pesan yang datang dari port tersebut akan
diproses oleh browser klien. Hasil proses tersebut adalah halaman web
yang ditampilkan pada user interface pada browser klien tersebut.
Halaman web tersebut berasal dari kode HTML yang dihasilkan oleh pemrosesan
pesan respon yang dikirimkan oleh web server sederhana.
Kode Program Web Server Sederhana
Web server sederhana dapat dibuat dengan menggunakan berbagai
macam bahasa pemrograman. Bisa dengan Phyton, C++, Java, dan lain-lain. Berikut
ini merupakan contoh kode program web server sederhana yang dibuat dengan bahasa
pemrograman Java berdasarkan konsep yang telah dijelaskan sebelumnya. Simpan
kode program berikut ini ke dalam sebuah file berekstensi .java untuk
menjalankannya (lanjutan kode program ada di halaman selanjutnya).
package
servere8;
import
java.io.BufferedInputStream;
import
java.io.BufferedOutputStream;
import
java.io.FileInputStream;
import
java.io.IOException;
import
java.io.InputStream;
import
java.net.ServerSocket;
import
java.net.Socket;
import
java.util.logging.Level;
import
java.util.logging.Logger;
public
class Main {
/*
fungsi readLine berfungsi mendapatkan sebaris string dari
pesan request yang masih berbentuk biner
*/
public static String readLine(InputStream
is) throws IOException
{
String request = "";
int c;
while(true){
c = is.read();
request += (char) c;
if((char) c == '\n')
break;
}
return request;
}
public static void main(String[] args) {
try {
ServerSocket ss = new
ServerSocket(2222);
while(true){
Socket s = ss.accept();
BufferedInputStream is = new
BufferedInputStream(s.getInputStream());
BufferedOutputStream os = new
BufferedOutputStream(s.getOutputStream());
int c, line;
line = 0;
String request = "";
String path = "";
while(!(request = readLine(is)).equals("\r\n")){
System.out.print(request);
/* kode di bawah ini bertujuan
untuk mendapatkan halaman apa
yang diminta oleh klien
*/
if(line == 0){
int start = 5;
for(int i=start; true ;
i++){
if(request.charAt(i) != ' '){
path +=
request.charAt(i);
}
else break;
}
}
line++;
}
System.out.print(request);
FileInputStream ifs = new
FileInputStream(path);
/* kode di bawah ini melakukan
input stream dari file HTML
yang diminta oleh klien
*/
while((c = ifs.read()) != -1){
body += (char) c;
}
String response = "";
/* pesan respon dengan format
tertentu yang
akan dikirim ke klien
*/
response = "HTTP/1.0 200
OK\r\n" +
"Content-Type:
text/html\r\n" +
"Server:
Bot\r\n" +
"\r\n" +
body;
os.write(response.getBytes());
os.flush();
is.close();
os.close();
s.close();
}
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Tidak ada komentar:
Posting Komentar