#1081·hertz

[FR] Handle uri directly instead of redirecting

Author: wsrerCreated Mar 26, 2024Updated Mar 28, 2024

Is your feature request related to a problem? Please describe.

[#818](https://github.com/cloudwego/hertz/issues/818) related In some case, redirection may result in failure to obtain the correct response.

go
package main

import (
	"context"
	"net/http"

	"github.com/cloudwego/hertz/pkg/app"
	"github.com/cloudwego/hertz/pkg/app/server"
)

func main() {
	h := server.Default(
		server.WithMaxRequestBodySize(8<<20),
		server.WithHostPorts("0.0.0.0:8080"),
	)
	s3 := h.Group("s3")
	{

		s3.GET("/:xxx/", func(ctx context.Context, c *app.RequestContext) {
			c.XML(http.StatusOK, "/xxx")
		})
		s3.GET("/:xxx/:ccc/*key", func(ctx context.Context, c *app.RequestContext) {
			xxx := c.Param("xxx")
			ccc := c.Param("ccc")
			key := c.Param("key")
			c.XML(http.StatusOK, xxx+ccc+key)
		})
		s3.PUT("/:xxx/:ccc/*key", func(ctx context.Context, c *app.RequestContext) {
			c.XML(http.StatusOK, "ok")
		})
	}

	h.Spin()
}

image

Describe the solution you'd like

Please directly let the redirect target's handler handle this uri Just like fiber does image

go
package main

import (
	"github.com/gofiber/fiber/v2"
	"net/http"
)

func main() {
	app := fiber.New()
	s3 := app.Group("/s3")
	{
		s3.Get("/:xxx/", func(c *fiber.Ctx) error {
			return c.Status(http.StatusOK).SendString("/xxx")
		})
		s3.Get("/:xxx/:ccc/*", func(c *fiber.Ctx) error {
			xxx := c.Params("xxx")
			ccc := c.Params("ccc")
			key := c.Params("*")
			return c.Status(http.StatusOK).SendString(xxx + ccc + key)
		})
		s3.Put("/:xxx/:ccc/*", func(c *fiber.Ctx) error {
			return c.SendStatus(http.StatusOK)
		})
	}

	app.Listen(":8080")
}

Describe alternatives you've considered

A clear and concise description of any alternative solutions or features you've considered.

Additional context

Add any other context or screenshots about the feature request here.