弹性beanstalk上的Golang app似乎正在接收双重编码请求

时间:2016-09-02 22:52:50

标签: amazon-web-services nginx go

我在Golang应用程序中使用gorilla/mux来检索路由中的变量,如下所示:

func main() {
  router := mux.NewRouter()
  router.HandleFunc("/items/{name}", itemHandler)
  log.Fatal(http.ListenAndServe(":5000", router)
}

func itemHandler(w http.ResponsWriter, r *http.Request) {
  name := mux.Vars(r)["name"]
  fmt.Println("name is: ", name)
}

如果我导航到本地VM上的/items/super%20duper,则控制台输出为name is: super duper,正如我所料。但是当我在我们的Elastic Beanstalk实例上运行它并转到相同的URL时,控制台输出为name is: super%20duper

我们尝试更改nginx配置中的proxy_pass条目,可能nginx没有完全按照收到的方式传递请求URI,但这没有任何效果。

如果其他人看到同样的问题,我很想知道你是如何解决它的。

1 个答案:

答案 0 :(得分:2)

您可以使用" net / url"中的func QueryUnescape(s string) (string, error)包:

QueryUnescape

  

QueryUnescape执行QueryEscape的逆变换,   将%AB转换为字节0xAB和' +'进入' ' (空间)。它回来了   如果任何%后面没有两个十六进制数字,则会出错。

package main

import (
    "fmt"
    "net/url"
)

func main() {
    s, err := url.QueryUnescape("super%20duper")
    if err != nil {
        panic(err)
    }
    fmt.Println(s) // super duper
}

输出:

super duper