因此深入探討這個問題後。似乎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推出一些更改,因爲它們不會影響每個人...... –