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: 6.363 ]

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

Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla

Resolver problemas de Internet

Customizar a Instalação do Linux Debian com Preseed

Descritores de Arquivos e Swappiness

Compilação e instalação do Vim e habilitando a copiar e colar com o mouse

Leitura recomendada

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

Desenvolvendo um componente de calendário dinâmico em PHP

Gráficos em PHP Highcharts

Instalação do MediaWiki em uma Project web do SourceForge

Debugando aplicações PHP usando phpdbg - parte 01

  
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