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

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 do PostgreSQL com Apache 2, PHP 5, OpenSSL no Debian Wheezy 7.7 64 bits com systemd e chroot

kernel Linux otimizado - Compilação e teste

Antivírus ClamAV com proteção em tempo real

Compilação do Squid 3 no Debian Wheezy

Manual traduzido do Squid - Parte 2

Leitura recomendada

Lista de extensões preferidas para Joomla!

JOOMLA no openSUSE em 10 passos

Funções da categoria Miscelânea do PHP

A simples classe Date Operations

Uma introdução à biblioteca GD

  
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