因此深入探讨这个问题后。似乎linkedin现在正在从他们的api返回http 2.0响应。
我通过编写一个我在本地机器上运行的小程序,并在服务器代码所在的aws实例上发现了这个问题。
package main
import (
"fmt"
"io/ioutil"
"net/http"
"net/http/httputil"
"net/url"
)
const (
bearerToken string = "AQVJampuUSuvWs5beuCvHiJYC--"
)
func main() {
userEndpoint := "//api.linkedin.com/v1/people/~:(id,first- name,last-name,headline,location:(name),picture-url,email-address)?format=json"
client := &http.Client{}
req, err := http.NewRequest("GET", "", nil)
req.URL = &url.URL{
Scheme: "https",
Host: "api.linkedin.com",
Opaque: userEndpoint,
}
req.Header.Set("Authorization", "Bearer "+bearerToken)
resp, err := client.Do(req)
request, _ := httputil.DumpRequest(req, true)
fmt.Println("request:", string(request))
data, _ := ioutil.ReadAll(resp.Body)
response, _ := httputil.DumpResponse(resp, false)
resp.Body.Close()
fmt.Println("response:", string(response))
fmt.Println(err, req.URL.String(), string(data))
}
在我的本地机器上运行此项时,api返回了包含配置文件数据的响应。当我跑它在AWS实例它返回404使用HTTP 2.0接头
这里是关于AWS运行此程序
请求的输出的摘录:GET https://api.linkedin.com/v1/people/~?format=json HTTP/1.1 主机:API。 linkedin.com 授权:承载AQVJampuUSuvWs5beu--
响应:HTTP/2.0 404未找到 内容长度:5530 缓存控制:无店内 内容语言:zh 内容类型:文本/ HTML 日期:2017年2月18日(星期六)03:45:21 G MT X-锂流行:PROD-lva1-H2
<!-- EF of static content included-->
<html>
<head>
<title>404: Not Found</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<style type="text/css">
/* GLOBAL */
现在,如果这是一个错误的或预期的行为,但现在看来,如果走的是拿起导致LinkedIn正在返回的HTTP 2.0的回答,我不知道404.
他们的方式,我能够解决它是关闭http 2.0客户端支持自己。通过设置以下环境变量
GODEBUG = http2client = 0
在该点处,LinkedIn API返回简档信息。
我很想知道这是一个与linkedin或去的错误。希望LinkedIn的某人能加入进来。
最近看到同样的问题 - 是零星的,现在失败的所有服务器实例。但是,仍然在本地计算机上工作,这表明他们正在通过Load Balancer/DNS推出一些更改,因为它们不会影响每个人...... –