Seperti judulnya, saya ingin menulis server HTTP. Pertanyaan saya adalah ini, bagaimana saya melakukan ini? Saya tahu ini terdengar SANGAT umum dan terlalu "tingkat tinggi", tetapi ada metode untuk kegilaan saya. Saya yakin, jawaban atas pertanyaan ini adalah agnostik bahasa; artinya, tidak peduli bahasa apa yang saya gunakan (misalnya, C, C ++, Java, dll.) jawabannya harus sama. Saya memiliki ide umum tentang bagaimana ini seharusnya bekerja:
- Buka soket pada port 80.
- Tunggu klien untuk membuat permintaan.
- Baca permintaan (yaitu, orang ini ingin halaman "contact-us.html").
- Temukan dan baca "contact-us.html".
- Kirim tajuk html, lalu kirim konten "contact-us.html"
- Selesai
Seperti yang saya katakan, saya percaya ini adalah prosesnya, tetapi saya tidak 100% yakin. Ini menuntun saya ke inti pertanyaan saya. Bagaimana atau di mana seseorang mengetahui informasi ini?
Bagaimana jika saya tidak ingin menulis hanya server HTTP, bagaimana jika saya ingin menulis server FTP, server obrolan, penampil gambar, dll.? Bagaimana cara seseorang mengetahui langkah-langkah / proses yang dibutuhkan untuk membuat server HTTP yang berfungsi?
Seorang rekan kerja memberi tahu saya tentang tajuk html, jadi saya tidak akan pernah tahu ini tanpa dia. Dia juga mengatakan sesuatu tentang menyerahkan setiap permintaan ke utas baru. Apakah ada buku besar tentang cara kerja? Adakah manual yang diperlukan untuk menjadi server HTTP?
Saya mencoba googling "bagaimana cara kerja server HTTP", tetapi satu-satunya jawaban yang dapat saya temukan adalah diarahkan ke rata-rata Joe Anda, dan tidak terhadap orang yang ingin memprogram server HTTP.
sumber
Jawaban:
Gunakan RFC2616 , Luke!
Anda membaca RFC 2616 pada HTTP / 1.1 , dan Anda melakukannya.
Itu sebenarnya proyek di tahun ke-3 saya di sekolah teknik, dan itu cukup banyak deskripsi proyek.
Alat
Alat Anda adalah:
Pertimbangan yang Menyenangkan
Hal-hal yang perlu dipertimbangkan untuk kesenangan ekstra:
Selamat bersenang-senang. Ini hal yang sangat keren untuk dilihat.
Saran Lainnya (Lebih Sederhana)
Mereka lebih mudah diatasi terlebih dahulu, dan RFC mereka jauh lebih mudah dicerna (well, IRC memiliki beberapa bagian yang aneh, tetapi yang FTP cukup jelas).
Pilihan Bahasa
Tentu saja, beberapa detail implementasi akan sangat tergantung pada bahasa dan tumpukan yang Anda gunakan untuk mengimplementasikannya. Saya mendekati semua itu di C, tapi saya yakin itu bisa menyenangkan juga dalam bahasa lain (ok, mungkin tidak terlalu menyenangkan, tapi tetap menyenangkan).
sumber
You still have lots of room for your architecture design, but it's a pretty good and directive spec.
Anda:yes and no
. Saya pikir kita sudah mempersempit daripada RFC bukan segalanya. Dan saya pikir terserah OP untuk kemudian menemukan hal-hal ini daripada langsung menunjukkan mereka lebih dari apa yang telah saya lakukan di bagian "pertimbangan ekstra" dan hal-hal lain. Itu bagian dari kesenangan.Setiap protokol yang digunakan di internet ditentukan dalam satu atau lebih dokumen publik yang disebut RFC. Semua RFC saat ini dapat ditemukan di http://www.rfc-editor.org/ , yang juga memiliki fungsi pencarian yang layak.
Protokol HTTP (versi 1.1), misalnya, ditentukan dalam RFC2616 dan protokol FTP ditentukan dalam RFC959 .
Sesuai spesifikasi, RFC menurut saya sangat mudah dibaca.
sumber
In 2014, RFC2616 was replaced by multiple RFCs (7230-7237).
. Jadi, bagaimana cara menemukan RFC yang diperbarui jika ada? Haruskah saya memeriksaObsoleted by
daftar?