Apakah antara muka gerbang biasa. Menerima input daripada penyemak imbas. Mengkonfigurasi pelayan untuk CGI

Antara Muka Gerbang Biasa (CGI, Jeneral Rusia antara muka pintu masuk) - Ini kaedah piawai kawalan dinamik kandungan halaman web menggunakan program khas melaksanakan pada bahagian pelayan web. Program ini dipanggil pengendali atau gerbang CGI, tetapi lebih kerap - skrip CGI, kerana... mereka biasanya ditulis dalam bahasa skrip, terutamanya Perl.

Oleh kerana hiperteks bersifat statik, halaman web tidak boleh berinteraksi secara langsung dengan pengguna. Sebelum kemunculan JavaScript, tiada cara lain untuk bertindak balas terhadap tindakan pengguna selain menghantar data yang mereka masukkan ke pelayan web untuk pemprosesan selanjutnya. Dalam kes CGI, pemprosesan ini dilakukan menggunakan program luar dan skrip, diakses melalui antara muka standard (lihat RFC 3875: CGI Version 1.1) - gerbang biasa. Model ringkas yang menggambarkan operasi CGI ditunjukkan dalam Rajah. 1.

Bagaimanakah CGI berfungsi?

Algoritma umum untuk bekerja melalui CGI boleh dibentangkan seperti berikut:

  1. Pelanggan meminta aplikasi CGI oleh URInya.
  2. Pelayan web menerima permintaan dan menetapkan pembolehubah persekitaran , yang melaluinya data dan maklumat perkhidmatan dihantar ke aplikasi.
  3. Pelayan web mengubah hala permintaan melalui aliran standard input (stdin) kepada input program yang dipanggil.
  4. Aplikasi CGI melaksanakan semua operasi yang diperlukan dan menjana hasil sebagai HTML.
  5. Hiperteks yang dihasilkan dikembalikan ke pelayan web melalui aliran keluaran standard (stdout). Mesej ralat dihantar melalui stderr.
  6. Pelayan web menghantar hasil permintaan kepada pelanggan.

Aplikasi CGI

Tugas yang paling biasa digunakan CGI ialah penciptaan halaman interaktif, yang kandungannya bergantung pada tindakan pengguna. Contoh biasa Halaman web tersebut adalah borang pendaftaran di tapak atau borang untuk menghantar komen. Satu lagi bidang penggunaan CGI, kekal di belakang tabir interaksi pengguna, dikaitkan dengan pengumpulan dan pemprosesan maklumat tentang pelanggan: menetapkan dan membaca "kuki"; mendapatkan data mengenai penyemak imbas dan sistem pengendalian; mengira bilangan lawatan ke halaman web; pemantauan trafik web, dsb.

Keupayaan ini disediakan oleh fakta bahawa skrip CGI boleh disambungkan ke pangkalan data atau akses sistem fail pelayan. Oleh itu, skrip CGI boleh menyimpan maklumat dalam jadual atau fail pangkalan data dan mendapatkannya dari sana atas permintaan, yang tidak boleh dilakukan menggunakan HTML.

SILA AMBIL PERHATIAN: CGI bukan bahasa pengaturcaraan! Ia adalah protokol mudah yang membolehkan pelayan web menghantar data melalui stdin dan membacanya dari stdout. Oleh itu, mana-mana program pelayan, mampu bekerja dengan strim I/O standard.

Hai dunia!

Contoh skrip CGI mudah dalam Perl ditunjukkan dalam Penyenaraian 1. Jika anda menyimpan kod ini dalam fail bernama hello (nama boleh apa-apa, sambungan boleh sama), letakkan fail itu dalam direktori pelayan cgi-bin (lebih tepat lagi, dalam direktori pelayan web itu, yang bertujuan untuk aplikasi CGI dan dinyatakan dalam tetapan pelayan web) dan tetapkan hak pelaksanaan untuk fail ini (chmod uo+x hello), kemudian ia akan tersedia di alamat seperti http ://servername/cgi-bin/hello.

Penyenaraian 1. Contoh skrip CGI (Perl)

#!/usr/bin/perl print "Content-type: text/html\n\n"; cetak< CGI ucapkan Hello

Hai dunia!



Keluar HTML;

Dalam kod ini, baris #!/usr/bin/perl menentukan laluan penuh kepada penterjemah Perl. Baris jenis Kandungan: text/html\n\n ialah pengepala http yang menentukan jenis kandungan (jenis mime). Watak pemisah baris berkembar (\n\n) diperlukan; ia memisahkan pengepala daripada badan mesej.

Pembolehubah Persekitaran

Semua aplikasi CGI mempunyai akses kepada pembolehubah persekitaran yang ditetapkan oleh pelayan web. Pembolehubah ini memainkan peranan penting semasa menulis program CGI. Jadual menyenaraikan beberapa pembolehubah yang tersedia untuk CGI.

Pembolehubah persekitaranPenerangan
JENIS KANDUNGAN Jenis data yang dihantar ke pelayan. Digunakan apabila klien menghantar data, seperti memuat turun fail.
CONTENT_LENGTHMinta saiz kandungan. Pembolehubah ini ditakrifkan untuk permintaan POST.
HTTP_COOKIEMengembalikan set kuki sebagai pasangan nilai kunci.
HTTP_USER_AGENTMaklumat ejen pengguna (pelayar).
PATH_INFOLaluan direktori CGI
QUERY_STRINGRentetan pertanyaan (berkod URL) diluluskan oleh kaedah GET.
REMOTE_ADDRAlamat IP pelanggan yang membuat permintaan.
REMOTE_HOSTNama penuh (FQDN) pelanggan. (Jika ada)
REQUEST_METHODKaedah yang mana permintaan itu dilaksanakan. Selalunya DAPAT atau POS.
SCRIPT_FILENAMELaluan penuh ke skrip yang diminta (dalam sistem fail pelayan).
SCRIPT_NAMENama skrip
NAMA PELAYANNama pelayan
SERVER_ADDRAlamat IP pelayan
SERVER_SOFTWAREMaklumat tentang perisian pelayan

Penyenaraian 2 menunjukkan kod untuk program Perl kecil yang mencetak senarai pembolehubah persekitaran. Hasil kerjanya ditunjukkan dalam Rajah. 2.

Penyenaraian 2. Pembolehubah persekitaran

#!/usr/bin/perl print "Content-type: text/html\n\n"; cetak " \n \n

Persekitaran

\n"; foreach (kunci isih %ENV) ( cetak " $_: $ENV($_)
\n"; ) cetak "

\n"; keluar;

Pemindahan data: kaedah GET

Kaedah GET digunakan untuk menghantar data berkod urlen melalui rentetan pertanyaan. Alamat sumber yang diminta (skrip CGI) dan data yang dipindahkan kepadanya dipisahkan dengan tanda “?”. Contoh alamat sedemikian:

http://example.com/cgi-bin/script.cgi?key1=value1&key2=value2

Kaedah GET digunakan secara lalai untuk data yang dimasukkan ke dalam bar alamat penyemak imbas. Rentetan yang sama boleh dijana apabila menghantar data daripada borang web (tag

) jika kaedah penyerahan borang tidak dinyatakan. Semua maklumat yang dihantar melalui kaedah GET dihantar dalam teks yang jelas, jadi anda tidak boleh menggunakannya untuk menghantar kata laluan atau maklumat lain yang serupa kepada pelayan. Kaedah GET mempunyai had saiz: rentetan pertanyaan mestilah tidak lebih daripada 1024 aksara.

Maklumat yang dihantar melalui kaedah GET dihantar dalam pengepala QUERY_STRING sebagai rentetan yang terdiri daripada pasangan borang kunci=nilai, skrip CGI boleh mendapatkannya melalui pembolehubah persekitaran dengan nama yang sama.

Penyenaraian 3. Menghantar data daripada borang web menggunakan kaedah GET

Skrip CGI yang mudah: Menghantar data menggunakan kaedah GET Nama anda: nama="pengguna">
awak dari mana?: nama="dari">



Selepas memasukkan data ke dalam borang daripada Penyenaraian 3 dan mengklik butang "Serah", rentetan pertanyaan seperti ini akan dihasilkan:

http://example.com/cgi-bin/ katakan hai?pengguna=sesuatu teks&daripada=teks lain

di mana: sayhello - nama skrip CGI; pengguna dan daripada adalah nama parameter; sometext dan anothertext ialah nilai yang dimasukkan pengguna bagi parameter yang sepadan.

Penyenaraian 4 ialah skrip contoh yang boleh memproses data borang daripada Penyenaraian 3.

Penyenaraian 4. Menghantar data daripada borang web menggunakan kaedah GET

#!/usr/bin/perl local ($buffer, @pairs, $pair, $name, $value, %FORM); # Analisis persekitaran $ENV("REQUEST_METHOD") =~ tr/a-z/A-Z/; jika ($ENV(" REQUEST_METHOD")eq" DAPATKAN") ($ penimbal = $ENV(" QUERY_STRING"); ) # Pisahkan rentetan pertanyaan kepada pasangan kunci/nilai @pairs = split(/&/, $buffer); foreach $pair (@pairs) ( ($name, $value) = split(/=/, $ pasangan); $value =~ tr/+/ /; $value =~ s/%(..)/pack("C", hex($1))/cth; $FORM($name) = $value; # Kami menyimpan data dalam tatasusunan) # Hantar cetakan pengepala "Jenis kandungan: teks/html\n\n"; # Hantar cetakan hiperteks< CGI ucapkan Hello

Helo, $FORM(pengguna) daripada $FORM(dari)!



Keluar HTML;

Pemindahan data: kaedah POST

Secara umumnya, kaedah POST lebih sesuai untuk menghantar maklumat kepada skrip CGI. Blok data yang dihantar dibentuk dengan cara yang sama seperti kaedah GET, tetapi penghantaran sebenar dijalankan dalam badan permintaan. Data dimasukkan ke aplikasi CGI melalui input standard(stdin).

Untuk menghantar data menggunakan kaedah ini, ia mesti dinyatakan secara eksplisit dalam perihalan borang (action="POST").

Untuk memproses input, skrip CGI mesti membaca stdin, dan untuk melakukan ini dengan betul, ia perlu mengetahui saiz mesej daripada pembolehubah CONTENT_LENGTH. Untuk menggambarkan ini, mari kita ubah suai blok analisis persekitaran dalam Penyenaraian 4 dengan menggantikannya dengan kod berikut:

... # Analisis persekitaran $ENV("REQUEST_METHOD") =~ tr/a-z/A-Z/; jika ($ENV(" REQUEST_METHOD")eq" POS")( baca ( STDIN, $buffer, $ENV(" CONTENT_LENGTH"}); } ...

Pemprosesan lanjut parameter dan nilainya yang disimpan dalam pembolehubah $buffer dilakukan dengan cara yang sama seperti semasa menggunakan kaedah GET.

Kelebihan CGI

Banyak keupayaan CGI kini diduplikasi oleh teknologi seperti DHTML, ActiveX atau applet Java. Kelebihan utama menggunakan skrip pelayan ialah anda boleh memastikan bahawa semua pelanggan (dengan pengecualian yang jarang berlaku, biasanya dikaitkan dengan menyekat akses kepada sumber tertentu di peringkat tembok api) akan dapat bekerja dengan aplikasi pelayan. Program pelanggan mungkin hanya dilumpuhkan dalam penyemak imbas, atau tidak disokong sama sekali.

Kelemahan CGI

Kelemahan terbesar teknologi ini ialah peningkatan keperluan prestasi pelayan web. Hakikatnya ialah setiap panggilan ke aplikasi CGI menyebabkan proses baharu terhasil, dengan semua atendan di atas kepala. Jika aplikasi ditulis dengan ralat, maka situasi mungkin berlaku apabila ia, sebagai contoh, masuk ke dalam gelung. Penyemak imbas akan menamatkan sambungan apabila tamat masa tamat, tetapi pada bahagian pelayan, proses akan diteruskan sehingga pentadbir memaksa ia ditamatkan. Dalam hal ini, skrip klien mempunyai kelebihan yang ketara, kerana mereka dilaksanakan secara tempatan.

Satu lagi kelemahan CGI ialah pelayan web kurang selamat daripada penyelesaian lain. Kesalahan menetapkan hak akses kepada sumber pelayan daripada aplikasi CGI boleh menjejaskan bukan sahaja prestasi pelayan web, tetapi juga keselamatan maklumat. Walau bagaimanapun, mana-mana teknologi rangkaian boleh dianggap berpotensi tidak selamat mengikut definisi.

Alamat tetap halaman ini:

Andover, Massachusetts, 19 November 2003

Kumpulan Perdagangan, Inc. (NYSE: CGI), penulis insurans kereta penumpang persendirian terbesar di Massachusetts dan CGI Group Inc. (CGI) (TSX: GIB.A; NYSE: GIB;), penyedia terkemuka teknologi maklumat dan perkhidmatan pemprosesan perniagaan, hari ini mengumumkan menandatangani pembaharuan kontrak penyumberan luar proses perniagaan (BPO) selama enam tahun bernilai AS$35 juta. CGI akan menyediakan perkhidmatan pemprosesan dasar penuh untuk penumpang persendirian Massachusetts dan laluan kereta komersial serta menyediakan alat antara muka agensi CollaborativeEdge CGI, sokongan dan penyelenggaraan aplikasi, sokongan kawal selia, perundingan sistem dan perkhidmatan pengurusan dokumen.

Gerald Fels, naib presiden eksekutif dan CFO Commerce Group, menyatakan: "Sebagai pembekal terkemuka kereta penumpang persendirian di Massachusetts, matlamat kami adalah untuk menyediakan perkhidmatan kepada ejen dan pekerja kami yang membantu mereka mencapai tahap tertinggi. Selama bertahun-tahun kami telah memupuk hubungan yang kukuh dengan CGI. Sistem mereka teguh dan tepat dan pasukan mereka sangat biasa dengan sistem pemprosesan dalaman kami. Itu penting bagi kami."

Serge LaPalme, presiden, perkhidmatan perniagaan insurans untuk CGI menambah: "Kami sangat berbesar hati untuk meneruskan hubungan kami dengan Kumpulan Commerce, yang menjangkau lebih 30 tahun. Kumpulan Commerce terus menjadi salah satu rakan kongsi perniagaan kami yang dihargai dan strategik untuk kejayaan kami. Dalam membantu pelanggan kami lebih fokus pada perniagaan teras mereka, kami memanfaatkan teknologi baharu pada bila-bila masa dan di mana ia masuk akal. Pasukan kami mengetahui industri insurans dan persekitaran kawal selia yang sangat unik di Negeri ini dengan rapat dan hasilnya adalah pantas untuk menyesuaikan penyelesaian sedia ada kepada sektor yang sentiasa berkembang ini."

Mengenai The Commerce Group, Inc.

Commerce Group, Inc., sebuah syarikat induk insurans, beribu pejabat di Webster, Massachusetts. Anak syarikat insurans harta dan kemalangan Commerce Group termasuk The Commerce Insurance Company dan Citation Insurance Company di Massachusetts, Commerce West Insurance Company di California dan American Commerce Insurance Company di Ohio. Melalui anak syarikatnya" gabungan aktiviti insurans, Commerce Group disenaraikan sebagai yang ke-22 kumpulan insurans kereta peribadi terbesar di negara ini oleh A.M. Terbaik, berdasarkan maklumat premium bertulis langsung 2002.

Mengenai CGI
Diasaskan pada tahun 1976, CGI ialah firma perkhidmatan teknologi maklumat bebas kelima terbesar di Amerika Utara, berdasarkan jumlah pekerjanya. CGI dan syarikat gabungannya menggaji 20,000 profesional. Kadar larian hasil tahunan CGI pada masa ini ialah CDN$2.8 bilion (AS$1.9 bilion) dan pada 30 September 2003, pesanan tertunggak CGI ialah CDN$12.3 bilion (AS$9.1 bilion). CGI menyediakan IT hujung ke hujung dan perkhidmatan proses perniagaan kepada pelanggan di seluruh dunia dari pejabat di Kanada, Amerika Syarikat dan Eropah. Saham CGI disenaraikan di TSX (GIB.A) dan NYSE (GIB) dan termasuk dalam Indeks Komposit TSX 100 serta S&P/TSX Teknologi Maklumat Kanada dan Indeks MidCap Kanada. Laman Web: .

Antara muka pengguna interaktif ialah sistem yang membenarkan interaksi antara pengguna dan program. Untuk WWW, antara muka interaktif boleh ditakrifkan sebagai jujukan dokumen HTML yang melaksanakan antara muka pengguna. Anda juga boleh mengklasifikasikan prinsip pembinaan antara muka secara bersyarat mengikut jenis penjanaan dokumen HTML:

    statik;

    dinamik.

Dalam kes pertama, sumber antara muka ialah dokumen HTML yang dibuat dalam beberapa teks atau editor berorientasikan HTML. Akibatnya, dokumen ini kekal tidak berubah semasa digunakan. Dalam kes kedua, sumber antara muka ialah dokumen HTML yang dihasilkan oleh modul cgi. Akibatnya, terdapat beberapa fleksibiliti dalam mengubah suai antara muka semasa penggunaan.

Oleh itu, kita boleh memperkenalkan konsep antara muka interaktif untuk WWW. Antara muka interaktif untuk WWW ialah jujukan dokumen HTML statik atau dijana secara dinamik yang melaksanakan antara muka pengguna.

Hampir semua tugas yang menyelesaikan masalah menerima data daripada pelanggan melibatkan membina antara muka. Yang paling menarik ialah membina antara muka kepada pelbagai pangkalan data, mengakses pelayan SQL, menerima maklumat daripada peranti persisian, dan mencipta stesen kerja klien. Semua ini boleh dilakukan melalui CGI (Antara Muka Gerbang Biasa). Antara Muka Gerbang Biasa (CGI) ialah standard untuk antara muka program aplikasi luaran dengan pelayan WWW.

Tugas membina antara muka di atas dibahagikan kepada dua bahagian (Lampiran 2):

    Bahagian pelanggan. Untuk membuat bahagian klien, anda perlu mencipta dokumen HTML yang melaksanakan antara muka pengguna. Dalam HTML ini boleh dilakukan melalui borang.

2. Bahagian pelayan. Bahagian pelayan terdiri daripada modul boleh laku yang menyelesaikan tugas utama memproses data yang datang dari bahagian klien, menjana respons dalam format HTML, dsb. Modul sedemikian dipanggil modul cgi.

spesifikasi cgi

CGI mentakrifkan 4 aliran maklumat (Lampiran 3):

1) Pembolehubah Persekitaran secara bersyarat dibahagikan kepada dua jenis:

a) biasa untuk semua jenis permintaan (ditetapkan untuk semua jenis);

b) bergantung kepada kaedah permintaan.

2) Strim Keluaran Standard

CGI- modul mengeluarkan maklumat kepada aliran keluaran standard. Output ini boleh sama ada dokumen yang dijana oleh modul cgi, atau arahan kepada pelayan untuk mendapatkan dokumen yang diperlukan. Biasanya cgi-modul menghasilkan outputnya. Kelebihan pendekatan ini ialah cgi-modul tidak boleh menghasilkan pengepala HTTP penuh untuk setiap permintaan.

3) Strim Input Standard

Dalam kes kaedah permintaan POS data dihantar sebagai kandungan permintaan HTTP. Dan mereka akan dihantar ke aliran input standard. Data dihantar ke modul cgi dalam bentuk berikut: nama= nilai& nama1= nilai1&...& namaN= nilaiN,

di mana nama- nama ubah, nilai- nilai pembolehubah, N- bilangan pembolehubah.

Bait CONTENT_LENGTH dihantar ke deskriptor fail input standard. Pelayan juga menghantar CONTENT_TYPE (jenis data) ke modul cgi. Pelayan tidak menghantar aksara akhir fail selepas menghantar CONTENT_LENGTH bait data atau selepas modul cgi membacanya. Pembolehubah persekitaran CONTENT_LENGTH dan CONTENT_TYPE ditetapkan apabila pelayan melaksanakan modul cgi. Oleh itu, jika hasil daripada melaksanakan borang dengan argumen teg FORM - METHOD="POST" rentetan data firma=MMM&price=100023 dijana, maka pelayan akan menetapkan nilai CONTENT_LENGTH kepada 21 dan CONTENT_TYPE kepada application/x-www -form-urlencoded, dan kepada standard aliran input menghantar blok data.

Dalam kes kaedah DAPATKAN, rentetan data diluluskan sebagai sebahagian daripada URL. Itu. contohnya, http://host/cgi-bin/script?name1=value1&name2=value2

Dalam kes ini, pembolehubah persekitaran QUERY_STRING mengambil nilai name1=value1&name2=value2

4) Hujah baris arahan

CGI- modul pada baris arahan daripada pelayan menerima: baki URL selepas nama modul cgi sebagai parameter pertama (parameter pertama akan kosong jika hanya nama modul cgi ada), dan senarai kata kunci sebagai baki baris arahan untuk skrip carian, atau nama seli bagi medan borang dengan tanda sama yang ditambah dan nilai pembolehubah sepadan. Kata kunci, nama dan nilai medan borang dihantar dinyahkod (dari format pengekodan URL HTTP) dan dikodkan semula mengikut peraturan pengekodan shell Bourne supaya modul cgi pada baris arahan akan menerima maklumat tanpa memerlukan penukaran tambahan .

Selepas struktur "nilai-nama" telah dibentuk, anda boleh mula menyelesaikan masalah yang mana modul cgi sebenarnya dicipta. Perkara penting seterusnya ialah penjanaan dinamik dokumen HTML oleh modul cgi (memformatkan hasil operasi modul). Contohnya, jadual pemilihan daripada pangkalan data. Untuk melakukan ini, modul cgi mesti mengeluarkan pengepala yang terdiri daripada baris ke aliran keluaran standard: Jenis kandungan: teks/html dan rentetan kosong (dua aksara CR). Selepas pengepala ini anda boleh memberikan sebarang teks dalam format HTML.

Pemilik kedai dalam talian sudah biasa dengan konsep "perdagangan elektronik" secara langsung; mereka sudah tahu jawapan kepada soalan "e-dagang - apakah itu?" Tetapi jika anda sampai ke bahagian bawahnya, banyak nuansa muncul dan istilah ini mengambil makna yang lebih luas.

E-dagang: apakah itu?

Konsep umum adalah seperti berikut: e-dagang difahami sebagai pendekatan tertentu untuk menjalankan perniagaan, yang melibatkan kemasukan beberapa operasi yang menggunakan pemindahan data digital dalam penyediaan barangan atau penyediaan perkhidmatan/kerja, termasuk menggunakan Internet.

Oleh itu, ia adalah sebarang transaksi komersial yang dijalankan menggunakan alat komunikasi elektronik.

Skim kerja disusun seperti berikut:

  • sesiapa sahaja boleh menjadi blogger atau mana-mana pemilik lain halaman Internet mereka sendiri) mendaftar dalam sistem ini;
  • mendapat pautan sendiri;
  • meletakkan kod khas pada halaman webnya - iklan untuk rakan kongsi rasmi terpilih Rangkaian Rakan Kongsi e-Dagang muncul;
  • memantau penukaran laman web;
  • memperoleh peratusan tertentu untuk setiap pembelian oleh pelawat ke tapak web anda yang mengikuti pautan ahli gabungan.

e-Dagang WP

Sebilangan besar orang kini berminat dengan e-dagang, terutamanya disebabkan oleh keinginan untuk mencipta laman web mereka sendiri, sebuah kedai dalam talian yang unik untuk menjual produk mereka sendiri. Untuk memenuhi permintaan yang semakin meningkat ini, pembangun telah menumpukan pada mencipta templat e-dagang. Mari lihat apa ini seterusnya.

Salah satu contoh templat ialah e-dagang WordPress. Ia adalah pemalam troli beli-belah untuk WordPress (salah satu sistem pengurusan sumber web yang paling terkenal), bertujuan terutamanya untuk mencipta dan mengatur blog). Ia disediakan secara percuma sepenuhnya dan membolehkan pelawat tapak membuat pembelian di laman web.

Dengan kata lain, pemalam ini membolehkan anda membuat kedai dalam talian (berdasarkan WordPress). Pemalam e-dagang ini mempunyai semua alat, tetapan dan pilihan yang diperlukan untuk memenuhi keperluan moden.

Terima kasih kepada World Wide Web, hampir semua orang boleh memberikan maklumat dalam talian dalam bentuk yang mudah dipandang dan boleh disebarkan secara meluas. Anda sudah pasti melayari Internet dan melihat tapak lain, dan kini anda mungkin tahu bahawa akronim yang menakutkan seperti "HTTP" dan "HTML" hanyalah singkatan untuk "Web" dan "cara maklumat dinyatakan di Internet." Anda mungkin sudah mempunyai pengalaman menyampaikan maklumat di Internet.

Internet telah terbukti sebagai medium yang ideal untuk mengedarkan maklumat, seperti yang dapat dilihat daripada popularitinya yang sangat besar dan perkembangan yang meluas. Walaupun ada yang mempersoalkan kegunaan Internet dan mengaitkan perkembangan dan popularitinya yang meluas terutamanya kepada pengiklanan yang mengganggu, Internet tidak dapat dinafikan sebagai medium penting untuk menyampaikan semua jenis maklumat. Bukan sahaja terdapat banyak perkhidmatan yang tersedia untuk menyediakan maklumat terkini (berita, cuaca, acara sukan secara langsung) dan bahan rujukan secara elektronik, terdapat juga sejumlah besar jenis data lain yang tersedia. IRS, yang mengedarkan semua borang nyata cukai 1995 dan maklumat lain melalui World Wide Web, baru-baru ini mengaku menerima mel peminat untuk laman webnya. Siapa sangka IRS akan menerima mel peminat? Ini bukan kerana tapaknya direka bentuk dengan baik, tetapi kerana ia telah terbukti sebagai alat yang benar-benar berguna untuk beribu-ribu, mungkin berjuta-juta, orang.

Apakah yang menjadikan Web unik dan perkhidmatan maklumat yang begitu menarik? Pertama sekali, ia menyediakan antara muka hipermedia kepada data. Fikirkan tentang pemacu keras komputer anda. Biasanya, data dinyatakan dalam cara linear, sama dengan sistem fail. Sebagai contoh, anda mempunyai beberapa folder, dan di dalam setiap folder terdapat sama ada dokumen atau folder lain. Web menggunakan paradigma yang berbeza untuk menyatakan maklumat yang dipanggil hipermedia. Antara muka hiperteks terdiri daripada dokumen dan pautan. Pautan ialah perkataan yang diklik untuk melihat dokumen lain atau mencari jenis maklumat lain. Web memperluaskan konsep hiperteks untuk memasukkan jenis media lain, seperti grafik, bunyi, video (oleh itu dinamakan "hypermedia"). Memilih teks atau grafik pada dokumen membolehkan anda melihat maklumat berkaitan tentang item yang dipilih dalam sebarang bentuk.

Hampir semua orang boleh mendapat manfaat daripada cara penyampaian dan pengedaran maklumat yang ringkas dan unik ini, daripada ahli akademik yang ingin segera menggunakan data dengan rakan sekerja mereka kepada ahli perniagaan yang berkongsi maklumat tentang syarikat mereka dengan semua orang. Walau bagaimanapun, walaupun memberi maklumat adalah sangat penting, dalam beberapa tahun kebelakangan ini ramai yang merasakan bahawa menerima maklumat adalah proses yang sama pentingnya.

Walaupun Web menyediakan antara muka hipermedia yang unik untuk maklumat, terdapat banyak cara lain yang berkesan untuk mengedarkan data. Contohnya, perkhidmatan rangkaian seperti File Transfer Protocol (FTP) dan kumpulan berita Gopher telah wujud lama sebelum World Wide Web. Mel elektronik telah menjadi medium utama untuk komunikasi dan pertukaran maklumat di Internet dan kebanyakan rangkaian lain hampir dari awal rangkaian ini. Mengapakah Internet menjadi cara yang popular untuk menyebarkan maklumat? Aspek multimedia Internet telah menyumbang dengan ketara kepada kejayaannya yang belum pernah berlaku sebelum ini, tetapi untuk Internet menjadi paling berkesan, ia mestilah interaktif.

Tanpa keupayaan untuk menerima input pengguna dan memberikan maklumat, Web akan menjadi persekitaran statik sepenuhnya. Maklumat hanya tersedia dalam format yang ditentukan oleh pengarang. Ini akan menjejaskan salah satu keupayaan pengkomputeran secara umum: maklumat interaktif. Sebagai contoh, daripada memaksa pengguna untuk melihat berbilang dokumen seolah-olah dia sedang melihat melalui buku atau kamus, adalah lebih baik untuk membenarkan pengguna mengenal pasti kata kunci mengenai topik yang diminati. Pengguna boleh menyesuaikan persembahan data dan bukannya bergantung pada struktur tegar yang ditakrifkan oleh pembekal kandungan.

Istilah "Pelayan web" boleh mengelirukan kerana ia boleh merujuk kepada kedua-dua mesin fizikal dan perisian yang digunakan untuk berkomunikasi dengan pelayar Internet. Apabila penyemak imbas meminta alamat Web yang diberikan, ia mula-mula menyambung ke mesin melalui Internet, menghantar perisian pelayan Web permintaan untuk dokumen tersebut. Perisian ini berjalan secara berterusan, menunggu permintaan sedemikian tiba dan bertindak balas dengan sewajarnya.

Walaupun pelayan boleh menghantar dan menerima data, pelayan itu sendiri mempunyai fungsi terhad. Sebagai contoh, pelayan yang paling primitif hanya boleh menghantar fail yang diperlukan kepada penyemak imbas. Pelayan biasanya tidak tahu apa yang perlu dilakukan dengan input tambahan ini atau itu. Jika ISP tidak memberitahu pelayan cara mengendalikan maklumat tambahan ini, pelayan kemungkinan besar akan mengabaikan input.

Agar pelayan dapat melakukan operasi lain selain mencari dan menghantar fail ke pelayar Internet, anda perlu tahu cara mengembangkan fungsi pelayan. Sebagai contoh, pelayan Web tidak boleh mencari pangkalan data berdasarkan kata kunci yang dimasukkan oleh pengguna dan mengembalikan berbilang dokumen yang sepadan melainkan keupayaan sedemikian telah diprogramkan ke dalam pelayan dalam beberapa cara.

Apakah CGI?

Antara Muka Gerbang Biasa (CGI) ialah antara muka kepada pelayan yang membolehkan anda memanjangkan kefungsian pelayan. Menggunakan CGI, anda boleh berinteraksi secara interaktif dengan pengguna yang mengakses tapak anda. Pada peringkat teori, CGI membenarkan pelayan dapat menghuraikan (mentafsir) input daripada pelayar dan mengembalikan maklumat berdasarkan input pengguna. Pada peringkat praktikal, CGI ialah antara muka yang membolehkan pengaturcara menulis program yang berkomunikasi dengan mudah dengan pelayan.

Biasanya, untuk mengembangkan keupayaan pelayan, anda perlu mengubah suai pelayan itu sendiri. Penyelesaian ini tidak diingini kerana ia memerlukan pemahaman lapisan bawah pengaturcaraan rangkaian Protokol Internet. Ini juga memerlukan pengeditan dan penyusunan semula kod sumber pelayan atau menulis pelayan tersuai untuk setiap tugas. Katakan kita ingin memperluaskan keupayaan pelayan supaya ia bertindak sebagai gerbang Web-ke-e-mel, mengambil maklumat yang dimasukkan pengguna daripada penyemak imbas dan menghantarnya e-mel kepada pengguna lain. Pelayan perlu memasukkan kod untuk menghuraikan input daripada penyemak imbas, memajukannya melalui e-mel kepada pengguna lain, dan memajukan respons kembali ke penyemak imbas melalui sambungan rangkaian.

Pertama, tugas sedemikian memerlukan akses kepada kod pelayan, yang tidak selalu mungkin.

Kedua, ia sukar dan memerlukan pengetahuan teknikal yang luas.

Ketiga, ini hanya terpakai pada pelayan tertentu. Jika anda perlu memindahkan pelayan anda ke platform lain, anda perlu menjalankan atau sekurang-kurangnya menghabiskan banyak masa mengalihkan kod ke platform tersebut.

Kenapa CGI?

CGI menawarkan penyelesaian mudah alih dan mudah untuk masalah ini. Protokol CGI mentakrifkan cara standard untuk program berkomunikasi dengan pelayan Web. Tanpa sebarang pengetahuan khusus, anda boleh menulis program dalam mana-mana bahasa mesin yang antara muka dan berkomunikasi dengan pelayan Web. Program ini akan berfungsi dengan semua pelayan Web yang memahami protokol CGI.

Komunikasi CGI dilakukan menggunakan input dan output standard, yang bermaksud bahawa jika anda tahu cara mencetak dan membaca data menggunakan bahasa pengaturcaraan anda, anda boleh menulis aplikasi pelayan Web. Selain daripada menghuraikan input dan output, pengaturcaraan aplikasi CGI hampir sama dengan pengaturcaraan mana-mana aplikasi lain. Contohnya, untuk memprogram program "Hello, World!", anda menggunakan fungsi cetakan bahasa anda dan format yang ditentukan untuk program CGI untuk mencetak mesej yang sesuai.

Memilih bahasa pengaturcaraan

Oleh kerana CGI ialah antara muka universal, anda tidak terhad kepada mana-mana bahasa mesin tertentu. Soalan penting yang sering ditanya ialah: apakah bahasa pengaturcaraan yang boleh digunakan untuk pengaturcaraan CGI? Anda boleh menggunakan mana-mana bahasa yang membolehkan anda melakukan perkara berikut:

  • Cetak ke output standard
  • Baca daripada input standard
  • Baca daripada mod berubah-ubah

Hampir semua bahasa pengaturcaraan dan banyak bahasa skrip melakukan tiga perkara ini, dan anda boleh menggunakan mana-mana daripadanya.

Bahasa jatuh ke dalam salah satu daripada dua kelas berikut: diterjemahkan dan ditafsir. Bahasa terjemahan seperti C atau C++ biasanya lebih kecil dan lebih pantas, manakala bahasa yang ditafsirkan seperti Perl atau Rexx kadangkala memerlukan penterjemah yang besar untuk dimuatkan semasa dimulakan. Selain itu, anda boleh mengedarkan kod binari (kod yang diterjemahkan ke dalam bahasa mesin) tanpa kod sumber jika bahasa anda boleh diterjemahkan. Mengedarkan skrip yang boleh ditafsir biasanya bermaksud mengedarkan kod sumber.

Sebelum memilih bahasa, anda perlu mempertimbangkan keutamaan anda terlebih dahulu. Anda perlu menimbang faedah kelajuan dan kecekapan satu bahasa pengaturcaraan berbanding dengan kemudahan pengaturcaraan yang lain. Jika anda mempunyai keinginan untuk mempelajari bahasa lain, daripada menggunakan bahasa yang anda sudah tahu, timbangkan kelebihan dan kekurangan kedua-dua bahasa dengan teliti.

Dua bahasa yang paling biasa digunakan untuk pengaturcaraan CGI ialah C dan Perl (kedua-duanya diliputi dalam buku ini). Kedua-duanya mempunyai kelebihan dan kekurangan yang jelas. Perl ialah bahasa peringkat tinggi, dan pada masa yang sama bahasa yang berkuasa, terutamanya sesuai untuk menghuraikan teks. Walaupun kemudahan penggunaan, fleksibiliti dan kuasa menjadikannya bahasa yang menarik untuk pengaturcaraan CGI, saiznya yang agak besar dan operasi yang lebih perlahan kadangkala menjadikannya tidak sesuai untuk sesetengah aplikasi. Program C adalah lebih kecil, lebih cekap dan menyediakan kawalan sistem peringkat rendah, tetapi lebih kompleks untuk atur cara, tidak mempunyai rutin pemprosesan teks terbina dalam yang ringan dan lebih sukar untuk nyahpepijat.

Bahasa manakah yang paling sesuai untuk pengaturcaraan CGI? Yang anda anggap lebih mudah dari sudut pengaturcaraan. Kedua-duanya sama-sama berkesan untuk pengaturcaraan aplikasi CGI, dan dengan perpustakaan yang sesuai, kedua-duanya mempunyai keupayaan yang sama. Walau bagaimanapun, jika anda mempunyai pelayan yang sukar dicapai, anda boleh menggunakan program terjemahan C yang lebih kecil. Jika anda perlu menulis aplikasi dengan cepat yang memerlukan banyak kerja pemprosesan teks, anda boleh menggunakan Perl sebagai ganti.

Awas

Terdapat beberapa alternatif penting untuk aplikasi CGI. Banyak pelayan kini termasuk pengaturcaraan API, yang menjadikannya lebih mudah untuk memprogram sambungan pelayan langsung berbanding dengan aplikasi CGI kendiri. Pelayan API secara amnya lebih cekap daripada program CGI. Pelayan lain termasuk fungsi terbina dalam yang boleh mengendalikan elemen bukan CGI khas, seperti pemautan pangkalan data. Akhir sekali, sesetengah aplikasi boleh dikendalikan oleh beberapa teknologi sisi klien baharu (bukan bahagian pelayan) seperti Java. Dengan perubahan pesat dalam teknologi, adakah CGI akan menjadi usang dengan cepat?

hampir tidak. CGI mempunyai beberapa kelebihan berbanding teknologi yang lebih baharu.

  • Ia serba boleh dan mudah alih. Anda boleh menulis aplikasi CGI menggunakan hampir mana-mana bahasa pengaturcaraan pada mana-mana platform. Beberapa alternatif, seperti API pelayan, menghadkan anda kepada bahasa tertentu dan lebih sukar untuk dipelajari.
  • Tidak mungkin teknologi pihak pelanggan seperti Java akan menggantikan CGI, kerana terdapat beberapa aplikasi yang aplikasi sebelah pelayan lebih sesuai untuk dijalankan.
  • Kebanyakan batasan CGI adalah had HTML atau HTTP. Apabila standard Internet secara keseluruhannya berkembang, begitu juga keupayaan CGI.

Ringkasan

Antara Muka Gerbang Biasa ialah protokol yang mana atur cara berinteraksi dengan pelayan Web. Kepelbagaian CGI memberikan pengaturcara keupayaan untuk menulis program gerbang dalam hampir mana-mana bahasa, walaupun terdapat banyak pertukaran yang dikaitkan dengan bahasa yang berbeza. Tanpa keupayaan ini, mencipta halaman Web interaktif akan menjadi sukar, paling baik memerlukan pengubahsuaian pelayan, dan interaktiviti tidak akan tersedia kepada kebanyakan pengguna yang bukan pentadbir tapak.

Bab 2: Asas

Beberapa tahun yang lalu, saya mencipta halaman untuk kolej di Harvard di mana orang ramai boleh menghantar komen tentang mereka. Pada masa itu, Internet masih muda dan dokumentasi adalah terhad. Saya, seperti ramai yang lain, bergantung pada dokumentasi pendek dan sistem pengaturcaraan yang dicipta oleh orang lain untuk mengajar diri saya pengaturcaraan CGI. Walaupun kaedah kajian ini memerlukan beberapa carian, banyak eksperimen, dan mencipta banyak soalan, ia sangat berkesan. Bab ini adalah hasil kerja awal saya dengan CGI (dengan beberapa tweak, sudah tentu).

Walaupun ia mengambil sedikit masa untuk memahami sepenuhnya dan menguasai antara muka get laluan biasa, protokol itu sendiri agak mudah. Sesiapa sahaja yang mempunyai beberapa kemahiran pengaturcaraan asas dan biasa dengan Web boleh dengan cepat belajar memprogramkan aplikasi CGI yang agak kompleks seperti yang saya dan orang lain belajar lakukan beberapa tahun lalu.

Tujuan bab ini adalah untuk membentangkan asas CGI dalam cara yang komprehensif, walaupun padat. Setiap konsep yang dibincangkan di sini dibentangkan secara terperinci dalam bab-bab berikutnya. Walau bagaimanapun, selepas melengkapkan bab ini, anda boleh segera memulakan pengaturcaraan aplikasi CGI. Sebaik sahaja anda mencapai tahap ini, anda boleh mempelajari selok-belok CGI, sama ada dengan membaca seluruh buku ini atau hanya mencuba sendiri.

Anda boleh mengurangkan pengaturcaraan CGI kepada dua tugas: menerima maklumat daripada penyemak imbas Web dan menghantar maklumat kembali ke penyemak imbas. Ini dilakukan dengan agak intuitif sebaik sahaja anda membiasakan diri dengan penggunaan biasa aplikasi CGI. Selalunya pengguna diminta untuk mengisi beberapa borang, contohnya, memasukkan namanya. Setelah pengguna mengisi borang dan menekan Enter, maklumat ini dihantar ke program CGI. Program CGI kemudiannya mesti menukar maklumat ini kepada sesuatu yang difahaminya, memprosesnya dengan sewajarnya, dan kemudian menghantarnya kembali ke penyemak imbas, sama ada pengesahan ringkas atau hasil carian dalam pangkalan data pelbagai guna.

Dalam erti kata lain, pengaturcaraan CGI memerlukan pemahaman cara menerima input daripada pelayar Internet dan cara menghantar kembali output. Perkara yang berlaku antara peringkat input dan output program CGI bergantung pada matlamat pembangun. Anda akan mendapati bahawa kesukaran utama dalam pengaturcaraan CGI terletak pada peringkat pertengahan ini; Sebaik sahaja anda belajar cara bekerja dengan input dan output, itu pada asasnya cukup untuk menjadi pembangun CGI.

Dalam bab ini, anda akan mempelajari prinsip di sebalik input dan output CGI, serta kemahiran asas lain yang anda perlukan untuk menulis dan menggunakan CGI, termasuk perkara seperti mencipta borang HTML dan menamakan program CGI anda. Bab ini merangkumi topik berikut:

  • Program tradisional "Hello, World!";
  • Output CGI: Menghantar maklumat kembali untuk paparan dalam pelayar Internet;
  • Mengkonfigurasi, memasang dan menjalankan aplikasi. Anda akan belajar tentang platform dan pelayan Web yang berbeza;
  • Input CGI: Tafsiran maklumat yang dihantar oleh pelayar Web. Pengenalan kepada beberapa perpustakaan pengaturcaraan yang berguna untuk menghuraikan input tersebut;
  • Contoh mudah: ia merangkumi semua pelajaran dalam bab tertentu;
  • Strategi pengaturcaraan.

Disebabkan sifat bab ini, saya hanya menyentuh sedikit topik. Jangan risau; Semua topik ini dibincangkan dengan lebih mendalam dalam bab lain.

Hai dunia!

Anda bermula dengan masalah pengaturcaraan pengenalan tradisional. Anda akan menulis program yang memaparkan "Hello, World!" pada pelayar Web anda. Sebelum anda menulis program ini, anda mesti memahami maklumat yang diharapkan oleh penyemak imbas Web daripada program CGI. Anda juga perlu tahu cara menjalankan program ini supaya anda boleh melihatnya dalam tindakan.

CGI adalah bebas bahasa, jadi anda boleh melaksanakan program ini dalam mana-mana bahasa. Beberapa bahasa berbeza digunakan di sini untuk menunjukkan kemerdekaan setiap bahasa. Di Perl, program "Hello, World!" ditunjukkan dalam Penyenaraian 2.1.

Penyenaraian 2.1. Hai dunia! dalam Perl. #!/usr/local/bin/perl # Hello.cgi - Cetakan program CGI pertama saya "Jenis Kandungan: teks/html\n\n"; cetak " \n"; cetak " Hai dunia!"; cetak "\n"; cetak " \n"; cetak "

Hai dunia!

\n"; cetak "

\n";

Simpan program ini sebagai hello.cgi, dan pasangkannya di lokasi yang sesuai. (Jika anda tidak pasti di mana ia berada, jangan risau; anda akan mengetahui dalam bahagian "Memasang dan Menjalankan Program CGI" kemudian dalam bab ini.) Bagi kebanyakan pelayan, direktori yang anda perlukan ialah cgi-bin . Sekarang, panggil program dari penyemak imbas Web anda. Bagi kebanyakan, ini bermakna membuka pencari sumber seragam (URL) berikut:

http://hostname/directoryname/hello.cgi

Nama hos ialah nama pelayan Web anda dan nama direktori ialah direktori tempat anda meletakkan hello.cgi (mungkin cgi-bin).

Berpisah hello.cgi

Terdapat beberapa perkara yang perlu diberi perhatian tentang hello.cgi.

Pertama, anda menggunakan arahan cetakan mudah. Program CGI tidak memerlukan sebarang deskriptor fail khas atau deskriptor output. Untuk menghantar output ke penyemak imbas, hanya cetak ke stdout.

Kedua, ambil perhatian bahawa kandungan pernyataan cetakan pertama (Content-Type: text/html) tidak muncul pada penyemak imbas Web anda. Anda boleh menghantar sebarang maklumat yang anda mahu kembali ke penyemak imbas (halaman HTML, grafik atau bunyi), tetapi pertama sekali, anda perlu memberitahu penyemak imbas jenis data yang anda hantar. Baris ini memberitahu penyemak imbas jenis maklumat yang diharapkan - dalam kes ini, halaman HTML.

Ketiga, program ini dipanggil hello.cgi. Anda tidak semestinya perlu menggunakan sambungan .cgi dengan nama program CGI anda. Walaupun kod sumber untuk banyak bahasa juga menggunakan sambungan .cgi, ia tidak digunakan untuk menunjukkan jenis bahasa, tetapi merupakan cara untuk pelayan mengenal pasti fail tersebut sebagai fail boleh laku dan bukannya fail grafik, fail HTML atau fail teks. Pelayan sering dikonfigurasikan untuk hanya cuba melaksanakan fail yang mempunyai sambungan ini, memaparkan kandungan semua yang lain. Walaupun menggunakan sambungan .cgi tidak diperlukan, ia masih dianggap sebagai amalan yang baik.

Secara umum, hello.cgi terdiri daripada dua bahagian utama:

  • memberitahu pelayar maklumat yang diharapkan (Jenis Kandungan: teks/html)
  • memberitahu pelayar perkara yang hendak dipaparkan (Hello, World!)

Hai dunia! dalam C

Untuk menunjukkan kebebasan bahasa program CGI, Penyenaraian 2.2 menunjukkan persamaan program hello.cgi yang ditulis dalam C.

Penyenaraian 2.2. Hai dunia! dalam C. /* hello.cgi.c - Helo, CGI Dunia */ #include int main() ( printf("Jenis Kandungan: text/html\r\n\r\n"); printf(" \n"); printf(" Hai dunia!\n"); printf("\n"); printf(" \n"); printf("

Hai dunia!

\n"); printf("

\n");)

Catatan

Ambil perhatian bahawa versi Perl hello.cgi menggunakan cetakan Jenis Kandungan ": text/html\n\n "; Walaupun versi C menggunakan Printf("Content-Type: text/html\r\n\r\n");

Mengapakah Perl mencetak operator berakhir dengan dua baris baharu (\n) manakala C printf berakhir dengan dua pemulangan gerabak dan baris baharu (\r\n)?

Secara teknikal, pengepala (semua output sebelum baris kosong) dijangka akan dipisahkan oleh pemulangan pengangkutan dan baris baharu. Malangnya, pada mesin DOS dan Windows, Perl menterjemah \r sebagai satu lagi baris baharu dan bukannya sebagai pemulangan pengangkutan.

Walaupun pengecualian \rs Perl secara teknikal tidak betul, ia akan berfungsi pada hampir semua protokol dan sama mudah alih merentas semua platform. Oleh itu, dalam semua contoh Perl dalam buku ini, saya menggunakan pengepala pemisah baris baharu dan bukannya pulangan pengangkutan dan baris baharu.

Penyelesaian yang sesuai untuk masalah ini dibentangkan dalam Bab 4, Kesimpulan.

Pelayan Web mahupun penyemak imbas tidak peduli bahasa yang digunakan untuk menulis program. Walaupun setiap bahasa mempunyai kelebihan dan kekurangan sebagai bahasa pengaturcaraan CGI, sebaiknya gunakan bahasa yang anda paling selesa bekerja dengannya. (Pilihan bahasa pengaturcaraan dibincangkan dengan lebih terperinci dalam Bab 1, “Antaramuka Gerbang Biasa (CGI)”).

Penyampaian CGI

Kini anda boleh melihat dengan lebih dekat isu penghantaran maklumat ke penyemak imbas Web. Daripada contoh "Hello, World!", anda boleh melihat bahawa penyemak imbas Web mengharapkan dua set data: pengepala, yang mengandungi maklumat seperti maklumat yang hendak dipaparkan (cth Jenis Kandungan: baris) dan maklumat sebenar (apa pelayar Web paparan). Kedua-dua maklumat ini dipisahkan oleh baris kosong.

Pengepala dipanggil pengepala HTTP. Ia memberikan maklumat penting tentang maklumat yang akan diterima oleh penyemak imbas. Terdapat beberapa jenis pengepala HTTP yang berbeza, dan yang paling biasa ialah pengepala yang pernah anda gunakan sebelum ini: Jenis Kandungan: pengepala. Anda boleh menggunakan gabungan pengepala HTTP yang berbeza, dipisahkan oleh pemulangan pengangkutan dan baris baharu (\r\n). Baris kosong yang memisahkan pengepala daripada data juga terdiri daripada pemulangan pengangkutan dan baris baharu (mengapa kedua-duanya diperlukan dibincangkan secara ringkas dalam nota sebelumnya dan diperincikan dalam Bab 4). Anda akan belajar tentang pengepala HTTP lain dalam Bab 4; Pada masa ini anda sedang berurusan dengan Content-Type: header.

Jenis Kandungan: Pengepala menerangkan jenis data yang CGI pulangkan. Format yang sesuai untuk pengepala ini ialah:

Jenis Kandungan: subjenis/jenis

Di mana subjenis/jenis ialah jenis Sambungan Mel Internet Serbaguna (MIME) yang betul. Jenis MIME yang paling biasa ialah jenis HTML: text/html. Jadual 2.1 menyenaraikan beberapa lagi jenis MIME biasa yang akan dibincangkan; Penyenaraian dan analisis yang lebih lengkap bagi jenis MIME disediakan dalam Bab 4.

Catatan

MIME pada asalnya dicipta untuk menerangkan kandungan badan mesej mel. Ia telah menjadi cara yang agak biasa untuk mewakili maklumat Jenis Kandungan. Anda boleh membaca lebih lanjut mengenai MIME dalam RFC1521. RFC di Internet bermaksud Permintaan untuk Komen, yang merupakan ringkasan keputusan yang dibuat oleh kumpulan di Internet yang cuba menetapkan piawaian. Anda boleh melihat keputusan RFC1521 di alamat berikut: http://andrew2.andrew.cmu.edu/rfc/rfc1521.html

Jadual 2.1. Beberapa perkara biasa jenis MIME. Jenis MIME Perihalan Teks/html Hypertext Markup Language (HTML) Teks/plain Text biasa Fail Imej/gif Fail grafik GIF Imej/jpeg Fail grafik mampat JPEG Audio/asas Fail Audio Sun *.au Audio/x-wav Fail Windows *. wav

Selepas pengepala dan baris kosong, anda hanya mencetak data dalam bentuk yang anda perlukan. Jika anda menghantar HTML, kemudian cetak teg HTML dan data ke stdout selepas pengepala. Anda juga boleh menghantar grafik, bunyi dan fail binari lain dengan hanya mencetak kandungan fail ke stdout. Beberapa contoh ini diberikan dalam Bab 4.

Memasang dan Menjalankan Program CGI

Bahagian ini agak menyimpang daripada pengaturcaraan CGI dan bercakap tentang mengkonfigurasi pelayan Web anda untuk menggunakan CGI, memasang dan menjalankan program. Anda akan diperkenalkan kepada pelayan yang berbeza untuk platform yang berbeza dengan lebih atau kurang terperinci, tetapi anda perlu menggali lebih dalam dokumentasi pelayan anda untuk mencari pilihan terbaik.

Semua pelayan memerlukan ruang untuk fail pelayan dan ruang untuk dokumen HTML. Dalam buku ini, kawasan pelayan dipanggil ServerRoot, dan kawasan dokumen dipanggil DocumentRoot. Pada mesin UNIX, ServerRoot biasanya dalam /usr/local/etc/httpd/, dan DocumentRoot biasanya dalam /usr/local/etc/httpd/htdocs/. Walau bagaimanapun, ini tidak akan memberi sebarang perbezaan kepada sistem anda, jadi gantikan semua rujukan kepada ServerRoot dan DocumentRoot dengan ServerRoot dan DocumentRoot anda sendiri.

Apabila anda mengakses fail menggunakan penyemak imbas Web anda, anda menentukan fail dalam URL berbanding dengan DocumentRoot. Sebagai contoh, jika alamat pelayan anda ialah mymachine.org, maka anda mengakses fail ini dengan URL berikut: http://mymachine.org/index.html

Mengkonfigurasi pelayan untuk CGI

Kebanyakan pelayan Web diprakonfigurasikan untuk membenarkan penggunaan program CGI. Biasanya dua parameter menunjukkan kepada pelayan sama ada fail itu adalah aplikasi CGI atau tidak:

  • Direktori yang ditetapkan. Sesetengah pelayan membenarkan anda menentukan bahawa semua fail dalam direktori yang ditetapkan (biasanya dipanggil cgi-bin secara lalai) adalah CGI.
  • Sambungan nama fail. Banyak pelayan mempunyai prakonfigurasi ini yang membolehkan semua fail yang berakhir dengan .cgi ditakrifkan sebagai CGI.

Kaedah direktori yang ditetapkan adalah sesuatu peninggalan masa lalu (pelayan pertama menggunakannya sebagai satu-satunya kaedah untuk menentukan fail yang merupakan program CGI), tetapi ia mempunyai beberapa kelebihan.

  • Ia memastikan program CGI terpusat, menghalang direktori lain daripada menjadi bersepah.
  • Anda tidak terhad kepada mana-mana sambungan nama fail tertentu, jadi anda boleh menamakan fail anda apa sahaja yang anda mahu. Sesetengah pelayan membenarkan anda menetapkan beberapa direktori berbeza sebagai direktori CGI.
  • Ia juga memberi anda lebih kawalan ke atas siapa yang boleh merakam CGI. Contohnya, jika anda mempunyai pelayan dan menyokong sistem dengan berbilang pengguna dan tidak mahu mereka menggunakan skrip CGI mereka sendiri tanpa menyemak program terlebih dahulu atas sebab keselamatan, anda boleh menetapkan hanya fail tersebut dalam direktori terhad dan berpusat sebagai CGI . Pengguna kemudiannya perlu memberikan anda program CGI untuk dipasang, dan anda boleh mengaudit kod tersebut terlebih dahulu untuk memastikan program itu tidak mempunyai sebarang isu keselamatan utama.

Notasi CGI melalui sambungan nama fail boleh berguna kerana fleksibilitinya. Anda tidak terhad kepada satu direktori tunggal untuk program CGI. Kebanyakan pelayan boleh dikonfigurasikan untuk mengenali CGI melalui sambungan nama fail, walaupun tidak semua dikonfigurasikan dengan cara ini secara lalai.

Amaran

Ingat kepentingan isu keselamatan apabila anda mengkonfigurasi pelayan anda untuk CGI. Beberapa petua akan dibincangkan di sini, dan Bab 9, Melindungi CGI, merangkumi aspek ini dengan lebih terperinci.

Memasang CGI pada pelayan UNIX

Tidak kira bagaimana pelayan UNIX anda dikonfigurasikan, terdapat beberapa langkah yang perlu anda ambil untuk memastikan aplikasi CGI anda berjalan seperti yang diharapkan. Pelayan Web anda biasanya akan dijalankan sebagai pengguna yang tidak wujud (iaitu, pengguna UNIX tiada siapa - akaun yang tidak mempunyai kebenaran fail dan tidak boleh dilog masuk). Skrip CGI (ditulis dalam Perl, cangkang Bourne, atau bahasa skrip lain) mesti boleh dilaksanakan dan boleh dibaca di seluruh dunia.

Petunjuk

Untuk menjadikan fail anda boleh dibaca dan boleh dilaksanakan, gunakan perintah kebenaran UNIX berikut: nama fail chmod 755.

Jika anda menggunakan bahasa penerangan skrip Jenis Perl atau Tcl, berikan laluan penuh jurubahasa anda pada baris pertama skrip anda. Sebagai contoh, skrip Perl menggunakan perl dalam direktori /usr/local/bin akan bermula dengan baris berikut:

#!/usr/local/bin/perl

Amaran

Jangan sekali-kali letakkan jurubahasa (perl, atau binari Tcl Wish) dalam direktori /cgi-bin. Ini mewujudkan risiko keselamatan pada sistem anda. Ini dibincangkan dengan lebih terperinci dalam Bab 9.

Beberapa pelayan UNIX generik

Pelayan NCSA dan Apache mempunyai fail konfigurasi yang serupa kerana pelayan Apache pada asalnya berdasarkan kod NCSA. Secara lalai, ia dikonfigurasikan supaya mana-mana fail dalam direktori cgi-bin (terletak secara lalai dalam ServerRoot) ialah program CGI. Untuk menukar lokasi direktori cgi-bin, anda boleh mengedit fail konfigurasi conf/srm.conf. Format untuk mengkonfigurasi direktori ini ialah

ScriptAlias ​​​​fakedirectoryname nama direktori sebenar

di mana fakedirectoryname ialah nama direktori pseudo (/cgi-bin) dan realdirectoryname ialah laluan penuh di mana program CGI sebenarnya disimpan. Anda boleh mengkonfigurasi lebih daripada satu ScriptAlias ​​​​dengan menambahkan lebih banyak baris ScriptAlias.

Konfigurasi lalai adalah mencukupi untuk kebanyakan keperluan pengguna. Anda perlu mengedit baris dalam fail srm.conf dalam mana-mana kes untuk menentukan nama direktori sebenar yang betul. Jika, sebagai contoh, program CGI anda terletak dalam /usr/local/etc/httpd/cgi-bin, baris ScriptAlias ​​​​dalam fail srm.conf anda hendaklah seperti ini:

ScriptAlias ​​​​/cgi-bin/ /usr/local/etc/httpd/cgi-bin/

Untuk mengakses atau memaut ke program CGI yang terdapat dalam direktori ini, gunakan URL berikut:

Http://hostname/cgi-bin/programname

Di mana nama hos ialah nama hos pelayan Web anda, dan nama program ialah nama CGI anda.

Sebagai contoh, katakan anda menyalin program hello.cgi ke direktori cgi-bin anda (cth /usr/local/etc/httpd/cgi-bin) pada pelayan Web anda yang dipanggil www.company.com. Untuk mengakses CGI anda, gunakan URL berikut: http://www.company.com/cgi-bin/hello.cgi

Jika anda ingin mengkonfigurasi pelayan NCSA atau Apache anda untuk mengecam mana-mana fail dengan sambungan .cgi sebagai CGI, anda perlu mengedit dua fail konfigurasi. Pertama, dalam fail srm.conf, nyahkomen baris berikut:

AddType application/x-httpd-cgi .cgi

Ini akan mengaitkan jenis MIME CGI dengan sambungan .cgi. Sekarang, kita perlu menukar fail access.conf supaya kita boleh menjalankan CGI dalam mana-mana direktori. Untuk melakukan ini, tambahkan pilihan ExecCGI pada baris Pilihan. Ia akan kelihatan seperti baris berikut:

Indeks Pilihan FollowSymLinks ExecCGI

Sekarang, mana-mana fail dengan sambungan .cgi dianggap CGI; aksesnya seperti mana-mana fail pada pelayan anda.

Pelayan CERN dikonfigurasikan dengan cara yang sama seperti pelayan Apache dan NCSA. Daripada ScriptAlias, pelayan CERN menggunakan arahan Exec. Sebagai contoh, dalam fail httpd.conf, anda akan melihat baris berikut:

Exec /cgi-bin/* /usr/local/etc/httpd/cgi-bin/*

Pelayan UNIX lain boleh dikonfigurasikan dengan cara yang sama; Ini diterangkan dengan lebih terperinci dalam dokumentasi pelayan.

Memasang CGI pada Windows

Kebanyakan pelayan tersedia untuk Windows 3.1, Windows 95 dan Windows NT dikonfigurasikan menggunakan kaedah "sambungan nama fail" untuk pengecaman CGI. Secara umum, menukar konfigurasi pelayan berasaskan Windows hanya memerlukan menjalankan program konfigurasi pelayan dan membuat perubahan yang sesuai.

Kadangkala mengkonfigurasi pelayan untuk menjalankan skrip (seperti Perl) dengan betul boleh menjadi sukar. Dalam DOS atau Windows, anda tidak akan dapat menentukan penterjemah pada baris pertama skrip, seperti yang berlaku dengan UNIX. Sesetengah pelayan mempunyai konfigurasi yang dipratentukan untuk mengaitkan sambungan nama fail tertentu dengan penterjemah. Sebagai contoh, banyak pelayan Web Windows menganggap bahawa fail yang berakhir dengan .pl ialah skrip Perl.

Jika pelayan tidak melaksanakan jenis perkaitan fail ini, anda boleh menentukan fail kelompok pembungkus yang memanggil kedua-dua jurubahasa dan skrip. Seperti pelayan UNIX, jangan pasang penterjemah sama ada dalam direktori cgi-bin atau mana-mana direktori boleh diakses Web.

Memasang CGI pada Macintosh

Dua pilihan pelayan yang paling terkenal untuk Macintosh ialah WebStar StarNine dan MacHTTP pendahulunya. Kedua-duanya mengenali CGI dengan sambungan nama failnya.

MacHTTP memahami dua sambungan berbeza: .cgi dan .acgi, yang bermaksud CGI tak segerak. Program CGI biasa yang dipasang pada Macintosh (dengan sambungan .cgi) akan memastikan pelayan Web dalam keadaan sibuk sehingga CGI selesai berjalan, menyebabkan pelayan menggantung semua permintaan lain. CGI tak segerak, sebaliknya, membenarkan pelayan menerima permintaan walaupun semasa ia sedang berjalan.

Pembangun CGI Macintosh yang menggunakan mana-mana pelayan Web ini hendaklah, jika boleh, hanya menggunakan sambungan .acgi dan bukannya sambungan .cgi. Ia harus berfungsi dengan kebanyakan program CGI; jika ia tidak berfungsi, namakan semula program kepada .cgi.

Melaksanakan CGI

Sebaik sahaja anda telah memasang CGI, terdapat beberapa cara untuk melaksanakannya. Jika program CGI anda ialah program keluaran sahaja, seperti program Hello,World!, maka anda boleh melaksanakannya hanya dengan mengakses URLnya.

Kebanyakan program dijalankan sebagai aplikasi pelayan pada borang HTML. Sebelum mempelajari cara mendapatkan maklumat daripada borang ini, baca dahulu pengenalan ringkas tentang mencipta borang tersebut.

Tutorial ringkas tentang borang HTML

Dua teg yang paling penting dalam bentuk HTML ialah

Dan . Anda boleh membuat kebanyakan borang HTML menggunakan hanya dua teg ini. Dalam bab ini, anda akan meneroka teg ini dan subset kecil kemungkinan jenis atau atribut. . Panduan lengkap dan pautan ke borang HTML terdapat dalam Bab 3, HTML dan Borang.

Tag

Tag digunakan untuk menentukan bahagian mana fail HTML harus digunakan untuk maklumat yang dimasukkan pengguna. Ini merujuk kepada cara kebanyakan halaman HTML memanggil program CGI. Atribut teg menentukan nama dan lokasi program - sama ada secara setempat atau sebagai URL penuh, jenis pengekodan yang digunakan dan kaedah pergerakan data yang digunakan oleh program.

Baris seterusnya menunjukkan spesifikasi untuk teg :

< ACTION FORM = "url" METHOD = ENCTYPE = "..." >

Atribut ENCTYPE tidak memainkan peranan khas dan biasanya tidak disertakan dengan teg . maklumat terperinci mengenai teg ENCTYPE diberikan dalam Bab 3. Satu cara untuk menggunakan ENCTYPE ditunjukkan dalam Bab 14, "Sambungan Jenama."

Atribut ACTION merujuk kepada URL program CGI. Setelah pengguna mengisi borang dan memberikan maklumat, semua maklumat dikodkan dan dipindahkan ke program CGI. Program CGI itu sendiri menyelesaikan masalah penyahkodan dan pemprosesan maklumat; Aspek ini dibincangkan dalam "Menerima Input daripada Penyemak Imbas," kemudian dalam bab ini.

Akhir sekali, atribut METHOD menerangkan cara program CGI harus menerima input. Kedua-dua kaedah, GET dan POST, berbeza dalam cara mereka menyampaikan maklumat kepada program CGI. Kedua-duanya dibincangkan dalam "Menerima Input daripada Penyemak Imbas."

Untuk membolehkan penyemak imbas membenarkan input pengguna, semua teg borang dan maklumat mesti dikelilingi oleh teg . Jangan lupa tag penutup

untuk menunjukkan penghujung borang. Anda tidak boleh mempunyai borang dalam borang, walaupun anda boleh menyediakan borang yang membolehkan anda membentangkan cebisan maklumat di tempat yang berbeza; aspek ini dibincangkan secara meluas dalam Bab 3.

Tag

Anda boleh membuat bar input teks, butang radio, kotak semak dan cara lain untuk menerima input menggunakan teg . DALAM bahagian ini hanya bidang yang dipertimbangkan input teks. Untuk melaksanakan medan ini, gunakan teg dengan sifat-sifat berikut:

< INPUT TYPE=text NAME = "... " VALUE = "... " SIZE = MAXLENGTH = >

NAME ialah nama simbolik pembolehubah yang mengandungi nilai yang dimasukkan oleh pengguna. Jika anda memasukkan teks dalam atribut VALUE, teks itu akan diletakkan sebagai lalai dalam medan input teks. Atribut SIZE membolehkan anda menentukan panjang mendatar medan input kerana ia akan muncul dalam tetingkap penyemak imbas. Akhirnya, MAXLENGTH mentakrifkan bilangan maksimum aksara yang boleh dimasukkan oleh pengguna dalam medan. Sila ambil perhatian bahawa atribut VALUE, SIZE, MAXLENGTH adalah pilihan.

Penyerahan Borang

Jika anda hanya mempunyai satu medan teks dalam borang, pengguna boleh menyerahkan borang dengan hanya menaip maklumat pada papan kekunci dan menekan Enter. Jika tidak, mesti ada cara lain untuk pengguna menyampaikan maklumat. Pengguna menyerahkan maklumat menggunakan butang hantar dengan teg berikut:

< Input type=submit >

Teg ini mencipta butang Hantar di dalam borang anda. Apabila pengguna selesai mengisi borang, dia boleh menghantar kandungannya melalui alamat URL, dinyatakan Atribut ACTION borang dengan mengklik butang Hantar.

Menerima input daripada penyemak imbas

Di atas adalah contoh rakaman program CGI yang menghantar maklumat daripada pelayan ke penyemak imbas. Pada hakikatnya, program CGI yang hanya mengeluarkan data tidak mempunyai banyak aplikasi (beberapa contoh diberikan dalam Bab 4). Keupayaan CGI yang lebih penting ialah menerima maklumat daripada pelayar - ciri yang memberikan Web watak interaktifnya.

Program CGI menerima dua jenis maklumat daripada pelayar.

  • Pertama, ia memperoleh pelbagai maklumat tentang penyemak imbas (jenisnya, perkara yang boleh dilihatnya, hos hos, dan sebagainya), pelayan (nama dan versinya, port pelaksanaannya, dan sebagainya), dan program CGI sendiri ( nama program dan di mana ia berada). Pelayan memberikan semua maklumat ini kepada program CGI melalui pembolehubah persekitaran.
  • Kedua, program CGI boleh menerima input pengguna. Maklumat ini, selepas dikodkan oleh penyemak imbas, dihantar sama ada melalui pembolehubah persekitaran (kaedah GET) atau melalui input standard (kaedah stdin - POST).

Pembolehubah Persekitaran

Adalah berguna untuk mengetahui pembolehubah persekitaran yang tersedia untuk program CGI, semasa latihan dan untuk nyahpepijat. Jadual 2.2 menyenaraikan beberapa pembolehubah persekitaran CGI yang tersedia. Anda juga boleh menulis program CGI yang mengeluarkan pembolehubah persekitaran dan nilainya kepada pelayar Web.

Jadual 2.2. Beberapa Pembolehubah Persekitaran CGI Penting Persekitaran Pembolehubah Tujuan REMOTE_ADDR alamat IP mesin klien. REMOTE_HOST Hos mesin pelanggan. HTTP _ACCEPT Menyenaraikan jenis data MIME yang boleh ditafsirkan oleh penyemak imbas. HTTP _USER_AGENT Maklumat penyemak imbas (jenis penyemak imbas, nombor versi, sistem operasi, dan lain-lain.). REQUEST_METHOD GET atau POST. CONTENT_LENGTH Saiz input jika dihantar melalui POST. Jika tiada input atau jika kaedah GET digunakan, parameter ini tidak ditentukan. QUERY_STRING Mengandungi maklumat input apabila ia dihantar menggunakan kaedah GET. PATH_INFO Membenarkan pengguna menentukan laluan daripada baris arahan CGI (contohnya, http://hostname/cgi-bin/programname/path). PATH_TRANSLATED Terjemahan laluan relatif dalam PATH_INFO ke laluan sebenar pada sistem.

Untuk menulis aplikasi CGI yang memaparkan pembolehubah persekitaran, anda perlu tahu cara melakukan dua perkara:

  • Tentukan semua pembolehubah persekitaran dan nilai sepadannya.
  • Cetak hasil ke penyemak imbas.

Anda sudah tahu cara melakukan operasi terakhir. Dalam Perl, pembolehubah persekitaran disimpan dalam tatasusunan bersekutu %ENV, yang diperkenalkan dengan nama pembolehubah persekitaran. Penyenaraian 2.3 mengandungi env.cgi, program Perl yang mencapai matlamat kami.

Penyenaraian 2.3. program Perl, env.cgi, yang mengeluarkan semua pembolehubah persekitaran CGI.

#!/usr/local/bin/perl print "Jenis kandungan: teks/html\n\n"; cetak " \n"; cetak " Persekitaran CGI\n"; cetak "\n"; cetak " \n"; cetak "

Persekitaran CGI

\n"; foreach $env_var (kunci %ENV) ( cetak " $env_var= $ENV($env_var)
\n"; ) cetak "

\n";

Program yang serupa boleh ditulis dalam C; kod penuh berada dalam Penyenaraian 2.4.

Penyenaraian 2.4. Env.cgi.c dalam C. /* env.cgi.c */ #include char luaran **persekitaran; int main() ( char **p = persekitaran; printf("Jenis-Kandungan: teks/html\r\n\r\n"); printf(" \n"); printf(" Persekitaran CGI\n"); printf("\n"); printf(" \n"); printf("

Persekitaran CGI

\n"); while(*p != NULL) printf("%s
\n",*p++); printf("

\n");)

DAPATKAN atau POS?

Apakah perbezaan antara kaedah GET dan POST? GET menghantar rentetan input yang dikodkan melalui pembolehubah persekitaran QUERY_STRING, manakala POST menghantarnya melalui stdin. POST adalah kaedah pilihan, terutamanya untuk borang dengan jumlah yang besar data, kerana tiada sekatan mengenai jumlah maklumat yang dihantar, dan bila kaedah GET jumlah ruang persekitaran adalah terhad. GET mempunyai, bagaimanapun, pasti harta yang berguna; ini dibincangkan secara terperinci dalam Bab 5, Input.

Untuk menentukan kaedah yang digunakan, program CGI menyemak pembolehubah persekitaran REQUEST_METHOD, yang akan ditetapkan kepada GET atau POST. Jika ia ditetapkan kepada POST, panjang maklumat yang dikodkan disimpan dalam pembolehubah persekitaran CONTENT_LENGTH.

Input Berkod

Apabila pengguna menyerahkan borang, penyemak imbas mula-mula mengekod maklumat sebelum menghantarnya ke pelayan dan kemudian ke aplikasi CGI. Apabila anda menggunakan tag , setiap medan diberi nama simbolik. Nilai yang dimasukkan oleh pengguna diwakili sebagai nilai pembolehubah.

Untuk menentukan ini, penyemak imbas menggunakan spesifikasi pengekodan URL, yang boleh diterangkan seperti berikut:

  • Mengasingkan medan yang berbeza dengan ampersand (&).
  • Memisahkan nama dan nilai dengan tanda sama (=), dengan nama di sebelah kiri dan nilai di sebelah kanan.
  • Menggantikan ruang dengan tanda tambah (+).
  • Menggantikan semua aksara "tidak normal" dengan tanda peratus (%) diikuti dengan aksara dua digit kod perenambelasan simbol.

Rentetan terakhir anda yang dikodkan akan serupa dengan yang berikut:

Nama1=nilai1&nama2=nilai2&nama3=nilai3 ...

Nota: Spesifikasi untuk pengekodan URL ditemui dalam RFC1738.

Sebagai contoh, katakan anda mempunyai borang yang meminta nama dan umur. Kod HTML yang digunakan untuk memaparkan borang ini ditunjukkan dalam Penyenaraian 2.5.

Penyenaraian 2.5. Kod HTML untuk memaparkan nama dan borang umur.

Nama dan Umur

Masukkan nama anda:

Masukkan umur anda:



Katakan pengguna memasukkan Joe Schmoe dalam medan nama dan 20 dalam medan umur. Input akan dikodkan dalam rentetan input.

Nama=Joe+Schmoe&umur=20

Menghuraikan input

Untuk maklumat ini berguna, anda perlu menggunakan maklumat tentang sesuatu yang boleh digunakan oleh program CGI anda. Strategi untuk menghuraikan input diliputi dalam Bab 5. Dalam amalan, anda tidak perlu memikirkan cara menghuraikan input, kerana beberapa pakar telah pun menulis perpustakaan yang melakukan penghuraian, boleh diakses oleh semua orang. Dua perpustakaan sedemikian dibentangkan dalam bab ini dalam bahagian berikut: cgi -lib.pl untuk Perl (ditulis oleh Steve Brenner) dan cgihtml untuk C (ditulis oleh saya).

Matlamat umum kebanyakan perpustakaan yang ditulis dalam pelbagai bahasa adalah untuk menghuraikan rentetan yang dikodkan dan meletakkan nama dan pasangan nilai ke dalam struktur data. Terdapat kelebihan yang jelas untuk menggunakan bahasa yang mempunyai struktur data terbina dalam seperti Perl; bagaimanapun, kebanyakan perpustakaan bahasa peringkat bawah jenis C dan C++ melibatkan pelaksanaan struktur dan rutin data.

Ia tidak perlu untuk mencapai pemahaman yang lengkap tentang perpustakaan; adalah lebih penting untuk mempelajari cara menggunakannya alatan untuk memudahkan kerja pengaturcara CGI.

Cgi-lib.pl

Cgi-lib.pl menggunakan tatasusunan bersekutu Perl. Fungsi &ReadParse menghuraikan rentetan input dan memasukkan setiap pasangan nama/nilai mengikut nama. Contohnya, sepadan Rentetan Perl, diperlukan untuk menyahkod rentetan input "nama/umur" yang baru dibentangkan

&ReadParse(*input);

Sekarang, untuk melihat nilai yang dimasukkan untuk "nama", anda boleh mengakses tatasusunan bersekutu$input("nama"). Begitu juga, untuk mengakses nilai "umur", anda perlu melihat pembolehubah $input ("umur").

Cgihtml

C tidak mempunyai sebarang struktur data terbina dalam, jadi cgihtml melakukan perkaranya sendiri senarai sendiri sambungan untuk digunakan dengan rutin penghuraian CGI anda. Ini mentakrifkan struktur jenis kemasukan seperti berikut:

Typedef struct ( Char *name; Char *value; ) Entrytype;

Untuk menghuraikan rentetan input "nama/umur" dalam C menggunakan cgihtml, perkara berikut digunakan:

/* mengisytiharkan senarai terpaut, dipanggil input */ Llist input; /* menghuraikan input dan lokasi dalam senarai terpaut */ read_cgi_input(&input);

Untuk mengakses maklumat umur, anda boleh menghuraikan senarai secara manual atau menggunakan fungsi cgi _val() yang tersedia.

#termasuk #termasuk Char *umur = malloc(sizeof(char)*strlen(cgi_val(input, "age")) + 1); Strcpy(umur, cgi_val(input, "umur"));

Nilai "umur" kini disimpan dalam rentetan umur.

Nota: Daripada menggunakan tatasusunan mudah(seperti umur char ;), saya lakukan pengedaran dinamik ruang ingatan untuk umur rentetan. Walaupun ini menjadikan pengaturcaraan lebih sukar, ia adalah penting dari sudut pandangan keselamatan. Ini dibincangkan dengan lebih terperinci dalam Bab 9.

Program CGI yang mudah

Anda akan menulis program CGI yang dipanggil nameage.cgi yang mengendalikan borang nama/umur. Pemprosesan data (yang biasa saya panggil "barangan") adalah minimum. Nameage.cgi hanya menyahkod input dan memaparkan nama dan umur pengguna. Walaupun tidak banyak kegunaan untuk alat sedemikian, ia menunjukkan aspek paling kritikal pengaturcaraan CGI: input dan output.

Anda menggunakan borang yang sama seperti di atas, memanggil medan "nama dan umur". Jangan risau tentang keteguhan dan kecekapan dahulu; menyelesaikan masalah yang ada dengan cara yang paling mudah. Penyelesaian Perl dan C ditunjukkan dalam Penyenaraian 2.6 dan 2.7, masing-masing.

Penyenaraian 2.6. Nameage.cgi dalam Perl

#!/usr/local/bin/perl # nameage.cgi memerlukan "cgi-lib.pl" &ReadParse(*input); cetak "Jenis-Kandungan: text/html\r\n\r\n"; cetak " \n"; cetak " Nama dan Umur\n"; cetak "\n"; cetak " \n"; cetak "Hello, " . $input("nama") . ". Anda\n"; cetak $input("umur") . " tahun.

\n"; cetak "

\n";

Penyenaraian 2.7. nameage.cgi dalam C

/* nameage.cgi.c */ #include #include "cgi-lib.h" int main() ( senarai input; read_cgi_input(&input); printf("Content-Type: text/html\r\n\r\n"); printf(" \n"); printf(" Nama dan Umur\n"); printf("\n"); printf(" \n"); printf("Hello, %s. Anda adalah\n",cgi_val(input,"nama")); printf("%s tahun.

\n",cgi_val(input,"umur")); printf("

\n");)

Sila ambil perhatian bahawa kedua-dua program ini hampir sama. Kedua-duanya mengandungi rutin penghuraian yang hanya menduduki satu baris dan memproses keseluruhan input (terima kasih kepada rutin perpustakaan yang sepadan). Output pada dasarnya adalah versi diubah suai program Hello, World! utama anda.

Cuba jalankan program dengan mengisi borang dan klik butang Hantar.

Strategi pengaturcaraan am

Anda kini mengetahui semua prinsip asas yang diperlukan untuk pengaturcaraan CGI. Sebaik sahaja anda memahami cara CGI menerima maklumat dan cara ia menghantarnya kembali ke penyemak imbas, kualiti sebenar produk akhir anda bergantung pada kebolehan pengaturcaraan umum anda. Iaitu, apabila anda memprogramkan CGI (atau apa-apa sahaja, dalam perkara itu), ingatlah kualiti berikut:

  • Kesederhanaan
  • Kecekapan
  • serba boleh

Dua kualiti pertama agak biasa: cuba jadikan kod anda boleh dibaca dan cekap yang mungkin. Fleksibiliti lebih banyak digunakan pada program CGI berbanding aplikasi lain. Apabila anda mula membangunkan anda program sendiri CGI, anda akan belajar bahawa terdapat beberapa aplikasi asas yang semua orang mahu buat. Sebagai contoh, salah satu tugas yang paling biasa dan jelas bagi program CGI ialah memproses borang dan menghantar keputusan melalui e-mel kepada penerima tertentu. Anda boleh mempunyai beberapa borang berasingan yang diproses, setiap satu dengan penerima yang berbeza. Daripada menulis program CGI untuk setiap borang individu, anda boleh menjimatkan masa dengan menulis lebih banyak lagi program umum CGI yang berfungsi untuk semua bentuk.

Dengan merangkumi semua aspek asas CGI, saya telah memberikan anda maklumat yang mencukupi untuk memulakan pengaturcaraan CGI. Walau bagaimanapun, untuk menjadi pembangun CGI yang berkesan, anda perlu mempunyai pemahaman yang lebih mendalam tentang cara CGI berkomunikasi dengan pelayan dan penyemak imbas. Baki buku ini merangkumi secara terperinci isu-isu yang disebutkan secara ringkas dalam bab ini, serta strategi pembangunan aplikasi dan kelebihan dan had protokol.

Ringkasan

Bab ini memperkenalkan secara ringkas asas pengaturcaraan CGI. Anda mencipta output dengan memformat data anda dengan betul dan mencetak ke stdout. Menerima input CGI adalah sedikit lebih kompleks kerana ia mesti dihuraikan sebelum ia boleh digunakan. Nasib baik, beberapa perpustakaan sudah wujud yang menjalankan penghuraian.

KEPADA pada saat ini Anda sepatutnya dapat memahami pengaturcaraan aplikasi CGI dengan mudah. Baki buku ini menerangkan dengan lebih terperinci tentang spesifikasi, petua dan strategi pengaturcaraan untuk aplikasi yang lebih maju dan kompleks.