Что такое Common Gateway Interface (CGI)?

Вы не можете получить доступ к этим низкоуровневым данным о сети в Java. Вы можете получить некоторые сведения о сетевом интерфейсе с классом NetworkInterface, но если вы видите в предоставленных методах, никто не связан с сетями Wi-Fi, и не будет предоставлен какой-либо способ получить SSID. Как указано ниже, вы должны использовать некоторые собственные функции, вызвав собственную библиотеку с JNI или вызывая инструмент ОС с помощью Runtime.

Java не предназначен для выполнения подобных действий, трудно реализовать независимым от платформы способом, и любые детали аппаратного уровня не могут управляться в Java по принципу.

То же самое относится к другим сетям, таким как 3G, GPRS ... приложение не должно знать тип подключения ни его детали. Java может управлять вещами только на уровне транспорта (TCP), а не сети (IP), а не Link (3G, Wi-Fi, Ethernet ...), поэтому вы можете управлять только сокетами.

721
задан Avindra Goolcharan 10 August 2016 в 19:59
поделиться

9 ответов

CGI - это интерфейс, который говорит веб-серверу, как передавать данные в и из приложения. Более конкретно, он описывает, как информация запроса передается в переменные среды (например, тип запроса, удаленный IP-адрес), как корпус запроса передается через стандартный вход, и как реакция передается через стандартный выход. Вы можете обратиться к спецификации CGI для деталей.

Чтобы использовать ваше изображение:

Запрос пользователя (клиент) для страницы ---> WebServer --- [CGI] ----> Сервер Server ---> MySQL Server.

Большинство, если нет всех, веб-серверы могут быть настроены для выполнения программы в качестве «CGI». Это означает, что веб-сервер, при получении запроса, пересылает данные в конкретную программу, устанавливая некоторые переменные среды и маршаллирование параметров по стандартному входу и стандартному выводу, поэтому программа может знать, где и что искать.

Основным преимуществом является то, что вы можете запустить любой исполняемый код из Интернета, учитывая, что как веб-сервер, так и программа, как работает CGI. Вот почему вы можете написать веб-программы в C или Bash с помощью обычного WebServer с поддержкой CGI. Это, и что большинство сред Programming могут легко использовать стандартные входные, стандартные выходные и средние переменные.

В вашем случае, если вы, скорее всего, использовали другое, специфичное для PHP, средства связи между вашими сценариями и веб-сервером, как вы хорошо упоминаете на своем вопросе, является встроенным интерпретатором MOD_PHP.

Итак, отвечая на ваши вопросы:

Что именно CGI?

см. Выше.

Что такое большая сделка с /cgi-bin/*.CGI? Что с этим? Я не знаю, какой каталог CGI-Bin на сервере для. Я не знаю, почему у них есть * .cgi Расширения.

Это традиционное место для программ CGI, многие веб-серверы поставляются с этим каталогом предварительно сконфигурированным для выполнения всех бинарных файлов в качестве программ CGI. Расширение .CGI обозначает исполняемый файл, который ожидается проработать через CGI.

Почему Perl всегда приходит в путь. CGI & Perl (язык). Я также не знаю, как дела с этими двумя. Почти все время я продолжаю услышать эти два в комбинации «CGI & Perl». Эта книга - еще один отличный пример программирования CGI с Perl, почему бы не «программирование CGI с PHP / JSP / ASP». Я никогда не видел таких вещей.

Поскольку Perl является древним (старше, чем PHP, JSP и ASP, который все пришел к тому, когда CGI уже был старый, Perl существовал, когда CGI был новым) и стал довольно известным, чтобы быть очень хорошим языком для обслуживания динамических веб-страниц через CGI Отказ В настоящее время существуют другие альтернативы для запуска Perl в веб-сервере, в основном MOD_PERL .

Программирование CGI в C Это смущает меня много. в C ?? Серьезно?? Я не знаю, что сказать. Я просто запутался. «В C» ?? Это все меняет. Программа должна быть составлена ​​и выполнена. Это полностью изменяет мой вид на веб-программирование. Когда я собираюсь компилировать? Как программа выполняется (потому что это будет Машинный код, так что он должен выполняться как независимый процесс). Как это связано с веб-сервером? IPC? и взаимодействие со всеми серверами (в моем примере MatLab & MySQL), используя программирование сокетов? Я потерян !!

Вы компилируете исполняемый раз, веб-сервер выполняет программу и передает данные в запросе к программе и выводит полученный ответ. CGI указывает, что один экземпляр программы будет запущен за каждый запрос. Вот почему CGI неэффективен и вроде устарел в наши дни.

Говорят, что CGI устарел. Это больше не используется. Это так? Какова его последнее обновление?

CGI все еще используется, когда требуется производительность, и требуется простое средство выполнения кода , Это неэффективно для ранее заявленных причин и там Е более современные средства выполнения любой программы в веб-среде. В настоящее время самым известным является FastCGI .

419
ответ дан 22 November 2019 в 21:30
поделиться

CGI, по сути, передает запрос любому интерпретатору , настроенному на веб-сервере - это может быть Perl, Python, PHP, Ruby, C почти что угодно. Perl был самым распространенным в те дни, поэтому вы часто видите его в отношении CGI.

CGI не умер. На самом деле большинство крупных хостинговых компаний используют PHP как CGI, а не mod_php, потому что он предлагает конфигурацию на уровне пользователя и некоторые другие вещи, в то время как он медленнее, чем mod_php. Ruby и Python также обычно запускаются как CGI. Ключевым отличием здесь является то, что серверный модуль работает как часть реального серверного программного обеспечения - где, как и в случае с CGI, он полностью находится вне сервера. Сервер просто использует модуль CGI, чтобы определить, как передавать и получать данные внешнему интерпретатору.

12
ответ дан xwlee 10 August 2016 в 19:59
поделиться

Что такое CGI?

Средство для веб-сервера получать данные из программы (а не, например, из файла).

Что такого важного в /cgi-bin/*.cgi?

Ничего особенного. Это просто конвенция.

Я не знаю, для чего нужен этот каталог cgi-bin на сервере. Я не знаю, почему у них есть расширения *.cgi.

Сервер должен знать, что делать с этим файлом (т.е. рассматривать его как программу для выполнения, а не как что-то, что можно просто обслуживать). Наличие расширения .html говорит ему использовать тип содержимого text/html. Наличие расширения .cgi говорит ему выполнять его как программу.

Хранение исполняемых файлов в отдельном каталоге даёт дополнительную защиту от выполнения некорректных файлов и/или обслуживания CGI-программ в качестве исходных данных в случае, если сервер неправильно настроен.

Почему Perl всегда мешает.

Это не так. Perl был просто большим и популярным одновременно с CGI.

Я не использовал Perl CGI много лет. Я использовал mod_perl долгое время, и в настоящее время я склонен к PSGI/Plack с FastCGI.

Эта книга - еще один прекрасный пример программирования CGI на Perl. Почему бы не "Программирование на CGI с помощью PHP/JSP/ASP".

CGI не очень эффективен. Лучшие методы общения с программами с веб-серверов появились примерно в то же время, что и с PHP. JSP и ASP являются различными методами для общения с программами.

Программирование на CGI на C это меня сильно смущает. На C??? Серьезно??

Это язык программирования, почему бы и нет?

Когда мне компилировать?

  1. Пишите код
  2. Compile
  3. Access URL
  4. Webserver выполняет программу

Как выполняется программа (потому что это будет машинный код, поэтому он должен выполняться как самостоятельный процесс).

Она не должна выполняться как независимый процесс (вы можете написать модули Apache на C), но вся концепция CGI заключается в том, что она запускает внешний процесс.

Как он взаимодействует с веб-сервером? IPC?

STDIN/STDOUT и переменные окружения - как определено в спецификации CGI.

и взаимодействие со всеми серверами (в моем примере MATLAB и MySQL) с помощью сокета. программирование?

Используя любые методы, которые вам нравятся и поддерживаются.

Говорят, что CGI обесценивается. Он больше не используется. Неужели?

CGI неэффективен, медленен и прост. Он редко используется, а когда используется, то только потому, что он простой. Если производительность не имеет большого значения, то простота стоит очень много.

Какое у него последнее обновление?

1.1

63
ответ дан 22 November 2019 в 21:30
поделиться

CGI - это спецификация интерфейса между веб-сервером (HTTP-сервером) и исполняемой программой некоторого типа, который должен обрабатывать определенный запрос Отказ

Описывается, как определенные свойства этого запроса должны быть переданы на окружающую среду этой программы и как программа должна передавать ответ на сервер и как сервер должен «завершить» ответ, чтобы сформировать действительный ответ на оригинал HTTP-запрос.

Для некоторого времени CGI был проектом IETF Internet, и как таковой имел срок годности. Истекло без обновления, поэтому не было стандарта CGI '. Это теперь информационный РФК, но в качестве таких документов обычная практика и не сама стандарта. RFC3875.TXT , , RFC3875.HTML

Программы, реализующие интерфейс CGI, могут быть написаны на любом языке Runnable на целевой машине. Они должны быть в состоянии получить доступ переменных среды и обычно стандартной вход , и они генерируют их вывод на стандартном выходе .

Компилированные языки, такие как C, обычно использовались, как были такие языки, как Perl, часто использующие библиотеки, чтобы облегчить доступ к среде CGI.

Одним из больших недостатков CGI заключается в том, что новая программа вырезана за каждый запрос, поэтому сохранение государства между запросами может стать серьезной проблемой производительности. Состояние может быть обработано в куки или закодировано в URL-адресе, но если он доходит до большого, он должен храниться в другом месте и введен в ключ от кодированной информации URL или файла cookie. Затем каждый вызов CGI должен будет перезагрузить хранимое состояние из магазина где-то.

По этой причине и для значительного просмотра интерфейса к запросам и сеансам, лучшие интегральные среды между веб-серверами и приложениями намного популярны. Среда, такие как современная реализация PHP с Apache, интегрируйте целевой язык намного лучше с веб-сервером и предоставить доступ к объектам запроса и сеансов, которые необходимы для эффективного обслуживания HTTP-запросов. Они предлагают гораздо проще и богатый способ написать «программы» для обработки HTTP-запросов.

Написали ли вы сценарий CGI, скорее зависит от интерпретации. Это, безусловно, выполнила работу одной, но гораздо более обычная запущена PHP в качестве модуля, где интерфейс между скриптом и сервером не является строгом интерфейсом CGI.

41
ответ дан 22 November 2019 в 21:30
поделиться

CGI указан в RFC 3875 , хотя это является более поздним «официальным» кодированием оригинала NCSA Документ . В основном CGI определяет протокол для передачи данных о HTTP-запросе от веб-сервера в программу для обработки - любой программы на любом языке. В то время, когда был написан SPEC (1993), большинство веб-серверов содержали только статические страницы, «веб-приложения» были редкими и новыми, поэтому казалось естественным, чтобы они были помимо «нормального» статического контента, такого как в Каталог CGI-BIN , кроме статического контента и заканчивая их в .CGI .

В это время здесь также не было выделенных «языков веб-программирования», как PHP, и C был доминирующим портативным языком программирования - так много людей написали свои сценарии CGI в C. Но Perl быстро оказался лучше для Такая вещь, и CGI на некоторое время стало почти синонимом Perl. Затем пришли Java Servelets, PHP и куча других и взяли большие части доли рынка Perl.

18
ответ дан 22 November 2019 в 21:30
поделиться

CGI - это механизм, посредством которого веб-сервер вызывает внешнюю программу для обработки запроса, при этом для подачи данных запроса в программу используются переменные окружения и стандартный вход. Точный язык, на котором написана внешняя программа, не имеет значения, хотя написание CGI-программ на одних языках проще, чем на других.

Поскольку CGI-скрипты требуют разрешений на выполнение, httpd по умолчанию разрешает выполнять CGI-программы только в каталоге cgi-bin в целях (возможно, теперь ошибочных) безопасности.

Большинство PHP-скриптов выполняется в процессе работы веб-сервера через mod_php. Это не CGI.

CGI работает медленно, так как программа (и связанный с ней интерпретатор) должны запускаться по запросу. Современные альтернативы - это встроенное исполнение, используемое mod_php, и длительные процессы, используемые FastCGI. Данный язык может иметь свой собственный способ реализации этих механизмов, поэтому обязательно поспрашивайте, прежде чем прибегать к CGI.

11
ответ дан 22 November 2019 в 21:30
поделиться

посмотреть CGI в Википедии. CGI - это протокол между веб-сервером и внешней программой или сценарием, который обрабатывает вход и генерирует выход, который отправляется в браузер.

CGI - это просто путь для веб-сервера и программы для общения, ничего более, ничего меньше. Здесь сервер управляет сетевым подключением и HTTP-протоколом, а программа обрабатывает ввод и генерирует выход, который отправляется в браузер. Сценарий CGI может быть в основном любую программу, которая может быть выполнена веб-сервером и следует протоколу CGI. Таким образом, программа CGI может быть реализована, например, в C. Однако это чрезвычайно редко, поскольку C не очень хорошо подходит для задачи.

/ CGI-BIN / *. CGI - просто путь, в котором люди обычно помещают свой сценарий CGI. Веб-сервер обычно настроен по умолчанию для получения сценариев CGI с этого пути.

Сценарий CGI может быть реализован также в PHP, но все программы PHP не являются сценариями CGI. Если WebServer имеет встроенный интерпретатор PHP (e.g. mod_php в Apache), то фаза CGI пропускается более эффективным прямым протоколом между веб-сервером и интерпретатором.

Если вы реализовали сценарий CGI или не зависит от того, как ваш сценарий выполняется веб-сервером.

13
ответ дан 22 November 2019 в 21:30
поделиться

Идея CGI заключается в том, что программа / скрипт (будь то даже в C) получает входные данные через stdin (данные запроса) и выводит данные через STDOUT (ECHO, REPTFPH). Причина, по которой большинство скриптов PHP не имеют права, заключается в том, что они работают под модулем PHP Apache.

4
ответ дан 22 November 2019 в 21:30
поделиться

Возможно, вы захотите узнать, что не является CGI, и ответ - МОДУЛЬ для вашего веб-сервера (если я предполагаю, что вы используете Apache). И В этом БОЛЬШАЯ РАЗНИЦА, потому что CGI нужна и внешняя программа, поток, что угодно для создания экземпляра сервера приложений PERL, PHP, C, где, когда вы запускаете как МОДУЛЬ, эта программа сама по себе является веб-сервером (apache).

Из-за всего этого возникает множество проблем с производительностью, безопасностью и переносимостью. Но сначала хорошо знать, что не является CGI, чтобы понять, что это такое.

7
ответ дан 22 November 2019 в 21:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: