Как вызвать скрипт Perl CGI, когда пользователь запрашивает страницу HTML?

Есть ли способ вызвать сценарий Perl CGI при запросе HTML-страницы на сервер?

Точно так же, как скрипт может быть привязан к действию, так или иначе есть возможность связать скрипт с "Запросом на страницу"

3 ответа

Будет ли вызвана программа Perl CGI или нет, зависит в первую очередь от конфигурации сервера и части пути к пути ресурса.

Сценарий Perl CGI может возвращать HTML (и обычно это так). Таким образом, запрос сценария часто является эффективным запросом HTML-страницы, даже если URL-адрес не содержит ".html".

Если URL, скажем, http://www.example.com/cgi-bin/myscript.html я подозреваю, что большинство веб-серверов будут пытаться определить, является ли myscript.html исполняемой программой или каким-либо сценарием.

См. Также http://httpd.apache.org/docs/2.0/howto/cgi.html особенно "CGI вне каталогов ScriptAlias"

Чтобы молча изменить /some/path/foo.html на /other/path/bar.cgi, см. Http://httpd.apache.org/docs/2.0/misc/rewriteguide.html.

Есть ли способ вызвать скрипт Perl-CGI при запросе HTML-страницы на сервер?

Да.

Есть несколько возможных способов, в зависимости от того, чего вы хотите достичь. Пример: вы пытаетесь выполнить /cgi-bin/script1 когда /htdocs/docs2/doc1.html называется.

  1. Если ваша цель состоит в том, чтобы просто загрузить основной doc1.html в то время как - на стороне, не затрагивая эту HTML-страницу - выполняется отдельный скрипт CGI (именно так работают счетчики), вы гарантируете, что doc1.html содержит код HTML или JavaScript, который вызывает URL /cgi-bin/script1,

    Опять же, этот метод предназначен для случаев, когда вы НЕ хотите создавать какой-либо HTML через ваш CGI-скрипт; а также doc1.html фактический документ HTML, который вы хотите загрузить.

    Пара способов сделать это:

    • Имейте атрибут "onload" в теле HTML, который делает асинхронный AJAX-вызов CGI-URL.

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

    • Сделайте, чтобы веб-страница содержала изображение (если вы хотите, чтобы оно было скрыто, используйте прозрачный GIF размером 1x1, используя технику старой школы, или создайте изображение CSS display Значение свойства должно быть "спрятано", используя более современный подход). Изображения src Значением атрибута должен быть URL вашего CGI-скрипта. Если изображение на самом деле должно быть чем-то видимым, сценарий CGI должен возвращать ответ HTTP-перенаправления, указывающий на URL-адрес фактического изображения.

      Пожалуйста, обратите внимание, что именно так все счетчики страниц работали в старые времена Интернета (они все еще могут, хотя я бы случайно предположил, что в эти дни они скорее всего AJAXy, а не какие-то вещи из Google Analytics).

    • Очень похоже на последний, но используется скрытый <IFRAME> чей атрибут "src" указывает на скрипт CGI.

    Очевидно, что оба последних подхода (IFRAME или IMG) являются синхронными, например, ваша страница не будет на 100% завершать загрузку изображения или фрейма, пока скрипт CGI не завершит отправку своего ответа HTTP; тогда как первый может быть либо синхронным, либо асинхронным вызовом XMLHTTPRequest (он же AJAX).

    Остальные подходы имеют дело со сценарием CGI, который выполняется INSTEAD файла HTML.

  2. "Doc1.html" содержит только перенаправление (обычно обновление HTTP META или изменение фрагмента JavaScript) window.location значение) в CGI URL. Затем пусть сценарий CGI создаст HTTP-ответ, который либо возвращает желаемый HTML, либо возвращает HTTP-перенаправление на другую HTML-страницу.

  3. Если вы используете Apache, вы можете переписать пользовательские URL, например, используя mod_rewrite; и, следовательно, иметь псевдоним веб-сервера /htdocs/docs2/doc1.html в /cgi-bin/script1 для тебя внутренне.

  4. Вы также можете сделать немного другую версию полного перезаписи UEL, изменив конфигурацию веб-сервера так, чтобы "docs2" был допустимым CGI-каталогом вместе с "cgi-bin" (единственное, что делает cgi-bin особенным, это то, что ваш веб-сервер имеет запись конфигурации, указывающую, что это каталог скриптов CGI); затем софт-псевдоним dic1.html к script1.

    ИМХО, не очень полезный или хороший метод, но он может быть самым простым и лучшим подходом для определенных сценариев.

Я предполагаю, что вы хотите обслуживать простой HTML-файл и запускать некоторые сценарии Perl CGI в фоновом режиме.

Немного старомодно, но вы можете использовать как SSI <!--#exec cgi="/cgi.pl" -->

Может сделать что-то подобное в JavaScript (возможно, с onload или скрытая форма представления).

Другие вопросы по тегам