Skip to content

fix: add missing Allow header on 405 responses (issue #500) - #501

Merged
viniciussanchez merged 1 commit into
HashLoad:masterfrom
regyssilveira:issue-500-allow-header
Jul 6, 2026
Merged

fix: add missing Allow header on 405 responses (issue #500)#501
viniciussanchez merged 1 commit into
HashLoad:masterfrom
regyssilveira:issue-500-allow-header

Conversation

@regyssilveira

Copy link
Copy Markdown
Contributor

Acerto issue #500

Esta Pull Request corrige a desconformidade com a especificação HTTP do protocolo RFC 9110 §15.5.6 reportada na issue #500. Quando uma rota era atingida usando um método HTTP não suportado, o Horse retornava o status 405 Method Not Allowed, mas omitia o cabeçalho obrigatório Allow contendo a lista de métodos HTTP permitidos pelo recurso.

Mudanças Realizadas

Core

  • Roteador Padrão (Horse.Core.RouterTree.NextCaller.pas):
    • Inclusão de variáveis locais compatíveis com versões antigas do Delphi (sem uso de var inline).
    • Iteração nas chaves do dicionário FCallBack.Keys ao gerar a resposta 405 para compor a lista de métodos suportados em maiúsculas (ex: GET, POST), ignorando a diretiva interna de curinga mtAny.
    • Adição do cabeçalho correspondente na resposta via FResponse.AddHeader('Allow', LAllow).
  • Roteador Radix (Horse.Core.Router.Radix.pas):
    • Implementação da mesma lógica de iteração sobre LNode.Callbacks.Keys e injeção do cabeçalho Allow no response antes da execução da pipeline finalizadora do status 405.

Testes

  • Testes de Unidade:
    • Adicionados testes de validação unitária em Tests.Horse.Core.RouterTree.pas e Tests.Horse.Core.Router.Radix.pas que simulam requisições de verbos não cadastrados e validam o retorno do cabeçalho Allow.
  • Testes de Integração:
    • Criado um teste de integração de ponta a ponta (TestMethodNotAllowedAllowHeader) na unit Tests.Integration.HttpMethods.pas usando o cliente HTTP nativo (THTTPClient), levantando o servidor real do Horse e validando as respostas.
  • Correções Adicionais:
    • Ajustada a compilação condicional em Tests.Horse.Core.Middleware.pas para isolar o teste específico do compilador FPC (TestFPCLegacyCallbackAssignment), evitando quebra de build no Delphi.

Como Testar

Todos os testes unitários e de integração foram validados e passaram com 100% de sucesso localmente.
Para testar, basta executar a suite de testes consolidada via linha de comando ou IDE:

Console.exe

@viniciussanchez
viniciussanchez merged commit fbba79e into HashLoad:master Jul 6, 2026
@regyssilveira
regyssilveira deleted the issue-500-allow-header branch July 6, 2026 23:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants