College Online
0%

HTTP e a Web

Modulo 2 · Aula 1 ~25 min de leitura Nivel: Intermediario

Video da aula estara disponivel em breve

HTTP: o protocolo da Web

HTTP (HyperText Transfer Protocol) e o protocolo de camada de aplicacao que sustenta a World Wide Web. Ele define como clientes (navegadores) e servidores trocam mensagens. HTTP e um protocolo request-response: o cliente envia um request, o servidor responde.

Anatomia de um request HTTP

HTTP Request
GET /api/users/42 HTTP/1.1        <-- Linha de request (metodo, path, versao)
Host: api.example.com             <-- Header obrigatorio em HTTP/1.1
Accept: application/json          <-- Tipo de resposta aceito
Authorization: Bearer eyJ...      <-- Autenticacao
User-Agent: python-requests/2.31  <-- Identificacao do cliente
Connection: keep-alive            <-- Manter conexao TCP aberta
                                  <-- Linha em branco (separa headers do body)
                                  <-- Body (vazio em GET)

Anatomia de uma resposta HTTP

HTTP Response
HTTP/1.1 200 OK                   <-- Linha de status (versao, codigo, texto)
Content-Type: application/json    <-- Tipo do conteudo
Content-Length: 127               <-- Tamanho do body em bytes
Cache-Control: max-age=3600       <-- Politica de cache
Date: Thu, 08 May 2026 12:00:00 GMT
                                  <-- Linha em branco
{"id": 42, "name": "Marco"}      <-- Body (payload)

Metodos HTTP

Referencia
Metodo   Semantica           Idempotente?  Body?
──────   ──────────────────  ────────────  ─────
GET      Buscar recurso      Sim           Nao
POST     Criar recurso       Nao           Sim
PUT      Substituir recurso  Sim           Sim
PATCH    Atualizar parcial   Nao           Sim
DELETE   Remover recurso     Sim           Opcional
HEAD     GET sem body        Sim           Nao
OPTIONS  Capacidades         Sim           Opcional

Codigos de status

Referencia
Faixa   Significado          Exemplos
─────   ──────────────────   ────────────────────────
1xx     Informativo          100 Continue
2xx     Sucesso              200 OK, 201 Created, 204 No Content
3xx     Redirecionamento     301 Moved Permanently, 304 Not Modified
4xx     Erro do cliente      400 Bad Request, 401 Unauthorized, 404 Not Found
5xx     Erro do servidor     500 Internal Server Error, 503 Service Unavailable

Evolucao do HTTP

HTTP/1.1 (1997)

Conexoes persistentes (keep-alive), pipelining (enviar multiplos requests sem esperar resposta — pouco usado na pratica devido ao head-of-line blocking).

HTTP/2 (2015)

Framing binario, multiplexacao (multiplos requests na mesma conexao TCP sem bloquear), compressao de headers (HPACK), server push.

Diagrama
HTTP/1.1:                    HTTP/2:
  Req1 ------>                 Req1 --\
  <------ Res1                 Req2 ---+---> Multiplexado
  Req2 ------>                 Req3 --/      na mesma conexao TCP
  <------ Res2                 <--- Res2
  Req3 ------>                 <--- Res1
  <------ Res3                 <--- Res3

  (sequencial)                (paralelo, sem HOL blocking na camada HTTP)

HTTP/3 (2022)

Usa QUIC em vez de TCP. QUIC roda sobre UDP e implementa sua propria confiabilidade. Elimina o head-of-line blocking na camada de transporte. Handshake mais rapido (0-RTT em reconexoes).

REST: principios de design de APIs

REST (Representational State Transfer) nao e um protocolo — e um estilo arquitetural para APIs HTTP. Principios:

Python
import requests

# GET — buscar recurso
r = requests.get("https://api.github.com/repos/python/cpython")
print(r.status_code)            # 200
print(r.headers["content-type"]) # application/json; charset=utf-8
print(r.json()["full_name"])     # python/cpython

# POST — criar recurso (exemplo ficticio)
r = requests.post(
    "https://api.example.com/sessions",
    json={"project_slug": "build-ai", "agent": "claude"},
    headers={"Authorization": "Bearer token123"}
)
print(r.status_code)  # 201 Created

# Inspecionando headers da resposta
for key, value in r.headers.items():
    print(f"  {key}: {value}")

Servidor HTTP simples em Python

Python
from http.server import HTTPServer, BaseHTTPRequestHandler
import json

class SimpleAPI(BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == "/health":
            self.send_response(200)
            self.send_header("Content-Type", "application/json")
            self.end_headers()
            self.wfile.write(json.dumps({"status": "ok"}).encode())
        else:
            self.send_response(404)
            self.end_headers()

server = HTTPServer(("", 8080), SimpleAPI)
print("Servidor rodando em http://localhost:8080")
server.serve_forever()

No harness.os

O MCP (Model Context Protocol) usa HTTP como transporte para comunicacao remota. Quando um MCP server roda em modo remoto (nao stdio), ele expoe endpoints HTTP com Server-Sent Events (SSE) para streaming.

Diagrama
MCP Tool Call via HTTP/SSE:

Claude CLI ----HTTP POST----> MCP Server (Fly.io)
  |                              |
  | POST /mcp/v1/tools/call      | Processa tool call
  | Content-Type: application/json| Consulta Neon DB
  | {"tool": "get_knowledge",    |
  |  "args": {"domain": "build"}}|
  |                              |
  | <----SSE Stream---------     |
  | event: result                |
  | data: {"knowledge": [...]}   |
  |                              |
  | event: done                  |
  | data: {}                     |

Entender HTTP profundamente = entender como seus MCP tools
se comunicam quando deployados remotamente.
*
HTTP/2 e MCP MCP com HTTP/2 pode multiplexar multiplos tool calls na mesma conexao TCP. Isso e relevante quando o orchestrator dispara varios agentes simultaneamente — cada um faz tool calls, e todos compartilham a mesma conexao HTTP/2 ao MCP server.

Resumo

Exercicio pratico

Trace uma chamada MCP tool call pelo layer HTTP.

  1. Use curl -v para inspecionar headers de um request HTTP real
  2. Identifique: metodo, path, headers enviados, status code, headers de resposta
  3. Descreva como um MCP tool call seria representado como HTTP request (metodo, path, body)
  4. Mostre como a resposta SSE seria formatada (event stream)

Verifique seu entendimento

Qual a principal vantagem do HTTP/2 sobre o HTTP/1.1?

  • Usa UDP em vez de TCP, eliminando o handshake
  • Multiplexacao: multiplos requests/responses na mesma conexao TCP sem bloqueio
  • Criptografia obrigatoria com TLS
  • Formato de texto mais legivel que HTTP/1.1