CGI - Common Gateway Interface Γδ σ≥± ±≥αφΣα≡≥ε∞ Φφ≥σ≡⌠σΘ±α (±Γ τΦ) Γφσ°φσΘ ∩≡ΦΩδαΣφεΘ ∩≡επ≡α∞∞√ ± Φφ⌠ε≡∞α÷Φεφφ√∞ ±σ≡Γσ≡ε∞ ≥Φ∩α HTTP, Web ±σ≡Γσ≡.
╬ß√≈φε πΦ∩σ≡≥σΩ±≥εΓ√σ ΣεΩ≤∞σφ≥√, ΦτΓδσΩασ∞√σ Φτ WWW ±σ≡Γσ≡εΓ, ±εΣσ≡µα≥ ±≥α≥Φ≈σ±ΩΦσ Σαφφ√σ. ╤ ∩ε∞ε∙ⁿ■ CGI ∞εµφε ±ετΣαΓα≥ⁿ CGI-∩≡επ≡α∞∞√, φατ√Γασ∞√σ °δ■τα∞Φ, Ωε≥ε≡√σ Γε ΓταΦ∞εΣσΘ±≥ΓΦΦ ± ≥αΩΦ∞Φ ∩≡ΦΩδαΣφ√∞Φ ±Φ±≥σ∞α∞Φ, ΩαΩ ±Φ±≥σ∞α ≤∩≡αΓδσφΦ ßατεΘ Σαφφ√⌡, ²δσΩ≥≡εφφα ≥αßδΦ÷α, ΣσδεΓα π≡α⌠ΦΩα Φ Σ≡., ±∞επ≤≥ Γ√Σα≥ⁿ φα ²Ω≡αφ ∩εδⁿτεΓα≥σδ ΣΦφα∞Φ≈σ±Ω≤■ Φφ⌠ε≡∞α÷Φ■.
╧≡επ≡α∞∞α-°δ■τ τα∩≤±Ωασ≥± WWW ±σ≡Γσ≡ε∞ Γ ≡σαδⁿφε∞ ∞α±°≥αßσ Γ≡σ∞σφΦ. WWW ±σ≡Γσ≡ εßσ±∩σ≈ΦΓασ≥ ∩σ≡σΣα≈≤ τα∩≡ε±α ∩εδⁿτεΓα≥σδ °δ■τ≤, α εφα Γ ±Γε■ ε≈σ≡σΣⁿ, Φ±∩εδⁿτ≤ ±≡σΣ±≥Γα ∩≡ΦΩδαΣφεΘ ±Φ±≥σ∞√, ΓετΓ≡α∙ασ≥ ≡στ≤δⁿ≥α≥ εß≡αßε≥ΩΦ τα∩≡ε±α φα ²Ω≡αφ ∩εδⁿτεΓα≥σδ . ╧≡επ≡α∞∞α-°δ■τ ∞εµσ≥ ß√≥ⁿ ταΩεΣΦ≡εΓαφα φα τ√Ωα⌡ C/C++, Fortran, Perl, TCL, Unix Schell, Visual Basic, Apple Script. ╩αΩ Γ√∩εδφΦ∞√Θ ∞εΣ≤δⁿ, εφα τα∩Φ±√Γασ≥± Γ ∩εΣΣΦ≡σΩ≥ε≡ΦΘ ± Φ∞σφσ∞ cgi-bin WWW ±σ≡Γσ≡α.
╬≡ΦπΦφαδ ε∩Φ±αφΦ CGI Φφ≥σ≡⌠σΘ±α - Φφ±≥≡≤∞σφ≥α ±Γ τΦ ∩≡επ≡α∞∞√-°δ■τ ± WWW ±σ≡Γσ≡ε∞ φα⌡εΣΦ≥± Γ ≤τδσ wist.ifmo.ru .
─δ ∩σ≡σΣα≈Φ Σαφφ√⌡ εß Φφ⌠ε≡∞α÷Φεφφε∞ τα∩≡ε±σ ε≥ ±σ≡Γσ≡α Ω °δ■τ≤, ±σ≡Γσ≡ Φ±∩εδⁿτ≤σ≥ Ωε∞αφΣφ≤■ ±≥≡εΩ≤ Φ ∩σ≡σ∞σφφ√σ εΩ≡≤µσφΦ . ▌≥Φ ∩σ≡σ∞σφφ√σ εΩ≡≤µσφΦ ≤±≥αφαΓδΦΓα■≥± Γ ≥ε≥ ∞ε∞σφ≥, ΩεπΣα ±σ≡Γσ≡ Γ√∩εδφ σ≥ ∩≡επ≡α∞∞≤ °δ■τα.
╚φ⌠ε≡∞α÷Φ °δ■τα∞ ∩σ≡σΣασ≥± Γ ±δσΣ≤■∙σΘ ⌠ε≡∞σ:
Φ∞ =τφα≈σφΦσ&Φ∞ 1=τφα≈σφΦσ1&..,
πΣσ Φ∞ - Φ∞ ∩σ≡σ∞σφφεΘ (Φτ ε∩σ≡α≥ε≡α FORM, φα∩≡Φ∞σ≡), Φ τφα≈σφΦσ - σσ ≡σαδⁿφεσ τφα≈σφΦσ. ┬ ταΓΦ±Φ∞ε±≥Φ ε≥ ∞σ≥εΣα, Ωε≥ε≡√Θ Φ±∩εδⁿτ≤σ≥± Σδ τα∩≡ε±α, ²≥α ±≥≡εΩα ∩ε Γδ σ≥± ΦδΦ ΩαΩ ≈α±≥ⁿ URL (Γ ±δ≤≈ασ ∞σ≥εΣα GET), ΦδΦ ΩαΩ ±εΣσ≡µΦ∞εσ HTTP τα∩≡ε±α (∞σ≥εΣ POST). ┬ ∩ε±δσΣφσ∞ ±δ≤≈ασ, ²≥α Φφ⌠ε≡∞α÷Φ ß≤Σσ≥ ∩ε±δαφα °δ■τ≤ Γ ±≥αφΣα≡≥φ√Θ ∩ε≥εΩ ΓΓεΣα.
═α ⌠αΘδεΓ√Θ Σσ±Ω≡Φ∩≥ε≡ ±≥αφΣα≡≥φεπε ∩ε≥εΩα ΓΓεΣα ∩ε±√δασ≥± CONTENT_LENGTH ßαΘ≥. ╥αΩ µσ ±σ≡Γσ≡ ∩σ≡σΣασ≥ °δ■τ≤ CONTENT_TYPE (≥Φ∩ ∩σ≡σΣαΓασ∞√⌡ Σαφφ√⌡). ╤σ≡Γσ≡ φσ εß ταφ ∩ε±√δα≥ⁿ ±Φ∞Γεδ Ωεφ÷α ⌠αΘδα ∩ε±δσ ε≥±√δΩΦ CONTENT_LENGTH ßαΘ≥ Σαφφ√⌡ Φ ∩ε±δσ ≥επε, ΩαΩ °δ■τ Φ⌡ ∩≡ε≈Φ≥ασ≥.
╧≡Φ∞σ≡
┬ετⁿ∞σ∞ ≡στ≤δⁿ≥α≥ ≡αßε≥√ ⌠ε≡∞√ ± ∞σ≥εΣε∞ POST (METHOD="POST") Γ Ωα≈σ±≥Γσ ∩≡Φ∞σ≡α.
╧≤±≥ⁿ ∩εδ≤≈σφε 7 ßαΘ≥, ταΩεΣΦ≡εΓαφφ√⌡ ∩≡Φ∞σ≡φε ≥αΩ:
a=b&b=c.
┬ ²≥ε∞ ±δ≤≈ασ, ±σ≡Γσ≡ ≤±≥αφεΓΦ≥ τφα≈σφΦσ CONTENT_LENGTH ≡αΓφ√∞ 7 Φ CONTENT_TYPE Γ application/x-www-form-urlencoded. ╧σ≡Γ√∞ ±Φ∞Γεδε∞ Γ ±≥αφΣα≡≥φε∞ ∩ε≥εΩσ ΓΓεΣα Σδ °δ■τα ß≤Σσ≥ "a", τα Ωε≥ε≡√∞ ß≤Σσ≥ ±δσΣεΓα≥ⁿ ε±≥α≥εΩ ταΩεΣΦ≡εΓαφφεΘ ±≥≡εΩΦ.
╪δ■τ Γ Ωε∞αφΣφεΘ ±≥≡εΩσ ε≥ ±σ≡Γσ≡α ∩εδ≤≈ασ≥:
╩δ■≈σΓ√σ ±δεΓα, Φ∞σφα ∩εδσΘ ⌠ε≡∞√ Φ τφα≈σφΦ ∩σ≡σΣα■≥± ≡α±ΩεΣΦ≡εΓαφφ√∞Φ (Φτ HTTP URL ⌠ε≡∞α≥α ΩεΣΦ≡εΓαφΦ ) Φ ∩σ≡σΩεΣΦ≡εΓαφφ√∞Φ Γ ±εε≥Γσ≥±≥ΓΦΦ ± ∩≡αΓΦδα∞Φ ΩεΣΦ≡εΓαφΦ Bourne shell, ≥αΩ ≈≥ε °δ■τ Γ Ωε∞αφΣφεΘ ±≥≡εΩσ ∩εδ≤≈Φ≥ Φφ⌠ε≡∞α÷Φ■ Γ ≥ε∞ ΓΦΣσ, ΩαΩ εφα σ±≥ⁿ, ßστ φσεß⌡εΣΦ∞ε±≥Φ ε±≤∙σ±≥Γδ ≥ⁿ Σε∩εδφΦ≥σδⁿφ√σ ∩≡σεß≡ατεΓαφΦ .
╟α∩≡ε±√ ε∩σ≡α≥ε≡α FORM
╟α∩≡ε±√ ε∩σ≡α≥ε≡α FORM εß≡αßα≥√Γα■≥± ≥αΩΦ∞ εß≡ατε∞, ≈≥ε ΩαµΣ√Θ ∩α≡α∞σ≥≡, ε≥Γσ≈α■∙ΦΘ τα Φ∞ ∩εδ , εΩαφ≈ΦΓασ≥± τφαΩε∞ ≡αΓσφ±≥Γα, α ε±≥α≥εΩ ∩≡σΣ±≥αΓδ σ≥ ±εßεΘ τφα≈σφΦσ ²≥επε ∩α≡α∞σ≥≡α. ┼±δΦ ∩≡Φ±≤≥±≥Γ≤σ≥ ≈≥ε δΦßε ∩ε±δσ Φ∞σφΦ ±Ω≡Φ∩≥α (°δ■τα), ≥ε ²≥α Φφ⌠ε≡∞α÷Φ ∩σ≡σΣασ≥± Γ Ωα≈σ±≥Γσ ∩σ≡Γεπε ∩α≡α∞σ≥≡α. ╚φα≈σ ∩σ≡Γ√Θ ∩α≡α∞σ≥≡ ß≤Σσ≥ ∩≤±≥.
╧≡Φ∞σ≡√:
/htbin/foo/x/y/z?name1=value1&name2=value2Γ√τ√Γασ≥± ΩαΩ:
/.../foo /x/y/z name1= value1 name2= value2α
/htbin/foo?name1=value1&name2=value2Γ√τ√Γασ≥± ΩαΩ:
/.../foo '' name1= value1 name2= value2
╤δσΣ≤■∙Φσ ∩σ≡σ∞σφφ√σ εΩ≡≤µσφΦ φσ Γδ ■≥± ±∩σ÷Φ⌠Φ≈φ√∞Φ ∩ε ≥Φ∩≤ τα∩≡ε±εΓ Φ ≤±≥αφαΓδΦΓα■≥± Σδ Γ±σ⌡ τα∩≡ε±εΓ.
╤δσΣ≤■∙Φσ ∩σ≡σ∞σφφ√σ εΩ≡≤µσφΦ Γδ ■≥± ±∩σ÷Φ⌠Φ≈φ√∞Φ Σδ ≡ατφ√⌡ τα∩≡ε±εΓ, Φ τα∩εδφ ■≥± ∩σ≡σΣ Γ√τεΓε∞ °δ■τα:
┬ Σε∩εδφσφΦσ Ω ²≥Φ∞, σ±δΦ τα∩≡ε± ±εΣσ≡µΦ≥ Σε∩εδφΦ≥σδⁿφ√σ ∩εδ ταπεδεΓΩα τα∩≡ε±α, εφΦ ∩ε∞σ∙α■≥± Γ ∩σ≡σ∞σφφ√σ εΩ≡≤µσφΦ ± ∩≡σ⌠ΦΩ±ε∞ HTTP_, τα Ωε≥ε≡√∞ ±δσΣ≤σ≥ Φ∞ ταπεδεΓΩα. ╦■ß√σ ±Φ∞Γεδ√ '-' Γ ταπεδεΓΩσ ∞σφ ■≥± φα ±Φ∞Γεδ√ ∩εΣ≈σ≡ΩΦΓαφΦ '_'. ╤σ≡Γσ≡ ∞εµσ≥ Φ±Ωδ■≈Φ≥ⁿ δ■ß√σ ταπεδεΓΩΦ, Ωε≥ε≡√σ εφ ≤µσ εß≡αßε≥αδ, ≥αΩΦσ ΩαΩ Authorization, Content-type, Φ Content- length. ┼±δΦ φσεß⌡εΣΦ∞ε, ±σ≡Γσ≡ ∞εµσ≥ Φ±Ωδ■≈Φ≥ⁿ δ■ß√σ (ΦδΦ Γεεß∙σ Γ±σ) Σε∩εδφΦ≥σδⁿφ√σ ∩εδ ταπεδεΓΩα Γ ±δ≤≈ασ, ΩεπΣα Φ⌡ ΓΩδ■≈σφΦσ ∞εµσ≥ ∩≡ΦΓσ±≥Φ Ω ∩≡σΓ√°σφΦ■ ∩≡σΣσδα ≡ατ∞σ≡α ∩σ≡σ∞σφφ√⌡ εΩ≡≤µσφΦ . ╧≡Φ∞σ≡ε∞ ≥αΩεΘ ∩σ≡σ∞σφφεΘ ∞εµσ≥ ±δ≤µΦ≥ⁿ ∩σ≡σ∞σφφα HTTP_ACCEPT, Ωε≥ε≡α ß√δα ε∩≡σΣσδσφα Γ ±∩σ÷Φ⌠ΦΩα÷ΦΦ CGI/1.0. ─≡≤πΦ∞ ∩≡Φ∞σ≡ε∞ ∞εµσ≥ ±δ≤µΦ≥ⁿ ταπεδεΓεΩ User-Agent.
╪δ■τ ε±≤∙σ±≥Γδ σ≥ ±ΓεΘ Γ√ΓεΣ Γ ±≥αφΣα≡≥φ√Θ ∩ε≥εΩ Γ√ΓεΣα. ▌≥ε≥ Γ√ΓεΣ ∞εµσ≥ ∩≡σΣ±≥αΓδ ≥ⁿ ±εßεΘ ΦδΦ ΣεΩ≤∞σφ≥, ±πσφσ≡Φ≡εΓαφφ√Θ °δ■τε∞, ΦδΦ Φφ±≥≡≤Ω÷ΦΦ ±σ≡Γσ≡≤, πΣσ ∩εδ≤≈Φ≥ⁿ φσεß⌡εΣΦ∞√Θ ΣεΩ≤∞σφ≥.
╩αΩ ∩≡αΓΦδε, °δ■τ ∩≡εΦτΓεΣΦ≥ ±ΓεΘ Γ√ΓεΣ, Ωε≥ε≡√Θ Φφ≥σ≡∩≡σ≥Φ≡≤σ≥± Φ ∩ε±√δασ≥± εß≡α≥φε ΩδΦσφ≥≤. ╧≡σΦ∞≤∙σ±≥Γε ²≥επε ∩εΣ⌡εΣα ±ε±≥εΦ≥ Γ ≥ε∞, ≈≥ε °δ■τ φσ Σεδµσφ ∩ε±√δα≥ⁿ ∩εδφ√Θ HTTP/1.0 ταπεδεΓεΩ φα ΩαµΣ√Θ τα∩≡ε±.
─δ φσΩε≥ε≡√⌡ °δ■τεΓ ∞εµσ≥ ß√≥ⁿ φσεß⌡εΣΦ∞ε Φτßσπα≥ⁿ εß≡αßε≥ΩΦ ±σ≡Γσ≡ε∞ Φ⌡ Γ√ΓεΣα, Φ εß∙α≥ⁿ± ± ΩδΦσφ≥ε∞ φσ∩ε±≡σΣ±≥Γσφφε. ─δ ≥επε, ≈≥εß√ ε≥δΦ≈Φ≥ⁿ ≥αΩΦσ °δ■τ√ ε≥ ε±≥αδⁿφ√⌡, CGI ≥≡σß≤σ≥, ≈≥εß√ Φ⌡ Φ∞σφα φα≈ΦφαδΦ±ⁿ ± ∩≡σ⌠ΦΩ±α nph-. ┬ ²≥ε∞ ±δ≤≈ασ, φα °δ■τσ δσµΦ≥ ε≥Γσ≥±≥Γσφφε±≥ⁿ τα ΓετΓ≡α∙σφΦσ ΩδΦσφ≥≤ ±Φφ≥αΩ±Φ≈σ±ΩΦ ∩≡αΓΦδⁿφεπε ε≥Γσ≥α.
┬√ΓεΣ °δ■τα φα≈Φφασ≥± ± ∞αδσφⁿΩεπε ταπεδεΓΩα. ╬φ ±εΣσ≡µΦ≥ ≥σΩ±≥εΓ√σ ±≥≡εΩΦ, Γ ≥ε∞ µσ ⌠ε≡∞α≥σ, ΩαΩ Φ Γ HTTP ταπεδεΓΩσ Φ ταΓσ≡°ασ≥± ∩≤±≥εΘ ±≥≡εΩεΘ (±εΣσ≡µα∙σΘ ≥εδⁿΩε ±Φ∞Γεδ ∩σ≡σΓεΣα ±≥≡εΩΦ ΦδΦ CR/LF).
╦■ß√σ ±≥≡εΩΦ ταπεδεΓΩα, φσ Γδ ■∙Φσ± ΣΦ≡σΩ≥ΦΓα∞Φ ±σ≡Γσ≡α, ∩ε±√δα■≥± φσ∩ε±≡σΣ±≥Γσφφε ΩδΦσφ≥≤. ┬ φα±≥ε ∙ΦΘ ∞ε∞σφ≥, CGI ±∩σ÷Φ⌠ΦΩα÷Φ ε∩≡σΣσδ σ≥ ≥≡Φ ΣΦ≡σΩ≥ΦΓ√ ±σ≡Γσ≡α:
┼±δΦ α≡π≤∞σφ≥ε∞ Γδ σ≥± URL, ≥ε ±σ≡Γσ≡ ∩σ≡σΣα±≥ ΩδΦσφ≥≤ ≤ΩαταφΦσ φα ∩σ≡σφα∩≡αΓδσφΦσ τα∩≡ε±α. ┼±δΦ α≡π≤∞σφ≥ ∩≡σΣ±≥αΓδ σ≥ ±εßεΘ ΓΦ≡≥≤αδⁿφ√Θ ∩≤≥ⁿ, ±σ≡Γσ≡ Γσ≡φσ≥ ΩδΦσφ≥≤ ταΣαφφ√Θ ²≥Φ∞ ∩≤≥σ∞ ΣεΩ≤∞σφ≥, ΩαΩ σ±δΦ ß√ ΩδΦσφ≥ τα∩≡α°ΦΓαδ σπε φσ∩ε±≡σΣ±≥Γσφφε.
▌≥α ΣΦ≡σΩ≥ΦΓα Φ±∩εδⁿτ≤σ≥± Σδ ταΣαφΦ ±σ≡Γσ≡≤ HTTP/1.0 ±≥≡εΩΦ-±≥α≥≤±, Ωε≥ε≡α ß≤Σσ≥ ∩ε±δαφα ΩδΦσφ≥≤. ╘ε≡∞α≥: nnn xxxxx, πΣσ nnn - 3-⌡ ÷Φ⌠≡εΓεΘ ±≥α≥≤±-ΩεΣ, Φ xxxxx ±≥≡εΩα ∩≡Φ≈Φφ√, ≥αΩα , ΩαΩ "Forbidden" (╟α∩≡σ∙σφε).
╧≡σΣ∩εδεµΦ∞, Φ∞σσ≥± φσΩε≥ε≡√Θ ≥σΩ±≥εΓ√Θ ΩεφΓσ≡≥σ≡ Γ HTML. ╩επΣα εφ εΩαφ≈ΦΓασ≥ ±Γε■ ≡αßε≥≤, εφ Σεδµσφ ∩≡εΦτΓσ±≥Φ ±δσΣ≤■∙ΦΘ Γ√ΓεΣ Γ ±≥αφΣα≡≥φ√Θ Γ√⌡εΣφεΘ ∩ε≥εΩ:
--- φα≈αδε Γ√ΓεΣα --- Content-type: text/html --- Ωεφσ÷ Γ√ΓεΣα ---╥σ∩σ≡ⁿ ≡α±±∞ε≥≡Φ∞ °δ■τ, Ωε≥ε≡√Θ, Γ φσΩε≥ε≡√⌡ ±δ≤≈α ⌡, Σεδµσφ Γ√Σα≥ⁿ ΣεΩ≤∞σφ≥ /path/doc.txt ± Σαφφεπε ±σ≡Γσ≡α, ΩαΩ σ±δΦ ß√ εφ ß√δ φσ∩ε±≡σΣ±≥Γσφφε Γε±≥≡σßεΓαφ ΩδΦσφ≥ε∞ ≈σ≡στ http://server:port/path/doc.txt. ┬ ²≥ε ±δ≤≈ασ Γ√ΓεΣ °δ■τα ß≤Σσ≥ ≥αΩεΓ:
--- φα≈αδε Γ√ΓεΣα --- Location: /path/doc.txt --- Ωεφσ÷ Γ√ΓεΣα ---═αΩεφσ÷, ∩≡σΣ∩εδεµΦ∞, ≈≥ε °δ■τ ΓετΓ≡α∙ασ≥ ±±√δΩΦ φα gopher ±σ≡Γσ≡, φα∩≡Φ∞σ≡ φα gopher://gopher.ncsa.uiuc.edu/. ┬√ΓεΣ °δ■τα ß≤Σσ≥ ±δσΣ≤■∙ΦΘ:
--- φα≈αδε Γ√ΓεΣα --- Location: gopher://gopher.ncsa.uiuc.edu/ --- Ωεφσ÷ Γ√ΓεΣα ---
─ε∩≤±≥Φ∞ ≥σ∩σ≡ⁿ, ≈≥ε ≤ φα± Φ∞σσ≥± °δ■τ, Ωε≥ε≡√Θ εß∙ασ≥± ± ΩδΦσφ≥ε∞ φσ∩ε±≡σΣ±≥Γσφφε. ╩αΩ ≤µσ ε≥∞σ≈αδε±ⁿ, σπε Φ∞ Σεδµφε φα≈Φφα≥ⁿ± ± ∩≡σ⌠ΦΩ±α nph- Φ εφ Σεδµσφ ΓετΓ≡α∙α≥ⁿ Σε∩≤±≥Φ∞√Θ HTTP ταπεδεΓεΩ. ┬ ²≥ε∞ ±δ≤≈ασ, σ±δΦ Σε±≥≤∩ Ω °δ■τ≤ ß√δ ε±≤∙σ±≥Γδσφ ±ε τφα≈σφΦσ∞ SERVER_PROTOCOL ≡αΓφ√∞ HTTP/1.0, σπε Γ√ΓεΣ Σεδµσφ ≤ΣεΓδσ≥Γε≡ ≥ⁿ HTTP/1.0:
--- φα≈αδε Γ√ΓεΣα --- HTTP/1.0 200 OK Server: NCSA/1.0a6 Content-type: text/plain --- Ωεφσ÷ Γ√ΓεΣα ---
╩Φ≡Φδδ ╠αΩ±Φ∞εΓ