shenyi
管理员
管理员
  • UID1
  • 粉丝45
  • 关注0
  • 发帖数900
阅读:3198回复:0

小知识点:关于go在http请求时设置Host头的小坑

楼主#
更多 发布于:2020-08-05 01:37

    本问题来自于网友的提交。我们在进行Http 请求时,有时候会需要设置一些请求头,也许会写如下代码
  
         url:="xxxx"
         req,err:=http.NewRequest("GET",url,nil)
         if err!=nil{
                 ......
         }

       req.Header.Set("Content-Type", "application/json")
         req.Header.Set("Host","xxxx") //注意这里
        client := &http.Client{Transport:tr}
         rsp,err:=client.Do(req)
         后面略




   这里面如果是  其他头,可能没啥问题。但是Host这个头有点小例外

   上面这个代码,Host设置了没有用呀,没有用


    原因在于:老外认为Host这个安全级别这么销魂的属性,不应该让我们韭菜随随便便通过Header.Set来设置,而是应该通过Url来获取。

    但是我们有时候 就是要设置,老外:不,你不需要。

    我们:劳资就需要

    老外:那么设置,request.Host值吧。。。。。。。。

    于是上面的代码 应该改成

      req.Host="xxxxx"




  ----------------------------------------

   如果你用的是fasthttp,那么设置的时候要这样

 req:=fasthttp.AcquireRequest()
         defer fasthttp.ReleaseRequest(req)

         req.Header.SetMethod("xxxxx")
         req.SetRequestURI(url)
         req.SetHost("xxxxx") //这一步要写在SetRequestURI 方法后面
会讲故事的程序员
游客

返回顶部