http協議版本和java傳回值討論

來源:互聯網
上載者:User

標籤:tcp   show   chunk   產生   調用   ret   持久化   return   provision   

先來看看http協議1.0和1.1的區別:

1.0:HTTP 1.0規定瀏覽器與伺服器只保持短暫的串連,瀏覽器的每次請求都需要與伺服器建立一個TCP串連,伺服器完成請求處理後立即斷開TCP串連,伺服器不跟蹤每個客戶也不記錄過去的請求:

1.1:HTTP 1.1支援持久串連,在一個TCP串連上可以傳送多個HTTP請求和響應,減少了建立和關閉串連的消耗和延遲。

再看看java裡面return的作用:

return語句主要有兩個用途:一方面用來表示一個方法返回的值(假定沒有void傳回值),另一方面是指它導致該方法退出,並返回那個值。

問題:

在開發過程中,本地測試全部通過,但是發布到線上,發現直接用postman能訪問請求且能拿到值(待定),但是在nginx代理後,用網域名稱訪問就報錯,錯誤為provisional headers are shown,開始覺得nginx代理有問題,

但是查到最後發現,postman發送get請求沒有問題,但是post就有問題;找到代碼發現所有的post傳回值是void。但是這個應該不影響啊。於是乎,把所有請求為void的該為string,發現好了!!!!!

過程:

在解決問題中,發現在發送post的過程有兩個標誌位

1、是transfer-encoding的值為chunked,來解釋下含義:有時候服務產生HTTP回應是無法確定訊息大小的,比如大檔案的下載,或者後台需要複雜的邏輯才能全部處理頁面的請求,這時用需要即時產生訊息長度,伺服器一般使用chunked編碼。在進行Chunked編碼傳輸時,在回複訊息的Headers有transfer-encoding域值為chunked,表示將用chunked編碼傳輸內容。

2、Content-Length 代表請求的內容長度

總結:

http協議在1.1情況下,是持久化連結,但是我們程式中的post是用的傳回值是void,請求就會一直等待後台給一個返回標誌位,但是後台在執行方法後就結束了。(預設會調用return方法,架構為什麼不掉用?)所以請求會報provisional headers are shown這個錯誤。當你加上return的時候,就不會報錯。

解決辦法:1)方法傳回值加上return,標誌結束。2)修改方法返回header,3)改變nginx裡面的http請求版本。

 

http協議版本和java傳回值討論

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.