Кіріспе

Жай ортақ шлюз интерфейсі (SCGI) – HTTP серверлерімен интерфейс орнату үшін, CGI протоколына балама ретінде қолданылатын протокол. Ол FastCGI-ге ұқсас, бірақ оны талдауды жеңілдету үшін жасалған. CGI-ден айырмашылығы, ол ұзаққа созылатын қызмет процесіне сұранымдарды орындауды жалғастыруға мүмкіндік береді, осылайша орнатуға байланысты кешігулерді (мысалы, дерекқорға қосылу сияқты) болдырмай, сұранымдарға жауап беру жылдамдығын арттырады. SCGI – веб-сервер мен қолданба сервері арасындағы байланысты анықтайтын протокол. Бұл, керісінше, CGI – бұрынғы қолданба (шлюз) интерфейсі болып табылады, ол қолданба бағдарламалаушысына сокеттердің күрделілігінен және ұзаққа созылатын қызмет процестерінен аулақ болуға мүмкіндік береді, бірақ бұл жағдайда нашар кеңейтімділік пен жоғары қосымша шығындар қабылданады. SCGI протоколы веб-сервердің HTTP сұранысын талдап, тексергенін пайдаланып, SCGI серверіне сұранысты стандартталған түрде жібереді, сонымен қатар бағдарламалаушыға түсініксіздіктерді және протоколдың шектен шығу жағдайларын талдау қажеттігін жояды. Бұл RFC 2616-дан күрделі тақырыптарды талдау және біріктіру ережелерінен құтылуға мүмкіндік береді, соның арқасында SCGI сервер процесінде маңызды күрделіліктерден қысылған болады.

Тарих

Нил Шменауэр 2001 жылдың қазан айында түпнұсқа SCGI протоколының сипаттамасын жариялады. Ол SCGI-дің алғашқы іске асыруларын жасады және оларды 2002 жылдың сәуірінде алғаш рет жариялады.

Ерекшеліктер

Клиент 8 биттік байттарды тасымалдауға мүмкіндік беретін сенімді ағын протоколы арқылы SCGI серверіне қосылады. Клиент сұрау жіберуден бастайды. SCGI сервері сұраудың соңына жеткенде, жауап жіберіп, қосылысты жабады. Бұл протокол жауап форматын нақты анықтамайды, бірақ көбінесе CGI-мен үйлесімді HTTP жауаптары қолданылады.

Сұрау салу форматы

SCGI сұранысы – желілік кодталған тақырыптар мен деректердің біріктірілуі. SCGI жауабы – стандартты HTTP жауабы. Әр тақырып атау-мәнді жұптан тұрады, онда атау да, мән де нөлдік символмен аяқталатын тізбектер (C тізбектері) болады. Мән бос тізбек болуы мүмкін, мұндай жағдайда аяқтаушы нөл сол күйінде қалады. Атау да, мән де ішкі нөлдік байттарды қамтуы мүмкін емес. Бұл талаптар C тізбектері үшін стандартты, бірақ басқа тізбектерді өңдеу стандарттарына үйренген бағдарламашылар үшін шатастыру тудыруы мүмкін. Барлық берілген тақырыптар біртұтас байттық тізбек құру үшін біріктіріледі, содан кейін желілік кодталады. Егер болса, шикі деректер қоса беріледі. Сұраныс тақырыптарында атаулардың қайталануына жол жоқ; RFC 2616 талаптарына сәйкес тақырыптарды біріктіру алдын ала жасалуы тиіс. Бірінші сұраныс тақырыбының атауы "CONTENT LENGTH" болуы керек, ал мәні деректердің ұзындығын ондық санмен көрсетуі керек. "CONTENT LENGTH" сұраныс тақырыбының мәні "0" болған жағдайда да әрқашан болуы керек. Сондай-ақ, "SCGI" атауымен және "1" мәнімен сұраныс тақырыбы да міндетті түрде болуы керек. Ескі CGI бағдарламаларын SCGI-ға түрлендіру кезінде үйлесімділікті қамтамасыз ету үшін стандартты CGI ортасының айнымалылары SCGI тақырыптарында берілуі керек. Сұраныстағы деректер (болған жағдайда) тақырыптардан кейін келеді; оның ұзындығы "CONTENT LENGTH" сұраныс тақырыбында көрсетілген. SCGI протоколы қызмет бағдарламашысын кейбір HTTP ескертулерінен қорғаса да, түрлі ерекшеліктер (мысалы, хабарлама деректерінің октеттерін Трансферлік кодтау тақырыбына сәйкес түсіндіру, CONTENT LENGTH деректерді тарату үшін кодталғаннан кейінгі октеттер санын білдіреді және т.б.) HTTP протоколының спецификациясын білуді талап етеді.