Entendendo o que é URI, URL, URN e conhecendo as diferenças entre POST e GET

Explanações sobre o que é URI, URL, URN e conferindo na prática algumas diferenças entre POST e GET com PHP e HTML. Também tem um teste que verifica algumas diferenças entre POST e GET, um teste simples dos limites de caracteres que alguns navegadores suportam na barra de endereços e um teste simples de velocidade das solicitações POST e GET.

[ Hits: 5.050 ]

Por: Buckminster em 30/04/2024


Execução dos Testes 1



Executamos o arquivo filtro.html e aparece a seguinte tela no navegador:
Digitamos 'teste' e '123' (ou outra coisa da sua escolha) nos campos e clicamos no botão Login.

1. Primeiro com GET e GET (method="get" e 'REQUEST_METHOD')==='GET') nos dois arquivos (filtro.html e filtro.php)

A saída no Google Chrome do Debian é a seguinte:

filter_has_var: INPUT_SERVER campo REQUEST_METHOD corresponde
Array
(
    [SCRIPT_NAME] => /filtro/filtro.php
    [REQUEST_URI] => /filtro/filtro.php?usuario=teste&senha=123&botao=
    [QUERY_STRING] => usuario=teste&senha=123&botao=
    [REQUEST_METHOD] => GET
    [SERVER_PROTOCOL] => HTTP/1.1
    [GATEWAY_INTERFACE] => CGI/1.1
    [REMOTE_PORT] => 57654
    [SCRIPT_FILENAME] => /var/www/html/filtro/filtro.php
    [SERVER_ADMIN] => [no address given]
    [CONTEXT_DOCUMENT_ROOT] => /var/www/html
    [CONTEXT_PREFIX] =>
    [REQUEST_SCHEME] => http
    [DOCUMENT_ROOT] => /var/www/html
    [REMOTE_ADDR] => ::1
    [SERVER_PORT] => 80
    [SERVER_ADDR] => ::1
    [SERVER_NAME] => localhost
    [SERVER_SOFTWARE] => Apache
    [SERVER_SIGNATURE] =>
    [PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    [HTTP_ACCEPT_LANGUAGE] => pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7
    [HTTP_ACCEPT_ENCODING] => gzip, deflate, br, zstd
    [HTTP_REFERER] => http://localhost/filtro/filtro.html
    [HTTP_SEC_FETCH_DEST] => document
    [HTTP_SEC_FETCH_USER] => ?1
    [HTTP_SEC_FETCH_MODE] => navigate
    [HTTP_SEC_FETCH_SITE] => same-origin
    [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
    [HTTP_USER_AGENT] => Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
    [HTTP_UPGRADE_INSECURE_REQUESTS] => 1
    [HTTP_SEC_CH_UA_PLATFORM] => "Linux"
    [HTTP_SEC_CH_UA_MOBILE] => ?0
    [HTTP_SEC_CH_UA] => "Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"
    [HTTP_CONNECTION] => keep-alive
    [HTTP_HOST] => localhost
    [proxy-nokeepalive] => 1
    [modHeadersAvailable] => true
    [FCGI_ROLE] => RESPONDER
    [PHP_SELF] => /filtro/filtro.php
)
var_dump(usuariopost)-corresponde: NULL
var_dump(usuarioget)-corresponde: string(5) "teste"

echo usuariopost-corresponde:
echo usuarioget-corresponde: teste

var_dump(usuariopost)-final: NULL
var_dump(usuarioget)-final: string(5) "teste"

print_r post:
print_r get: teste

No Google Chrome do Windows 10:

filter_has_var: INPUT_SERVER campo REQUEST_METHOD corresponde
Array
(
    [HTTP_HOST] => localhost
    [HTTP_CONNECTION] => keep-alive
    [HTTP_SEC_CH_UA] => "Google Chrome";v="123", "Not:A-Brand";v="8", "Chromium";v="123"
    [HTTP_SEC_CH_UA_MOBILE] => ?0
    [HTTP_SEC_CH_UA_PLATFORM] => "Windows"
    [HTTP_UPGRADE_INSECURE_REQUESTS] => 1
    [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36
    [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
    [HTTP_SEC_FETCH_SITE] => same-origin
    [HTTP_SEC_FETCH_MODE] => navigate
    [HTTP_SEC_FETCH_USER] => ?1
    [HTTP_SEC_FETCH_DEST] => document
    [HTTP_REFERER] => http://localhost/filtro/filtro.html
    [HTTP_ACCEPT_ENCODING] => gzip, deflate, br, zstd
    [HTTP_ACCEPT_LANGUAGE] => pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7
    [HTTP_COOKIE] => _ga=GA1.1.1020396929.1712114652; _ga_40EGW0ERX5=GS1.1.1712355178.4.1.1712355626.0.0.0
    [PATH] => C:Program FilesCommon FilesOracleJavajavapath;C:Program Files (x86)Common FilesOracleJavajavapath;C:Windowssystem32;C:Windows;C:WindowsSystem32Wbem;C:WindowsSystem32WindowsPowerShellv1.0;C:WindowsSystem32OpenSSH;C:Program FilesPuTTY;C:Program FilesPostgreSQL16in;C:php;C:Windowssystem32configsystemprofileAppDataLocalMicrosoftWindowsApps
    [SystemRoot] => C:Windows
    [COMSPEC] => C:Windowssystem32cmd.exe
    [PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
    [WINDIR] => C:Windows
    [SERVER_SIGNATURE] =>
    [SERVER_SOFTWARE] => Apache/2.4.58 (Win64) PHP/8.3.2
    [SERVER_NAME] => localhost
    [SERVER_ADDR] => 127.0.0.1
    [SERVER_PORT] => 80
    [REMOTE_ADDR] => 127.0.0.1
    [DOCUMENT_ROOT] => C:/Apache24/htdocs
    [REQUEST_SCHEME] => http
    [CONTEXT_PREFIX] =>
    [CONTEXT_DOCUMENT_ROOT] => C:/Apache24/htdocs
    [SERVER_ADMIN] => admin@example.com
    [SCRIPT_FILENAME] => C:/Apache24/htdocs/filtro/filtro.php
    [REMOTE_PORT] => 54064
    [GATEWAY_INTERFACE] => CGI/1.1
    [SERVER_PROTOCOL] => HTTP/1.1
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => usuario=teste&senha=123&botao=
    [REQUEST_URI] => /filtro/filtro.php?usuario=teste&senha=123&botao=
    [SCRIPT_NAME] => /filtro/filtro.php
    [PHP_SELF] => /filtro/filtro.php
)
var_dump(usuariopost)-corresponde: NULL
var_dump(usuarioget)-corresponde: string(5) "teste"

echo usuariopost-corresponde:
echo usuarioget-corresponde: teste

var_dump(usuariopost)-final: NULL
var_dump(usuarioget)-final: string(5) "teste"

print_r post:
print_r get: teste

O que nos interessa são os parâmetros:
  • [REQUEST_METHOD] => GET
  • [QUERY_STRING] => usuario=teste&senha=123&botao=
  • [REQUEST_URI] => /filtro/filtro.php?usuario=teste&senha=123&botao=

Vejam o que apareceu no URI (barra de endereços): http://localhost/filtro/filtro.php?usuario=teste&senha=123&botao=

Obviamente os dados apareceram no URI por ser o método GET.

Acrescentando a tag value="botao" no button aparece http://localhost/filtro/filtro.php?usuario=teste&senha=123&botao=botao.

<button type="submit" id="botao" name="botao" value="botao">Login</button>

Caso executar-se o arquivo phpinfo.php (<?php phpinfo(); ?>) ver-se-á que as variáveis acima são as mesmas da seção Apache Environment e/ou PHP Variables (dependendo do sistema), com algumas diferenças.

2. Agora com method POST no html e POST no php

Não repetirei todos os parâmetros, vejam somente essas saídas:

filter_has_var: INPUT_SERVER campo REQUEST_METHOD corresponde
Array
(
...
    [REQUEST_URI] => /filtro/filtro.php
    [QUERY_STRING] =>
    [REQUEST_METHOD] => POST
...
)
var_dump(usuariopost)-corresponde: string(5) "teste"
var_dump(usuarioget)-corresponde: NULL

echo usuariopost-corresponde: teste
echo usuarioget-corresponde:

var_dump(usuariopost)-final: string(5) "teste"
var_dump(usuarioget)-final: NULL

print_r post: teste
print_r get:

A [QUERY_STRING] veio vazia, o que é óbvio, pois o método utilizado foi o POST. E já podemos observar as diferenças entre var_dump, echo e print_r. Segue na próxima seção.

Página anterior     Próxima página

Páginas do artigo
   1. Entendendo o que é URI, URL, URN
   2. POST e GET
   3. Códigos dos Testes
   4. Execução dos Testes 1
   5. Execução dos Testes 2
   6. Código do Teste de Tempo
   7. Tempo de Solicitação 1
   8. Tempo de Solicitação 2
   9. Conclusão
Outros artigos deste autor

Compilação de Kernel

Configuração do sistema, DHCP, compartilhamento e DNS no Debian Squeeze

Instalando e Configurando o pgAgent no Linux (pgAdmin e PostgreSQL)

Como utilizar de forma correta os repositórios e pacotes Backports

Como agendar um backup automático do PostgreSQL no Cron evitando o problema de senha

Leitura recomendada

Funções da categoria Miscelânea do PHP

Ninguém planeja fracassar, mas muitos fracassam por não planejar

Gráficos em PHP Highcharts

Solução open source para clínicas médicas

Gerando gráficos com PHP e highcharts.com

  
Comentários
[1] Comentário enviado por maurixnovatrento em 23/06/2024 - 23:35h

Excelente artigo e bem completo.

______________________________________________________________________
Inscreva-se no meu Canal: https://www.youtube.com/@LinuxDicasPro
Repositório GitHub do Canal: https://github.com/LinuxDicasPro
Grupo do Telegram: https://t.me/LinuxDicasPro
Meu GitHub Pessoal: https://github.com/mxnt10


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts