網站首頁 編程語言 正文
1、HTTP
Hyper Text Transfer Protocol(超文本傳輸協議)。
是一種通信協議,它允許將超文本標記語言(HTML)文檔從Web服務器傳送到客戶端的瀏覽器。
在Internet中所有的傳輸都是通過TCP/IP進行的。HTTP協議作為TCP/IP模型中應用層的協議也不例外。
HTTP協議通常承載于TCP協議之上,有時也承載于TLS或SSL協議層之上,這個時候,就成了我們常說的HTTPS。HTTP默認的端口號為80,HTTPS的端口號為443。
如下圖所示:
2、http請求-響應模型
HTTP是一個應用層協議,由請求和響應構成,是一個標準的客戶端服務器模型。
HTTP協議永遠都是客戶端發起請求,服務器回送響應。這樣就限制了使用HTTP協議,無法實現在客戶端沒有發起請求的時候,服務器將消息推送給客戶端。
HTTP同時支持支持B/S及C/S模式。支持基本認證和安全認證。
3、主要特點
(1)簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯系的類型不同。由于HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。
(2)靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
(3)HTTP 0.9和1.0使用非持續連接:限制每次連接只處理一個請求,服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接。HTTP 1.1使用持續連接:不必為每個web對象創建一個新的連接,一個連接可以傳送多個對象,采用這種方式可以節省傳輸時間。
(4)無狀態:HTTP協議是無狀態協議。無狀態是指協議對于事務處理沒有記憶能力。缺少狀態意味著如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
4、工作流程
HTTP完整流程包括四部分:
(1)客戶機與服務器建立連接。
(2)客戶機發送請求給服務器。
(3)服務器接收到客戶端的請求,給予相應的響應信息。
(4)客戶端收到請求并處理。
5、http請求的組成
http請求由三部分組成:請求行,首部,請求正文。
- 請求報文格式為:請求行+首部+空行+實體組成
- 響應報文格式為:狀態行+首部+空行+實體組成
(1)請求行:
以方法開頭,以空格分開,緊隨其后的是路徑和版本(包括http請求的種類,請求資源的路徑,協議的版本號)。
格式:
Method ?Request-URL ?HTTP-Version ?CLRF
注:
-
Method
:請求方法(get,post等) -
Request-URL
:統一的資源標識符 -
HTTP-Version
:HTTP協議的版本 -
CRL
:為回車和換行(回車和換行只能出現在結尾,不能再其他地方出現)。
請求方法:
-
GET
請求服務器的文檔;POST向服務器發送信息; -
PUT
從服務器向客戶端發送文檔;DELETE為刪除web網頁; -
TRACE
為把到達的請求回送;HEAD為請求關于文檔的信息,但不是文檔本身; OPTIONS詢問關于可用的選項;
(2)請求首部
http的頭部信息,每一個用\r\n分割;
常用的首部有:
-
Connection
:允許客戶端和服務器指定與請求/響應連接有關的選項(長連接,短連接等) -
Data
:提供日期和時間標志 -
MIME-Version
:給出了發送端使用的MIME版本 -
Client-IP
:描述客戶端機器的IP -
From
:提供了客戶端用戶的E-mail地址 -
Host
:給出請求的主機名和端口號 -
Referer
:提供了包含當前請求的URL的文檔的URL -
cookie
:向服務器傳送一個令牌
(3)請求正文
為發送給服務器的查詢信息(使用get時,body是空的,get只能讀取,而post可以寫入信息);
(4)響應報文也包括請求行,請求首部,空行,實體
請求行格式為:http版本+狀態碼+短語+\r\n? 短語與狀態碼相對應
請求首部格式為:一系列首部名稱:值\r\n的組合
請求實體為:服務端真正返回的信息
狀態編碼為:
- 100-199指定客戶端響應的一些動作,請求已被服務接收 200-299表示請求被接受,處理成功?
- 300-399表示已經移動的文件,重定向,需進一步處理
- 400-499指定客戶端的錯誤,有語法錯誤無法實現 500-599指定服務端的錯誤,服務器未能實現合法的請求
6、短連接和長連接
HTTP1.1之后使用了長連接,長連接使數據傳輸完成后繼續保持TCP連接不間斷,等待相同域名繼續使用這個通道進行數據傳輸。
HTTP1.0使用首部Connection:Keep-alive進行長連接的試驗,HTTP1.1之后使用Connection:Close來告訴服務端不使用長連接。但是使用了Connection:Keep-alive這個首部并不代表采用長連接。
- 在短連接中:每一個請求/響應都需要建立一次TCP連接(三次握手),
- 長連接模式下:判斷數據接收完成的方法有 --1--服務器關閉連接;--2--首部Content-Length判斷是否傳輸完畢,指定了實體正文的長度。
7、http中的操作
HTTP/1.1協議中共定義了八種方法(有時也叫“動作”)來表明Request-URI指定的資源的不同操作方式,最基本的有4種,分別是GET,POST,PUT,DELETE對應著對這個資源的查,改,增,刪4個操作。最常見的就是GET和POST了。GET一般用于獲取/查詢資源信息,而POST一般用于更新資源信息。具體方法:
(1)GET:向特定的資源發出請求
(2)POST:向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。
(3)PUT:向指定資源位置上傳其最新內容。
(4)DELETE:請求服務器刪除Request-URI所標識的資源。
(5)HEAD:向服務器索要與GET請求相一致的響應,只不過響應體將不會被返回。這一方法可以在不必傳輸整個響應內容的情況下,就可以獲取包含在響應消息頭中的元信息。該方法常用于測試超鏈接的有效性,是否可以訪問,以及最近是否更新。
(6)TRACE:請求服務器會送收到的請求信息,主要用于測試或診斷。
(7)OPTIONS:請求查詢服務器的性能,或者查詢與資源相關的選項和需求
(8)CONNECT:HTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器。(即留為將來使用)
8、GET與POST的區別
(1)GET提交的數據會放在URL之后,以?分割URL和傳輸數據,參數之間以&相連,如EditPosts.aspx?postid=6810130&update=1 ;POST方法是把提交的數據放在HTTP包的Body中。
(2)GET提交的數據大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的數據沒有限制。
(3)GET方式需要使用Request.QueryString來取得變量的值,而POST方式通過Request.Form來獲取變量的值。
(4)GET方式提交數據,會帶來安全問題,比如一個登錄頁面,通過GET方式提交數據時,用戶名和密碼將出現在URL上,如果頁面可以被緩存或者其他人可以訪問這臺機器,就可以從歷史記錄獲得該用戶的賬號和密碼。
總結
原文鏈接:https://blog.csdn.net/King_weng/article/details/88808692
相關推薦
- 2022-07-31 C++?容器?Vector?的使用方法_C 語言
- 2022-06-10 C語言?模擬實現strcpy與strcat函數詳解_C 語言
- 2022-12-03 Android開發數據結構算法ArrayList源碼詳解_Android
- 2022-06-30 卷積神經網絡經典模型及其改進點學習匯總_python
- 2022-04-03 基于QT5實現一個時鐘桌面_C 語言
- 2022-03-22 nginx開啟gzip壓縮的完整步驟記錄_nginx
- 2022-04-30 C語言鏈表實現銷售管理系統_C 語言
- 2022-03-17 Docker容器之間的通信的方法實現_docker
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支