HTTP 協議是無狀態協議,怎么理解

?

HTTP 是一個屬于應用層的面向對象的協議,HTTP 協議一共有五大特點:1、支持客戶/服務器模式;2、簡單快速;3、靈活;4、無連接;5、無狀態

?

無連接

無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。

?

早期這么做的原因是 HTTP 協議產生于互聯網,因此服務器需要處理同時面向全世界數十萬、上百萬客戶端的網頁訪問,但每個客戶端(即瀏覽器)與服務器之間交換數據的間歇性較大(即傳輸具有突發性、瞬時性),并且網頁瀏覽的聯想性、發散性導致兩次傳送的數據關聯性很低,大部分通道實際上會很空閑、無端占用資源。因此 HTTP 的設計者有意利用這種特點將協議設計為請求時建連接、請求完釋放連接,以盡快將資源釋放出來服務其他客戶端

?

隨著時間的推移,網頁變得越來越復雜,里面可能嵌入了很多圖片,這時候每次訪問圖片都需要建立一次 TCP 連接就顯得很低效。后來,Keep-Alive 被提出用來解決這效率低的問題。

?

Keep-Alive 功能使客戶端到服務器端的連接持續有效,當出現對服務器的后繼請求時,Keep-Alive 功能避免了建立或者重新建立連接。市場上的大部分 Web 服務器,包括 iPlanet、IIS 和 Apache,都支持 HTTP Keep-Alive。對于提供靜態內容的網站來說,這個功能通常很有用。但是,對于負擔較重的網站來說,這里存在另外一個問題:雖然為客戶保留打開的連接有一定的好處,但它同樣影響了性能,因為在處理暫停期間,本來可以釋放的資源仍舊被占用。當Web服務器和應用服務器在同一臺機器上運行時,Keep-Alive 功能對資源利用的影響尤其突出。?

?

這樣一來,客戶端和服務器之間的 HTTP 連接就會被保持,不會斷開(超過 Keep-Alive 規定的時間,意外斷電等情況除外),當客戶端發送另外一個請求時,就使用這條已經建立的連接。

?

無狀態

無狀態是指協議對于事務處理沒有記憶能力,服務器不知道客戶端是什么狀態。即我們給服務器發送 HTTP 請求之后,服務器根據請求,會給我們發送數據過來,但是,發送完,不會記錄任何信息。

HTTP 是一個無狀態協議,這意味著每個請求都是獨立的,Keep-Alive 沒能改變這個結果。

缺少狀態意味著如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。

HTTP 協議這種特性有優點也有缺點,優點在于解放了服務器,每一次請求“點到為止”不會造成不必要連接占用,缺點在于每次請求會傳輸大量重復的內容信息。

客戶端與服務器進行動態交互的 Web 應用程序出現之后,HTTP 無狀態的特性嚴重阻礙了這些應用程序的實現,畢竟交互是需要承前啟后的,簡單的購物車程序也要知道用戶到底在之前選擇了什么商品。于是,兩種用于保持 HTTP 連接狀態的技術就應運而生了,一個是 Cookie,而另一個則是 Session。

?

Cookie可以保持登錄信息到用戶下次與服務器的會話,換句話說,下次訪問同一網站時,用戶會發現不必輸入用戶名和密碼就已經登錄了(當然,不排除用戶手工刪除Cookie)。而還有一些Cookie在用戶退出會話的時候就被刪除了,這樣可以有效保護個人隱私。

Cookies 最典型的應用是判定注冊用戶是否已經登錄網站,用戶可能會得到提示,是否在下一次進入此網站時保留用戶信息以便簡化登錄手續,這些都是 Cookies 的功用。另一個重要應用場合是“購物車”之類處理。用戶可能會在一段時間內在同一家網站的不同頁面中選擇不同的商品,這些信息都會寫入 Cookies,以便在最后付款時提取信息。

?

與 Cookie 相對的一個解決方案是 Session,它是通過服務器來保持狀態的。

當客戶端訪問服務器時,服務器根據需求設置 Session,將會話信息保存在服務器上,同時將標示 Session 的 SessionId 傳遞給客戶端瀏覽器,瀏覽器將這個 SessionId 保存在內存中,我們稱之為無過期時間的 Cookie。瀏覽器關閉后,這個 Cookie 就會被清掉,它不會存在于用戶的 Cookie 臨時文件。

以后瀏覽器每次請求都會額外加上這個參數值,服務器會根據這個 SessionId,就能取得客戶端的數據信息。

如果客戶端瀏覽器意外關閉,服務器保存的 Session 數據不是立即釋放,此時數據還會存在,只要我們知道那個 SessionId,就可以繼續通過請求獲得此 Session 的信息,因為此時后臺的 Session 還存在,當然我們可以設置一個 Session 超時時間,一旦超過規定時間沒有客戶端請求時,服務器就會清除對應 SessionId 的 Session 信息。

?

轉自:https://blog.csdn.net/tennysonsky/article/details/44562435

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450357.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450357.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450357.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

加入初創企業需要想清楚的幾個問題

摘要:加入一家初創企業是一段充滿冒險的旅程。沿途不會都是美景,更別忘了最初的夢想。 去初創公司面試,你一般會糾結于被問到什么問題。但更重要的是問自己:你下定決心在接下來的5年中“從頭再來”嗎?你能接受這份薪資…

類和對象的區別

類和對象的區別1,類是一個抽象的概念,它不存在于現實中的時間/空間里,類只是為所有的對象定義了抽象的屬性與行為。就好像“Person(人)”這個類,它雖然可以包含很多個體,但它本身不存在于現實世…

IIS服務器SSL證書安裝

在證書控制臺下載IIS版本證書,下載到本地的是一個壓縮文件,解壓后里面包含.pfx文件是證書文件,pfx_password.txt是證書文件的密碼。 友情提示: 每次下載都會產生新密碼,該密碼僅匹配本次下載的證書。如果需要更新證書文…

attempting to use incompatible return type 提示 解決

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 一、問題:方法返回類型上有紅線,提示信息:... attempting to use incompatible return type 要返回…

地圖市場三足鼎立:諾基亞官方確認與亞馬遜合作

摘要:諾基亞確認為亞馬遜新推出的平板提供地圖服務,至此地圖市場“三家分晉”的格局已趨明朗。 路透社之前曾報道稱亞馬遜在新版Kindle中將使用諾基亞提供的地圖服務。但直到今日,這則消息才得到雙方的確認。諾基亞方面確認將為亞馬遜提供地圖…

關于明晚即將發布的新款 iPad Pro,最大的亮點也許不是 Face ID

北京時間 10 月 30 日晚間 10 點,蘋果將會在美國紐約的布魯克林音樂學院舉行新品發布會。考慮到此前蘋果已經在 9 月的發布會上宣布了 Apple Watch Series 4 和 iPhone XS/Max、iPhone XR 等新品,因此蘋果此次的紐約發布會,大家的目光更多地投…

重載

編程中重載的定義:函數名相同,函數的參數列表不同(包括參數個數和參數類型),至于返回類型可同可不同。重載是可使函數、運算符等處理不同類型數據或接受不同個數的參數的一種方法,關于重載一詞在詞義上有兩種不同的說法:多態:重載…

11. Container With Most Water

題意 給定n個非負整數\(a_1,a_2,...,a_n\),其中每個數表示坐標點\((i,a_i)\),i是數組下標,\(a_i\)是對應高度.尋找兩條線,使得兩條線構成的長方形面積最大,盛水最多. Example: Input: [1,8,6,2,5,4,8,3,7] Output: 49 解 暴力破解 對每種情況進行循環,計算對應的面積,同時保存最…

如何培養編程所需要的邏輯思維?

很少有人能單單通過所謂“邏輯思維”從復雜問題快速找到抽象的,如果有這樣的人,他的經驗,工具,方法和直覺通常起到比邏輯思維更重要的作用。寫代碼需要邏輯思維,但解決復雜問題更需要理解分析,寫代碼只是解…

jws 方式表格導出,excel文件導出,rest風格接口實現

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 一、思路:從數據庫表中查出list ,封裝到 HSSFWorkook 中,再由HSSFWorkook 寫出到 File 中, 用 res…

先思再行 閉著眼睛編程

摘要:解決問題最重要的習慣不是一直盯著屏幕和編寫修改代碼,某些時候,阻止你成功的東西恰恰會是過于努力。這時候你需要暫停一下,平緩你的思緒,換一種方法或許能帶給你不一樣的效果。你會花多少時間思考如何編寫代碼&a…

javaScript復習

ES6字符串方法: //console.log(String.prototype);var str "abcdefabc";//console.log(str.includes("a"));//結果true//console.log(str.includes("abf"));//結果false//console.log(str.startsWith("d"));//false//cons…

STS的安裝教程-鵬鵬

STS全稱Spring Tools Suite。 簡介:Spring Tools Suite (STS)其實就是一個被包裝過的Eclipse,主要用于快速的開發Spring項目,我們不用再去編輯繁瑣的xml配置文件,而是由工具自動生成。STS有兩種安裝方式,一種是直接在E…

final的用法

final 根據程序上下文環境,Java關鍵字final有“這是無法改變的”或者“終態的”含義,它可以修飾非抽象類、非抽象類成員方法和變量。你可能出于兩種理解而需要阻止改變:設計或效率。 final類不能被繼承,沒有子類,f…

愛恨交織的編程語言 是什么吸引了你

摘要:每門編程語言都有自身獨特的地方,那么為什么有些語言會一直存活在我們周圍,而有些語言卻逐漸被人淡忘,是什么吸引你? 每名程序員至少知道兩門以上的編程語言,有些甚至不是所謂的編程語言(比…

Unable to parse the date: 2017-12-30 日期格式轉化失敗

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 報錯如題, 日期格式轉化失敗。 原因:參數是2017-09-23 這種格式,代碼卻是寫的轉為: &qu…

linux邏輯卷管理

2019獨角獸企業重金招聘Python工程師標準>>> 摘要: Linux用戶安裝Linux操作系統時遇到的一個最常見的難以決定的問題就是如何正確地給評估各分區大小,以分配合適的硬盤空間。而遇到出現某個分區空間耗盡時,解決的方法通常是使用符…

[LeedCode]921. 使括號有效的最少添加

題目描述: 給定一個由 ( 和 ) 括號組成的字符串 S,我們需要添加最少的括號( ( 或是 ),可以在任何位置),以使得到的括號字符串有效。從形式上講,只有滿足下面幾點之一,括號字符串才是…

abstract的一些用法

abstract(抽象)修飾符,可以修飾類和方法 1,abstract修飾類,會使這個類成為一個抽象類,這個類將不能生成對象實例,但可以做為對象變量聲明的類型,也就是編譯…

github 如何設置項目的語言顯示

github 會根據一個項目文件最多的那個種類的文件顯示為對應的語言項目 如果想讓整個項目顯示為 HTML 項目, 需要進行以下步驟的設置 1.在根目錄下創建一個文件 .gitattributescreate .gitattributes2.在 .gitattributes 內編輯以下內容: *.js linguist-languageHTML…