簡體   English   中英

在 angularjs 中訪問自定義 http 響應標頭

[英]Accessing custom http response headers in angularjs

來自服務器的響應

我正在嘗試訪問標題“錯誤詳細信息”,正如您在瀏覽器網絡檢查器(上面的鏈接)中看到的那樣,標題被返回。 在服務器方面,我還將自定義標頭添加到“Access-Control-Expose-Headers”以允許跨域請求,因為這被建議用於解決其他問題。

下面是對服務器的請求以及成功/錯誤回調。

this.signon = function (request, onComplete, onError) {
    console.log("Calling server with 'login' request...");

    return $http.post("http://localhost:8080/markit-war/services/rest/UserService/login/", request)
        .then(onComplete, onError);
};

var onLookupComplete = function(response) {
    if (response.data.username)
    {
        //If user is returned, redirect to the dashboard.
        $location.path('/dashboard');
    }

    $scope.username = response.data.username;
};

var onError = function(response) {
    $scope.error = "Ooops, something went wrong..";
    console.log('error-detail: ' + response.headers('error-detail'));
};

當我嘗試訪問響應標頭時,如下所示:

    console.log(response.headers());
    console.log('error-detail: ' + response.headers('error-detail'));

這只輸出: content-type: "application/json" error-detail: null

是否有錯誤詳細信息標頭未映射到響應對象的原因?

我認為你在正確的軌道上。 要訪問自定義標頭,您的服務器需要設置這個特殊的Access-Control-Expose-Headers標頭,否則您的瀏覽器將只允許訪問Mozilla 文檔中列出的 6 個預定義標頭值。

在您的屏幕截圖中,響應中不存在此類標題。 您應該查看后端,以便此 cors 標頭也出現在響應中。

這是一個CORS問題。 因為這是一個跨域請求,瀏覽器隱藏了大部分標頭。 服務器需要在其響應中包含Access-Control-Expose-Headers標頭。

Access-Control-Expose-Headers 1響應標頭通過列出它們的名稱來指示哪些標頭可以作為響應的一部分公開。

默認情況下,只公開 6 個簡單的響應頭:

  • 緩存控制
  • 內容語言
  • 內容類型
  • 過期
  • 最后修改
  • 編譯指示

如果您希望客戶端能夠訪問其他標頭,則必須使用Access-Control-Expose-Headers標頭列出它們。

有關更多信息,請參閱MDN HTTP 標頭 -- Access-Control-Expose-Headers

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM