DAW - HTTP

DAW - Desenvolvimento de Aplicações Web

HTTP: 10/Março/2015

HTTP

This protocol is at the center of what drives websites and Web APIs.

Arquitectura da Web

  • Recurso e URI (identification)
  • Representação e media-type (formats)
  • HTTP (interaction)

Media-Type

Registo IANA contém lista de media-types standard

  • application/json
  • application/xml
  • text/vcard
  • text/html
  • application/hal+json

Media-Type

Formato geral

			top-level type name / [ tree. ] subtype name [ +suffix ] [ ; parameters ]
		

Exemplo: application/vnd.github.v3+json

Modelo de Interação

  • Pedido / Reposta
  • Stateless

Pedido

Resposta

Intermediários HTTP

  • proxy
  • gateway
  • tunnel

Métodos HTTP

Interface standard de acesso a recursos

  • GET
  • HEAD
  • POST
  • PUT
  • DELETE
  • OPTIONS
  • PATCH e TRACE

Pedidos condicionais

É possível clientes HTTP fazerem pedidos condicionais, usando headers

  • If-Match e If-NoneMatch: baseados num representante da representação
  • If-ModifiedSince: baseado no tempo

Propriedades dos métodos HTTP

Os métodos HTTP podem ter as seguintes caracteristicas

  • Safe: Não gera side-effects. Não altera o estado (funcional) do sistema
  • Idempotent: Fazer um pedido gera o mesmo efeito que fazer vários
  • Cachable: É possível receber uma versão cached

Propriedades dos métodos HTTP

Headers HTTP

São divididos em quatro tipos

  • Mensagem - aplicado ao pedido e reposta
  • Pedido - aplicados apenas ao pedido
  • Resposta - aplicados apenas à resposta
  • Representação - aplicado ao conteúdo

Headers Mensagem

  • Relação com intermediários: Cache-Control, Pragma, Via
  • Relacionados com a mensagem: Transfer-Encoding, Trailer
  • Relacionados com o pedido: Connection, Upgrade, Date

Headers Pedido

  • Sobre o pedido: Host, Range
  • Sobre authenticação: Authentication
  • Para negociação de representações: Accept, Accept-Language, Accept-Encoding
  • Para pedidos condicionais: If-Match, If-ModifiedSince

Headers Resposta

  • Dados de controlo: Age, Location
  • Sobre a representação selecionada: ETag, Last-Modified, Vary
  • Sobre autenticação: WWW-Authenticate

Headers Representação

  • Sobre o conteúdo: Content-Type, Content-Length, Content-Encoding
  • Sobre o tempo de vida: Expires

HTTP Status Codes

  • 1xx: recebido e o processamento vai continuar
  • 2xx: aceite, recebido e compreendido
  • 3xx: é necessário uma acção adicional para terminar o pedido
  • 4xx: pedido inválido, não é possível continuar
  • 5xx: o servidor não conseguiu completar o pedido com sucesso

Caching

  • Mecanismo para controlo do tempo de vida de representações
  • Suporta a adição, acesso e remoção de respostas HTTP de uma origem em intermediários
  • Dois conceitos base
    • Expiration: como indicar o tempo de vida da representação
    • Vaidation: como validar o tempo de vida

Caching (exemplo)

			HTTP/1.1 200 OK
			Cache-Control: must-revalidate, max-age=3600
			Content-Type: application/json; charset=utf-8
			Last-Modified: Wed, 26 Dec 2012 22:05:15 GMT
			Date: Thu, 27 Dec 2012 01:05:15 GMT
			Content-Length: 183
		

Caching (invalidação)

  • A cache de um intermediário deve ser invalidada se este:
    • observar um pedido unsafe para um recurso que tem guardado
    • observar uma resposta, sem erro, com header Location ou Content-Location de um recurso guardado

Caching (ETag)

  • Uma ETag é um validador opaco de uma representação
  • É usada pelos cliente para realizar pedidos condicionais (If-Match)
  • Se a representação de um recurso mudar, este valor também deve mudar

Caching (no-cache)

Quando, genericamente, fazemos Ctrl-F5 num browser é realizado um pedido HTTP usando o header Cache-Control: no-cache para indicar que não pretendemos conteúdo cached.

Caching (HTTP Status 304)

As respostas servidas da cache (proxy, cache do servidor) geram resposta HTTP 304 Not Modified.

Autenticação

  • O HTTP fornece mecanismo, extensível, para protecção de recursos
  • Os conjunto de recursos protegidos são agrupado em realms
  • O servidor HTTP responde com os seguintes código de estado
    • 401 Unauthorized: quando o cliente não está autorizado
      • anónimo acede a recurso privado
    • 403 Forbidden: quando o cliente está proibido
      • autenticado mas acesso proibido

Autenticação (esquemas)

  • O RFC 2617 define dois mecanismos de autenticação
    • Basic: credenciaos (utilizador e password) enviados em base64
    • Digest: credenciais enviadas em claro (não costuma ser usado)

Autenticação (exemplo 1/2)

Pedido

			GET /some/private/resource HTTP/1.1
			...
		

Resposta (indica ser necessário autenticação)

			HTTP/1.1 401 Unauthorized
			WWW-Authenticate: Basic realm="some realm"
			...
		

Autenticação (exemplo 2/2)

Pedido

			GET /some/private/resource HTTP/1.1
			Authorization Basic QwxpAZ125EFAedc134
			...
		

Resposta

			HTTP/1.1 200 OK
			...
		

Autenticação

HTTP Headers relacionados

  • WWW-Authenticate: usado nas resposta para indicar que é necessário autenticação, e o mecanismo suportado.
  • Authorization: usado nos pedidos para enviar informação de autorização.

Autenticação

Tipos de autenticação normalmente usados:

  • Basic
  • Oauth 2.0
  • Hawk

Referências