Your SlideShare is downloading. ×
GET /conceitos HTTP/1.1
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

GET /conceitos HTTP/1.1

3,981
views

Published on

O protocolo HTTP está há mais de 10 anos nos bastidores de quase todas as aplicações web, incluindo a explosão de uso do AJAX e a nova onda de APIs em REST. Está diretamente relacionado com a …

O protocolo HTTP está há mais de 10 anos nos bastidores de quase todas as aplicações web, incluindo a explosão de uso do AJAX e a nova onda de APIs em REST. Está diretamente relacionado com a performance, ecalabilidade e SEO.

Saber como ele funciona e como o PHP interage com ele é conhecimento obrigatório para qualquer programador web.


0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,981
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
75
Comments
0
Likes
8
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 1 GET/conceitosHTTP/1.1 Alexandre Gomes Gaigalas PHP Conference 2010 – 26 de Novembro
  • 2. 2 AlexandreGomesGaigalas ● PHP 5 ● OOP ● REST ● Linked Data
  • 3. 3 KingoLabs ● Coleta e Análise de Dados ● Twitter, Facebook, Foursquare, etc ● Sorteie.me, trmanager, Kingo Meter, kingo.to, rial.to, etc ● Ubuntu, PHP 5.3, MySQL, MongoDB
  • 4. 4 Programaçãodehoje ● Introdução sobre o HTTP ● Teoria por trás do GET e POST ● Exemplos de Requisição ● Códigos de Status ● REST: Recursos e Métodos ● Negociação de Conteúdo ● Cache ● Exemplos
  • 5. 5 HyperTextTransferProtocol ● Também é um padrão do W3C. ● Criado há mais de 10 anos. ● Não tem frescura com implementações. Todos os navegadores respeitam. ● Define toda a arquitetura da web.
  • 6. 6 Protocolo é um conjunto de regras de comunicação
  • 7. 7 HTTP:Cliente-Servidorclássico Cliente Servidor Requisição Resposta
  • 8. 8 ElestambémsãoHTTP... ● AJAX (XmlHTTPRequest) ● Adobe Flex ● REST ● SOAP
  • 9. 9 GETePOST São dois métodos HTTP
  • 10. 10 <formmethod=”GET”>naPrática ● Os parâmetros são enviados pela URL ● No PHP: $_GET ● Não é possível upload de arquivos ● Não pede confirmação de re-envio quando atualiza a página
  • 11. 11 <formmethod=”POST”>naPrática ● Os parâmetros não aparecem na URL ● No PHP: $_POST ● É possível upload de arquivos ● Pede confirmação de re-envio quando atualiza a página
  • 12. 12 GETnaTeoria ● Método HTTP para obter dados ● Os parâmetros são parâmetros de pesquisa ● Formulários de busca, filtros de relatórios, etc.
  • 13. 13 POSTnaTeoria ● Método HTTP para enviar dados ● Os parâmetros são dados a serem enviados ● Formulários de inserção, atualização, processamento remoto, etc
  • 14. 14 Outrosmétodos ● DELETE para excluir dados ● PUT para atualizar/inserir dados em um local específico ● $_SERVER['REQUEST_METHOD']
  • 15. 15 UmaRequisiçãoHTTP GET /index.html HTTP/1.1 Host: example.com rn rn
  • 16. 16 UmaRequisiçãoHTTP GET /index.html HTTP/1.1 Host: example.com rn rn Método Recurso Cabeçalho Protocolo Linha em Branco
  • 17. 17 UmaRequisiçãoHTTP ● Método: $_SERVER['REQUEST_METHOD'] ● Recurso: $_SERVER['REQUEST_URI'] ● Protocolo: $_SERVER['SERVER_PROTOCOL'] ● Cabeçalhos: $_SERVER['HTTP_*']
  • 18. 18 AcessandoCabeçalhosHTTP ● Host: $_SERVER['HTTP_HOST'] ● User-Agent: $_SERVER['HTTP_USER_AGENT'] ● X-FooBar: $_SERVER['HTTP_X_FOOBAR']
  • 19. 19 UmaRespostaHTTP HTTP/1.1 200 Ok Date: Mon, 22 November... Content-Length: 3 Content-type: text/html rn Oi!
  • 20. 20 UmaRespostaHTTP HTTP/1.1 200 Ok Date: Mon, 22 November... Content-Length: 3 Content-type: text/html rn Oi! Protocolo Status Nova Linha Cabeçalhos Corpo
  • 21. 21 Content-Length ● “Oi!” = 3 ● “Hello World” = 11 ● “” = 0 ● O PHP calcula automaticamente!
  • 22. 22 Content-Type ● text/html ● text/xml ● application/json ● text/plain ● image/jpeg
  • 23. 23 CódigosdeStatus ● 1xx – Informativo ● 2xx – Sucesso! ● 3xx – Redirecionamento ● 4xx – Erro do cliente ● 5xx – Erro do servidor
  • 24. 24 CódigosdeStatusfamosos ● 404 Not Found ● 503 Service Unavailable ● 403 Forbidden ● 401 Unauthorized ● 301 Redirect
  • 25. 25 CódigosdeStatusnoPHP(envio) header('HTTP/1.1 201 Created');
  • 26. 26 CódigosdeStatusnoAJAX(client) req = new XmlHttpRequest; req.onreadystatechange(function(){ console.log(req.status); }); req.open(“GET”, “/index.html”, true); req.send(“”);
  • 27. 27 CódigosdeStatusnojQuery(client) $.ajax({ url: index.html, complete: function(req) { console.log(req.status); } });
  • 28. 28 CódigosdeSucesso ● 201 Created – Sua requisição gerou algo no servidor, aqui está ele. ● 202 Accepted – Sua requisição foi aceita e o servidor está gerando algo. ● 204 No Content – Deu tudo certo, nada pra exibir
  • 29. 29 CódigosdeRedirecionamento ● 300MultipleChoices–Acheiváriascoisas,escolhauma. ● 301Redirect–Issoquevocêprocuramudouprasempredelugar. ● 302Found–Issoquevocêprocuranomomentoestáaqui. ● 303SeeOther–Suarequisiçãofoiaceita,olhaelaaqui. ● 304NotModified–Nadanovonoservidor,nemsepreocupe. ● 307TemporaryRedirect–Oquevocêprocuraestátemporariamenteaqui.
  • 30. 30 CódigosdeErrodoCliente ● 400 Bad Request – Não consigo entender o que você pediu. ● 401 Unauthorized – Você não tem permissão pra isso. ● 403 Forbidden – Ninguém tem permissão pra isso. ● 404 – Não achei. ● 405 – Método não permitido.
  • 31. 31 CódigosdeErrodoServidor ● 500 Internal Server Error – Alguma merda aconteceu. ● 501 Not Implemented – Esse servidor não entende esse método. ● 502 Bad Gateway – Eu estava contando com outro servidor, mas ele pisou na bola. ● 503 Service Unavailable – Tô sobrecarregado, espera um pouco.
  • 32. 32 RecursoseMétodosRESTful ● /usuario/criar ● /usuario/atualizar ● /usuario/excluir ● /usuario/buscar ● /usuario/exibir ● POST /usuario ● PUT /usuario/alganet ● DELETE /usuario/alganet ● GET /usuario?q= ● GET /usuario/alganet
  • 33. 33 Recursos:Substantivos ● /usuario ● /usuario/ultimo ● /usuario/alganet ● /categoria/php
  • 34. 34 QueryString:Atributos ● /usuario?estado=SP ● /categoria?nome=php ● /busca?termo=programador
  • 35. 35 NegociaçãodeConteúdo ● $_SERVER['HTTP_ACCEPT'] – text/html ● $_SERVER['HTTP_ACCEPT_LANGUAGE'] – pt-BR ● $_SERVER['HTTP_ACCEPT_CHARSET'] – utf-8
  • 36. 36 NegociaçãodeConteúdo ● header('Content-Type: text/html; charset=utf-8'); ● header('Content-Language: pt-BR');
  • 37. 37 Cache header('Expires: Thu, 23 November 2010 00:00:01 GMT');
  • 38. 38 Cache
  • 39. 39 Exemplos
  • 40. 40 POST-redirect-GET ● POST /usuario “username=alganet” ● 303 See Other /usuario/alganet ● GET /usuario/alganet ● 201 Created
  • 41. 41 DELETE ● DELETE /usuario/alganet ● 205 Reset Content
  • 42. 42 POSTcomdadosinválidos ● POST /usuario “username=$%$%” ● 400 Bad Request
  • 43. 43 GETparaURLsamigáveis ● GET /usuario?username=alganet ● 301 See Other /usuario/alganet ● GET /usuario/alganet ● 200 Ok
  • 44. 44 NegociaçãodeConteúdo ● GET /usuario/alganet (Accept: text/xml) ● 303 See Other /usuario/alganet.xml
  • 45. 45 Cache ● GET /usuario/alganet ● 200 Ok (ETag: 2fe450ed30acb) ● GET /usuario/alganet (If-None-Match: 2fe450ed30acb) ● 304 Not Modified
  • 46. 46 Obrigado!
  • 47. 47 Eu,aquieali. ● http://twitter.com/alganet ● http://github.com/alganet ● http://about.me/alganet ● http://gaigalas.net ● alexandre@gaigalas.net