Bangun server HTTP sederhana di C [tertutup]

105

Saya perlu membangun server HTTP sederhana di C. Ada panduan? Tautan? Sampel?

Nathan H.
sumber
1
Itulah yang saya pikirkan
Rik
1
Saya juga punya masalah yang sama sekarang. Saya menggunakan tautan ini . Semoga ini akan membantu Anda juga.
Udara SS Liyanage
1
bagaimana dengan FAQ tentang cara mengajukan pertanyaan. Anda harus tahu setelah 3K di perwakilan bahwa ini bukan pertanyaan nyata, bagaimana bisa mendapatkan banyak suara?
Bagaimana dengan ini> github.com/Taymindis/fcgi-function/wiki/…
Oktaheta
1
Ini rupanya pertanyaan yang sangat berguna. Kenapa ditutup?
McBear Holden

Jawaban:

85

Saya sarankan Anda melihat httpd kecil . Jika Anda ingin menulisnya dari awal, Anda pasti ingin membaca RFC 2616 secara menyeluruh . Gunakan soket BSD untuk mengakses jaringan pada tingkat yang sangat rendah.

Adam Rosenfield
sumber
2
Atau gunakan inetd dan lewati bagian jaringan.
jrockway
22
Jangan membaca RFC 2616 sekarang, itu usang oleh: RFC 7230 , RFC 7231 , RFC 7232 , RFC 7233 , RFC 7234 , RFC 7235
songhir
2
tiny httpdjuga ada di github di sini: github.com/larryhe/tinyhttpd
Purplejacket
119

Saya merekomendasikan Anda untuk melihat: Panduan Praktis untuk Menulis Klien dan Server

Apa yang harus Anda terapkan dalam langkah-langkah tambahan adalah:

  1. Jalankan lapisan soket TCP dasar Anda (dengarkan pada port / port, terima koneksi klien dan kirim / terima data).
  2. Menerapkan pembaca buffer sehingga Anda bisa membaca permintaan satu baris (dibatasi oleh CRLF) dalam satu waktu.
  3. Bacalah baris pertama. Parse metode, versi permintaan, dan jalur.
  4. Menerapkan penguraian header untuk sintaks "Header: value". Jangan lupa membuka tajuk terlipat.
  5. Periksa metode permintaan, tipe konten dan ukuran konten untuk menentukan bagaimana / apakah tubuh akan dibaca.
  6. Menerapkan decoding konten berdasarkan tipe konten.
  7. Jika Anda akan mendukung HTTP 1.1, implementasikan hal-hal seperti "100 Continue", simpan-hidup, transfer terpotong.
  8. Tambahkan langkah-langkah ketahanan / keamanan seperti mendeteksi permintaan yang tidak lengkap, membatasi jumlah maksimum klien, dll.
  9. Kecilkan kode Anda dan buka sumbernya :)
Ates Goral
sumber
Poin # 9, terutama setelah memposting pertanyaan di sini, +1 :)
Matthieu
26

Server HTTP secara konseptual sederhana:

  • Buka port 80 untuk mendengarkan
  • Ketika kontak dibuat, kumpulkan sedikit informasi (dapatkan sebagian besar - Anda dapat mengabaikan sisanya untuk saat ini)
  • Terjemahkan permintaan menjadi permintaan file
  • Buka file dan keluarkan kembali ke klien

Ini menjadi lebih sulit tergantung pada seberapa banyak HTTP yang ingin Anda dukung - POST sedikit lebih rumit, skrip, menangani banyak permintaan, dll.

Tapi dasarnya sangat sederhana.

Adam Davis
sumber
25

Mongoose (Dulunya Simple HTTP Daemon) cukup bagus. Secara khusus, ini dapat disematkan dan dikompilasi di bawah Windows, Windows CE, dan UNIX.

Bob Nadler
sumber
12

Buka soket TCP pada port 80, mulai dengarkan koneksi baru, terapkan ini . Bergantung pada tujuan Anda, Anda dapat mengabaikan hampir semuanya. Paling mudah, Anda dapat mengirim respons yang sama untuk setiap permintaan, yang hanya melibatkan penulisan teks ke soket.

Gerhana
sumber
11

Lihatlah nweb (Nigel's Web Server), "server web kecil dan aman [...] dengan hanya 200 baris kode sumber C":

https://drive.google.com/file/d/0B3msld7qnNOhN1NXaFIwSFU2Mjg/view?usp=sharing http://www.ibm.com/developerworks/systems/library/es-nweb/

Artikel tersebut mencakup kodesemu, penjelasan, dan komentar.

EDIT: Tautan IBM telah mati. Saya telah menyimpan PDF halaman web ke Google Drive. Berikut adalah unduhan kodenya:

https://drive.google.com/file/d/0B3msld7qnNOhSGZGdDJJMmY0VHM/view?usp=sharing

@ ankushagarwal telah membuat beberapa perubahan dan mengupload versinya di GitHub: https://github.com/ankushagarwal/nweb

XP1
sumber
Eh up memilih tanpa memeriksa tautan: / Saya mencari hal persis yang Anda sebutkan, jika Anda menemukan sesuatu, bisakah Anda melakukan ping ke saya? Txt
samayo
1
Tautan @samayo IBM telah mati. Saya telah menyediakan beberapa cermin.
XP1
Ini cermin dari archive.org - yang diharapkan akan ada di tahun-tahun mendatang: web.archive.org/web/20140905115151/http://www.ibm.com/…
james246
5

Saya telah menulis sendiri yang dapat Anda gunakan. Karya yang satu ini memiliki sqlite, thread safe dan dalam C ++ untuk UNIX.

Anda harus dapat memilihnya dan menggunakan kode yang kompatibel dengan C.

http://code.google.com/p/mountain-cms/

Daniel A. White
sumber
5

Spesifikasi HTTP dan Firebug sangat berguna bagi saya ketika saya harus melakukannya untuk pekerjaan rumah saya .

Semoga beruntung dengan milikmu. :)

Omer van Kloeten
sumber
2

http://www.manning.com/hethmon/ - "Illustrated Guide to HTTP oleh Paul S. Hethmon" dari Manning adalah buku yang sangat bagus untuk mempelajari protokol HTTP dan akan sangat berguna bagi seseorang yang mengimplementasikan / memperluasnya.

anjanb
sumber
1

Gunakan fungsi soket khusus platform untuk merangkum protokol HTTP, seperti yang dilakukan orang di belakang Apache .

arul
sumber