AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1141819
Accepted
John
John
Asked: 2023-08-18 01:19:28 +0800 CST2023-08-18 01:19:28 +0800 CST 2023-08-18 01:19:28 +0800 CST

Por que meu navegador está exibindo a linha Content-Type?

  • 772

Seguindo o que está descrito aqui --- https://httpd.apache.org/docs/2.4/howto/cgi.html --- Criei um pequeno documento Perl:

#!/usr/bin/perl
print "Content-Type: text/html; charset=utf-8\n\n";
print "Hello, World.";

e chamou first.pl. Eu também modifiquei para que pareça

#!/usr/bin/perl
print "Content-Type: text/html; charset=utf-8\r\n\r\n";
print "Hello, World.";

porque um amigo apontou que o significado de "\n" depende do sistema e o que é necessário é CR-LF CR-LF, mas os resultados são os mesmos.)

Quando eu olho localhost/~mylogin/first.plno navegador Chrome, recebo a seguinte saída:

Content-Type: text/html; charset=utf-8

Hello, World.

(O ; charset=...material é uma ligeira modificação do que os documentos do Apache sugerem, porque deixá-lo de fora também produziu uma linha de saída Content-Type, e algumas pesquisas sugeriram que o charset pode ser importante. Acontece que não fez diferença.)

As referências dos documentos do Apache dizem "onde quer que você coloque seu arquivo, você verá uma linha Hello, World. aparecer na janela do navegador".

Claramente, estou vendo duas linhas, a primeira das quais deveria ter sido tratada apenas como descrição do conteúdo restante, e acho que isso é um problema.

Espero que seja algum erro realmente básico e gostaria de receber qualquer sugestão.

Contexto

Estou em um Mac rodando Monterey 12.6.6

Comecei a seguir as instruções daqui .

A partir do httpd.confarquivo vanilla, fiz apenas algumas edições, descomentando o seguinte:

LoadModule perl_module libexec/apache2/mod_perl.so
LoadModule userdir_module libexec/apache2/mod_userdir.so
Include /private/etc/apache2/extra/httpd-userdir.conf

E em /etc/apache2/extra/httpd-userdir.conf, eu descomentei

Include /private/etc/apache2/users/*.conf

Eu criei /etc/apache2/users/mylogin.confe dei a ele este conteúdo:

<Directory "/Users/mylogin/Sites/"> 
  AddLanguage en .en 
  AddHandler perl-script .pl 
  PerlHandler ModPerl::Registry 
  Options Indexes MultiViews FollowSymLinks ExecCGI 
  AllowOverride None 
  Require host localhost
</Directory>

eu corri

chmod +a "_www allow execute" ~

[em todos os casos acima, substituí "mylogin" pelo meu login real, é claro]

E então, seguindo as instruções do Apache, adicionei isso ao httpd.confarquivo:

<Directory "/Users/mylogin/Sites">
    Options +ExecCGI
    AddHandler cgi-script .cgi 
</Directory>
apache2
  • 2 2 respostas
  • 43 Views

2 respostas

  • Voted
  1. Best Answer
    Esa Jokinen
    2023-08-18T03:24:30+08:002023-08-18T03:24:30+08:00

    Com AddHandler perl-script .pl, você não executa o script com mod_cgid(ou ) de que trata mod_cgio " Tutorial do Apache: Conteúdo Dinâmico com CGImod_perl ", mas com . Embora ambos possam executar scripts Perl, é o CGI que espera que o script envie primeiro os cabeçalhos separados por \n\ndo corpo.

    Você pode ver a diferença alternando entre estas configurações:

    mod_perl

    LoadModule perl_module /usr/lib/apache2/modules/mod_perl.so
    
    <Directory "/Users/mylogin/Sites/">
      Options +ExecCGI
      AddHandler perl-script .pl
      PerlHandler ModPerl::Registry
    </Directory>
    

    Produz:

    < HTTP/1.1 200 OK
    < Server: Apache/2.4.41
    < Transfer-Encoding: chunked
    < Content-Type: text/x-perl
    < 
    Content-Type: text/html; charset=utf-8
    
    Hello, World.
    

    mod_cgid

    LoadModule cgid_module /usr/lib/apache2/modules/mod_cgid.so
    
    <Directory "/Users/mylogin/Sites/">
      Options +ExecCGI
      AddHandler cgi-script .pl
    </Directory>
    

    Produz:

    < HTTP/1.1 200 OK
    < Server: Apache/2.4.41
    < Content-Length: 13
    < Content-Type: text/html; charset=utf-8
    < 
    Hello, World.
    
    • 2
  2. John
    2023-08-18T23:43:54+08:002023-08-18T23:43:54+08:00

    Seguindo a resposta de @Esa Jokinen, fiz as coisas funcionarem, no sentido de que o carregamento http://localhost/~jfh/first.plproduziu o resultado esperado de uma linha, mas achei que valeria a pena registrar o estado de configuração final, porque exigia alguns ajustes.

    Para revisar: comecei seguindo as instruções daqui .

    A partir do httpd.confarquivo vanilla, fiz apenas algumas edições, descomentando o seguinte:

    LoadModule perl_module libexec/apache2/mod_perl.so
    LoadModule userdir_module libexec/apache2/mod_userdir.so
    Include /private/etc/apache2/extra/httpd-userdir.conf
    

    E em /etc/apache2/extra/httpd-userdir.conf, eu descomentei

    Include /private/etc/apache2/users/*.conf
    

    Eu criei /etc/apache2/users/jfh.confe dei a ele este conteúdo:

    LoadModule cgid_module libexec/apache2/mod_cgid.so
    
    <Directory "/Users/jfh/Sites/">
      AddLanguage en .en
      Options Indexes MultiViews FollowSymLinks ExecCGI
      Options +ExecCGI
      AllowOverride None
      Require host localhost
      AddHandler cgi-script .pl
    </Directory>
    

    eu corri

    chmod +a "_www allow execute" ~
    

    [em todos os casos acima, meu login é jfh, e se você quiser copiá-lo, precisará alterá-lo para seu próprio login]

    Não fiz mais edições no arquivo conforme descrito na minha pergunta original, mas fiz as edições mostradas acima em .httpd.conf/etc/apache2/users/jfh.conf

    Espero que isso ajude alguém com problemas comparáveis ​​em um sistema comparável.

    Finalmente, uma preocupação que eu tinha sobre a diferença entre \r\ne \nem várias versões perl parece ter sido equivocada, pois meu first.plarquivo se parece com isso

    #!/usr/bin/perl
    print "Content-type: text/html\n\n";
    print "Hello, World.";
    

    e funciona bem (mas também confirmei que funciona bem quando é \n\nsubstituído por \r\n\r\n).

    • 0

relate perguntas

  • Acessando o servidor web do servidor na rede local com seu endereço IP local

  • Como posso encaminhar solicitações do meu servidor web?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve