47
1 GET /conceitos HTTP/1.1 Alexandre Gomes Gaigalas PHP Conference 2010 – 26 de Novembro

GET /conceitos HTTP/1.1

Embed Size (px)

DESCRIPTION

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.

Citation preview

Page 1: GET /conceitos HTTP/1.1

1

GET /conceitos HTTP/1.1Alexandre Gomes Gaigalas

PHP Conference 2010 – 26 de Novembro

Page 2: GET /conceitos HTTP/1.1

2

Alexandre Gomes Gaigalas

● PHP 5

● OOP

● REST

● Linked Data

Page 3: GET /conceitos HTTP/1.1

3

Kingo Labs

● 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

Page 4: GET /conceitos HTTP/1.1

4

Programação de hoje● 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

Page 5: GET /conceitos HTTP/1.1

5

Hyper Text Transfer Protocol

● 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.

Page 6: GET /conceitos HTTP/1.1

6

Protocoloé um conjunto de regras de comunicação

Page 7: GET /conceitos HTTP/1.1

7

HTTP: Cliente-Servidor clássico

Cliente

Servidor

Requisição Resposta

Page 8: GET /conceitos HTTP/1.1

8

Eles também são HTTP...

● AJAX (XmlHTTPRequest)

● Adobe Flex

● REST

● SOAP

Page 9: GET /conceitos HTTP/1.1

9

GET e POSTSão dois métodos HTTP

Page 10: GET /conceitos HTTP/1.1

10

<form method=”GET”> na Prá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

Page 11: GET /conceitos HTTP/1.1

11

<form method=”POST”> na Prá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

Page 12: GET /conceitos HTTP/1.1

12

GET na Teoria

● Método HTTP para obter dados

● Os parâmetros são parâmetros de pesquisa

● Formulários de busca, filtros de relatórios, etc.

Page 13: GET /conceitos HTTP/1.1

13

POST na Teoria

● 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

Page 14: GET /conceitos HTTP/1.1

14

Outros métodos

● DELETE para excluir dados

● PUT para atualizar/inserir dados em um local

específico

● $_SERVER['REQUEST_METHOD']

Page 15: GET /conceitos HTTP/1.1

15

Uma Requisição HTTP

GET /index.html HTTP/1.1Host: example.com\r\n\r\n

Page 16: GET /conceitos HTTP/1.1

16

Uma Requisição HTTP

GET /index.html HTTP/1.1Host: example.com\r\n\r\n

Método Recurso

Cabeçalho

Protocolo

Linha emBranco

Page 17: GET /conceitos HTTP/1.1

17

Uma Requisição HTTP

● Método: $_SERVER['REQUEST_METHOD']

● Recurso: $_SERVER['REQUEST_URI']

● Protocolo: $_SERVER['SERVER_PROTOCOL']

● Cabeçalhos: $_SERVER['HTTP_*']

Page 18: GET /conceitos HTTP/1.1

18

Acessando Cabeçalhos HTTP

● Host: $_SERVER['HTTP_HOST']

● User-Agent: $_SERVER['HTTP_USER_AGENT']

● X-FooBar: $_SERVER['HTTP_X_FOOBAR']

Page 19: GET /conceitos HTTP/1.1

19

Uma Resposta HTTP

HTTP/1.1 200 OkDate: Mon, 22 November...Content-Length: 3Content-type: text/html\r\nOi!

Page 20: GET /conceitos HTTP/1.1

20

Uma Resposta HTTP

HTTP/1.1 200 OkDate: Mon, 22 November...Content-Length: 3Content-type: text/html\r\nOi!

Protocolo Status

Nova Linha

Cabeçalhos

Corpo

Page 21: GET /conceitos HTTP/1.1

21

Content-Length

● “Oi!” = 3

● “Hello World” = 11

● “” = 0

● O PHP calcula automaticamente!

Page 22: GET /conceitos HTTP/1.1

22

Content-Type

● text/html

● text/xml

● application/json

● text/plain

● image/jpeg

Page 23: GET /conceitos HTTP/1.1

23

Códigos de Status

● 1xx – Informativo

● 2xx – Sucesso!

● 3xx – Redirecionamento

● 4xx – Erro do cliente

● 5xx – Erro do servidor

Page 24: GET /conceitos HTTP/1.1

24

Códigos de Status famosos

● 404 Not Found

● 503 Service Unavailable

● 403 Forbidden

● 401 Unauthorized

● 301 Redirect

Page 25: GET /conceitos HTTP/1.1

25

Códigos de Status no PHP (envio)

header('HTTP/1.1 201 Created');

Page 26: GET /conceitos HTTP/1.1

26

Códigos de Status no AJAX (client)

req = new XmlHttpRequest;req.onreadystatechange(function(){ console.log(req.status);});req.open(“GET”, “/index.html”, true);req.send(“”);

Page 27: GET /conceitos HTTP/1.1

27

Códigos de Status no jQuery (client)

$.ajax({ url: index.html, complete: function(req) { console.log(req.status); }});

Page 28: GET /conceitos HTTP/1.1

28

Códigos de Sucesso● 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

Page 29: GET /conceitos HTTP/1.1

29

Códigos de Redirecionamento

● 300 Multiple Choices – Achei várias coisas, escolha uma.

● 301 Redirect – Isso que você procura mudou pra sempre de lugar.

● 302 Found – Isso que você procura no momento está aqui.

● 303 See Other – Sua requisição foi aceita, olha ela aqui.

● 304 Not Modified – Nada novo no servidor, nem se preocupe.

● 307 Temporary Redirect – O que você procura está temporariamente aqui.

Page 30: GET /conceitos HTTP/1.1

30

Códigos de Erro do Cliente

● 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.

Page 31: GET /conceitos HTTP/1.1

31

Códigos de Erro do Servidor

● 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.

Page 32: GET /conceitos HTTP/1.1

32

Recursos e Métodos RESTful

● /usuario/criar

● /usuario/atualizar

● /usuario/excluir

● /usuario/buscar

● /usuario/exibir

● POST /usuario

● PUT /usuario/alganet

● DELETE /usuario/alganet

● GET /usuario?q=

● GET /usuario/alganet

Page 33: GET /conceitos HTTP/1.1

33

Recursos: Substantivos

● /usuario

● /usuario/ultimo

● /usuario/alganet

● /categoria/php

Page 34: GET /conceitos HTTP/1.1

34

Query String: Atributos

● /usuario?estado=SP

● /categoria?nome=php

● /busca?termo=programador

Page 35: GET /conceitos HTTP/1.1

35

Negociação de Conteúdo

● $_SERVER['HTTP_ACCEPT'] – text/html

● $_SERVER['HTTP_ACCEPT_LANGUAGE'] – pt-BR

● $_SERVER['HTTP_ACCEPT_CHARSET'] – utf-8

Page 36: GET /conceitos HTTP/1.1

36

Negociação de Conteúdo

● header('Content-Type: text/html; charset=utf-8');

● header('Content-Language: pt-BR');

Page 37: GET /conceitos HTTP/1.1

37

Cache

header('Expires: Thu, 23 November 2010 00:00:01 GMT');

Page 38: GET /conceitos HTTP/1.1

38

Cache

Page 39: GET /conceitos HTTP/1.1

39

Exemplos

Page 40: GET /conceitos HTTP/1.1

40

POST-redirect-GET

● POST /usuario “username=alganet”

● 303 See Other /usuario/alganet

● GET /usuario/alganet

● 201 Created

Page 41: GET /conceitos HTTP/1.1

41

DELETE

● DELETE /usuario/alganet

● 205 Reset Content

Page 42: GET /conceitos HTTP/1.1

42

POST com dados inválidos

● POST /usuario “username=$%$%”

● 400 Bad Request

Page 43: GET /conceitos HTTP/1.1

43

GET para URLs amigáveis

● GET /usuario?username=alganet

● 301 See Other /usuario/alganet

● GET /usuario/alganet

● 200 Ok

Page 44: GET /conceitos HTTP/1.1

44

Negociação de Conteúdo

● GET /usuario/alganet (Accept: text/xml)

● 303 See Other /usuario/alganet.xml

Page 45: GET /conceitos HTTP/1.1

45

Cache

● GET /usuario/alganet

● 200 Ok (ETag: 2fe450ed30acb)

● GET /usuario/alganet (If-None-Match: 2fe450ed30acb)

● 304 Not Modified

Page 46: GET /conceitos HTTP/1.1

46

Obrigado!

Page 47: GET /conceitos HTTP/1.1

47

Eu, aqui e ali.

● http://twitter.com/alganet

● http://github.com/alganet

● http://about.me/alganet

● http://gaigalas.net

[email protected]