valyala / fasthttp

Fast HTTP package for Go. Tuned for high performance. Zero memory allocations in hot paths. Up to 10x faster than net/http
MIT License
21.95k stars 1.76k forks source link

Request loses host information after calling RequestURI method #895

Open rbretecher-fcms opened 4 years ago

rbretecher-fcms commented 4 years ago

Hello,

First, I would like to thank you for this awesome library.

I'm not sure if this is an issue but I noticed this. On the Request struct, il you call the RequestURI method, the Host method won't return anything after that.

It is really easy to reproduce :

package main

import (
    "github.com/valyala/fasthttp"
)

func main() {
    request := &fasthttp.Request{}
    request.SetRequestURI("http://example.com/test-1")

    println(string(request.Host()))
    println(string(request.RequestURI()))
    println(string(request.Host()))
}

This outpouts :

example.com
/test-1

As it should oupout in my opinion :

example.com
/test-1
example.com

For those who could experience the same issue, a workaround is to call instead :

request.URI().RequestURI()

But I would like to know if this is an issue or if this is the normal behavior. If this is the normal behavior, it should probably be documented :) Otherwise, I might be able to send you a PR to fix this if you want.

Thank you in advance for your help.

erikdubbelboer commented 4 years ago

This is indeed expected behavior. I don't like it either but we can't change it without breaking backwards compatibility. If you can make a pull request to document this behavior that would be great!

gitmko0 commented 4 years ago

Can we do a fasthttp1.1 then? to streamline all codes for consistency.

fasthttp2 will be for the https2 fasthttp3 will be for quic / http3

erikdubbelboer commented 4 years ago

fasthttp is already at 1.17. This would be something for fasthttp2 if that ever comes.