HTTP請求報文(請求行、請求頭、請求體)
HTTP協議
1.簡介
HTTP協議(Hyper Text Transfer Protocol,超文字傳輸協議),是用於從全球資訊網(WWW:World Wide Web )伺服器傳輸超文字到本地瀏覽器的傳送協議。
HTTP基於TCP/IP通訊協議來傳遞資料。
HTTP基於客戶端/服務端(C/S)架構模型,通過一個可靠的連結來交換資訊,是一個無狀態的請求/響應協議。
2.特點
(1)HTTP是無連線:無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。
(2)HTTP是媒體獨立的:只要客戶端和伺服器知道如何處理的資料內容,任何型別的資料都可以通過HTTP傳送。客戶端以及伺服器指定使用適合的MIME-type內容型別。
(3)HTTP是無狀態:無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。
HTTP請求報文
HTTP請求報文由3部分組成(請求行+請求頭+請求體):
請求行:
①是請求方法,GET和POST是最常見的HTTP方法,除此以外還包括DELETE、HEAD、OPTIONS、PUT、TRACE。
②為請求對應的URL地址,它和報文頭的Host屬性組成完整的請求URL。
③是協議名稱及版本號。
請求頭:
④是HTTP的報文頭,報文頭包含若干個屬性,格式為“屬性名:屬性值
與快取相關的規則資訊,均包含在header中
請求體:
⑤是報文體,它將一個頁面表單中的元件值通過param1=value1¶m2=value2的鍵值對形式編碼成一個格式化串,它承載多個請求引數的資料。不但報文體可以傳遞請求引數,請求URL也可以通過類似於“/chapter15/user.html?
param1=value1¶m2=value2”的方式傳遞請求引數。
HTTP請求報文頭屬性
Accept
請求報文可通過一個“Accept”報文頭屬性告訴服務端 客戶端接受什麼型別的響應。
如下報文頭相當於告訴服務端,俺客戶端能夠接受的響應型別僅為純文字資料啊,你丫別發其它什麼圖片啊,視訊啊過來,那樣我會歇菜的~~~
Accept:text/plain
Accept屬性的值可以為一個或多個MIME型別的值(描述訊息內容型別的因特網標準,
訊息能包含文字、影象、音訊、視訊以及其他應用程式專用的資料)
cookie
客戶端的Cookie就是通過這個報文頭屬性傳給服務端的哦!如下所示:
Cookie: $Version=1; Skin=new;jsessionid=5F4771183629C9834F8382E23
服務端是怎麼知道客戶端的多個請求是隸屬於一個Session呢?注意到後臺的那個jsessionid = 5F4771183629C9834F8382E23木有?原來就是通過HTTP請求報文頭的Cookie屬性的jsessionid的值關聯起來的!(當然也可以通過重寫URL的方式將會話ID附帶在每個URL的後面哦)。
Referer表示這個請求是從哪個URL過來的,假如你通過google搜尋出一個商家的廣告頁面,你對這個廣告頁面感興趣,滑鼠一點發送一個請求報文到商家的網站,這個請求報文的Referer報文頭屬性值就是http://www.google.com。
Cache-Control
對快取進行控制,如一個請求希望響應返回的內容在客戶端要被快取一年,或不希望被快取就可以通過這個報文頭達到目的。
HTTP響應報文
HTTP的響應報文也由三部分組成(響應行+響應頭+響應體)
響應行:
①報文協議及版本;
②狀態碼及狀態描述;
響應頭:
③響應報文頭,也是由多個屬性組成;
響應體:
④響應報文體,即我們真正要的“乾貨”
響應狀態碼
和請求報文相比,響應報文多了一個“響應狀態碼”,它以“清晰明確”的語言告訴客戶端本次請求的處理結果。
HTTP的響應狀態碼由5段組成:
- 1xx 訊息,一般是告訴客戶端,請求已經收到了,正在處理,別急...
- 2xx 處理成功,一般表示:請求收悉、我明白你要的、請求已受理、已經處理完成等資訊.
- 3xx 重定向到其它地方。它讓客戶端再發起一個請求以完成整個處理。
- 4xx 處理髮生錯誤,責任在客戶端,如客戶端的請求一個不存在的資源,客戶端未被授權,禁止訪問等。
- 5xx 處理髮生錯誤,責任在服務端,如服務端丟擲異常,路由出錯,HTTP版本不支援等。
200 OK
你最希望看到的,即處理成功!
303 See Other
我把你redirect到其它的頁面,目標的URL通過響應報文頭的Location告訴你。
304 Not Modified
告訴客戶端,你請求的這個資源至你上次取得後,並沒有更改,你直接用你本地的快取吧,我很忙哦,你能不能少來煩我啊!
404 Not Found
你最不希望看到的,即找不到頁面。如你在google上找到一個頁面,點選這個連結返回404,表示這個頁面已經被網站刪除了,google那邊的記錄只是美好的回憶。
500 Internal Server Error
看到這個錯誤,你就應該查查服務端的日誌了,肯定丟擲了一堆異常,別睡了,起來改BUG去吧!
◆200 (OK): 找到了該資源,並且一切正常。
◆302/307:臨時重定向,指出請求的文件已被臨時移動到別處, 此文件的新的url在location響應頭中給出
◆304 (NOT MODIFIED): 該資源在上次請求之後沒有任何修改。這通常用於瀏覽器的快取機制。
◆401 (UNAUTHORIZED): 客戶端無權訪問該資源。這通常會使得瀏覽器要求使用者輸入使用者名稱和密碼,以登入到伺服器。
◆403 (FORBIDDEN): 客戶端未能獲得授權。這通常是在401之後輸入了不正確的使用者名稱或密碼。
◆404
(NOT FOUND): 在指定的位置不存在所申請的資源。
常見的HTTP響應報文頭屬性
Cache-Control
響應輸出到客戶端後,服務端通過該報文頭屬告訴客戶端如何控制響應內容的快取。
常見的取值有private、public、no-cache、max-age,no-store,預設為private。
private: 客戶端可以快取
public: 客戶端和代理伺服器都可快取(前端的同學,可以認為public和private是一樣的)
max-age=xxx: 快取的內容將在 xxx 秒後失效
no-cache: 需要使用對比快取來驗證快取資料
no-store: 所有內容都不會快取
預設為private,快取時間為31536000秒(365天)也就是說,在365天內再次請求這條資料,都會直接獲取快取資料庫中的資料,直接使用。
ETag
一個代表響應服務端資源(如頁面)版本的報文頭屬性,如果某個服務端資源發生變化了,這個ETag就會相應發生變化。它是Cache-Control的有益補充,可以讓客戶端“更智慧”地處理什麼時候要從服務端取資源,什麼時候可以直接從快取中返回響應。
Location
我們在JSP中讓頁面Redirect到一個某個A頁面中,其實是讓客戶端再發一個請求到A頁面,這個需要Redirect到的A頁面的URL,其實就是通過響應報文頭的Location屬性告知客戶端的,如下的報文頭屬性,將使客戶端redirect到iteye的首頁中:
Location: http://www.iteye.com
Set-Cookie服務端可以設定客戶端的Cookie,其原理就是通過這個響應報文頭屬性實現的:
Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1
cookie機制:
客戶端請求伺服器,如果伺服器需要記錄該使用者狀態,就使用response向客戶端瀏覽器頒發一個Cookie。客戶端瀏覽器會把Cookie儲存起來。當瀏覽器再請求該網站時,瀏覽器把請求的網址連同該Cookie一同提交給伺服器。伺服器檢查該Cookie,以此來辨認使用者狀態。伺服器還可以根據需要修改Cookie的內容。
Cookie的maxAge決定著Cookie的有效期,單位為秒(Second)。Cookie中通過getMaxAge()方法與setMaxAge(int maxAge)方法來讀寫maxAge屬性。
如果maxAge屬性為正數,則表示該Cookie會在maxAge秒之後自動失效。
如果maxAge為負數,則表示該Cookie僅在本瀏覽器視窗以及本視窗開啟的子視窗內有效,關閉視窗後該Cookie即失效。
如果maxAge為0,則表示刪除該Cookie。
Cookie並不提供修改、刪除操作。如果要修改某個Cookie,只需要新建一個同名的Cookie,新增到response中覆蓋原來的Cookie。
如果要刪除某個Cookie,只需要新建一個同名的Cookie,並將maxAge設定為0,並新增到response中覆蓋原來的Cookie。Cookie cookie = new Cookie("username","helloweenvsfei"); // 新建Cookie
cookie.setMaxAge(0); // 設定生命週期為0,不能為負數
response.addCookie(cookie); // 必須執行這一句
輸出到客戶端
相關推薦
HTTP請求報文(請求行、請求頭、請求體)
HTTP協議 1.簡介 HTTP協議(Hyper Text Transfer Protocol,超文字傳輸協議),是用於從全球資訊網(WWW:World Wide Web )伺服器傳輸超文字到本地瀏覽器的傳送協議。 HTTP基於TCP/IP通訊協議來傳遞資料。 HT
Http協議請求頭、響應頭、響應碼
必須 響應 coo tab ron 內部錯誤 serve 接口 body Http部分請求頭 Accept 客戶機通過這個頭,告訴服務器,它支持哪些數據類型 Accept-Charset 客戶機通過這個頭,告訴服務器,它支持的編碼 Accept-Encoding
springboot學習總結(一)外部配置(命令行參數配置、常規屬性配置、類型安全的配置之基於properties)
mapping span ppi oid res component cati void auth 學習的內容主要是汪雲飛的《Spring Boot實戰》 (一)命令行參數配置 springboot項目可以基於jar包運行,打開jar的程序可以通過下面命令行運行: java
單鏈表的建立(頭部延長、尾部延長)、插入操作、刪除操作(無頭結點的刪除、有頭結點的刪除)
這裡簡單的介紹了單向連結串列的建立,連結串列的氣泡排序法和連結串列的輸出 以下是在頭部插入時進行的操作 頭部插入示意圖如下: #include "stdafx.h" #include <stdlib.h> struct node //節點的定義 { i
Tomcat啟動慢(運行shutdown.sh的時候報錯)
startup lib running image 目的 問題解決 and clas ffffff Using CATALINA_BASE: /usr/local/tomcatUsing CATALINA_HOME: /usr/local/tomcatUsing CAT
接收客戶端在HTTP請求期間發送過來的值(HttpRequestBase/HttpRequest、HttpContextBase/HttpConext、HttpContext.Current)
實例 tro 註意 quest 內部 存儲 信息 post span 雖然基本知道Asp.Net MVC程序如何接收來自客戶端HTTP的信息,但是關於HTTP的請求流轉和數據傳遞機制有些模糊,今天就來稍作整理吧。 來看看客戶端代碼: <form action="De
(轉)關於Tomcat的點點滴滴(體系架構、處理http請求的過程、安裝和配置、目錄結構、設置壓縮和對中文文件名的支持、以及Catalina這個名字的由來……等)
https 設置 重啟 specific 調用 持久化數據 所在 original apps 轉自:http://itfish.net/article/41668.html 總結Tomcat的體系架構、處理http請求的過程、安裝和配置、目錄結構、設置壓縮和對中文文件名
[轉]ionic3項目實戰教程三(創建provider、http請求、圖文列表、滑動列表)
獲取 The cto avatar 設置 ddd ctp itl promise 本文轉自:https://blog.csdn.net/lyt_angularjs/article/details/81145468 版權聲明:本文為博主原創文章,轉載請註明出處。謝謝! ht
研究基於spring通過對http請求資料的預處理(資料加解密、校驗、日誌)(2)過攔截器篇
上文已經詳細講解了如何對request進行處理,本文主要是案例演示 spring MVC 的寫法 新增攔截器 定義一個攔截器 public class AppRequestIntercept
http協議基礎(二)請求和響應報文的構成
http協議用於客戶端和伺服器之間的通訊,請求訪問資源的一方稱為客戶端,而提供資源響應的一方稱為伺服器端。 下面就是客戶端和服務端之間簡單的通訊過程 PS:請求必須從客戶端建立通訊,服務端沒收到請求之前不會發送響應 下面先來說說請求的構成: 1)請求方法URI協議/版本 2)請求頭(
HTTP請求行、請求頭、請求體詳解
引用 學習Web開發不好好學習HTTP報文,將會“打拳不練功,到老一場空”,你花在犯迷糊上的時間比你沉下心來學習HTTP的時間肯定會多很多。 HTTP請求報文解剖 HTTP請求報文由3部分組成(請求行+請求頭+請求體): 下面是一個實際的請求報文: ①是請求方法
前端面試題之HTTP請求(包括請求的方法型別、請求與響應、get和post的區別)
經歷了一波秋招,整理了一部分面試題,也是趁這個機會再鞏固一下知識點。(本來想把所有的知識點都寫在一篇部落格中,感覺太冗長了,不如一篇一篇的整潔。) 一、HTTP請求(主要從請求的方法型別、請求訊息和響應訊息、get和post的區別這幾部分來說) 1、請求的方法:HTTP1.0定義了三種請求方
HTTP的請求報文解析 與 響應報文解析 、 HTTP請求報文中 GET 和 POST的區別 和 URL解析
一、什麼是HTTP? HTTP是超文字傳輸協議 二、HTTP特點? (1)HTTP是無狀態協議; (2)HTTP是web服務使用的協議; (3)HTTP是基於TCP協議的; (4)HTTP的通訊方式是客戶端-伺服器模式,即C/S
http 請求報文編寫 (java socket例項)
http 請求頭由三部分組成:請求行、請求頭部、請求體GET / HTTP/1.1\r\n Host: 114.55.40.20\r\nContent-Type: text/html;charset=utf8\r\nConnection: keep
HTTP協議 (2)瞭解請求報文
之前已經簡單的認識了一下HTTP協議 下面就看一下這個協議中一個重要的部分:請求 請求報文屬於HTTP報文,是從客戶端向服務端傳送的請求 請求報文由三部分組成,分別是請求行(開始行),請求頭(訊息報頭),請求正文(通常不用) GET / HTTP/1.1
http協議(請求報文及響應報文)
1.什麼是http協議? 1.http協議:(hyper text transfer protocol):超文字傳輸協議,用於web伺服器與瀏覽器之間傳輸超文字資料的協議 2.http協議基於頭tcp/ip協議 2.HTT
Jmeter使用筆記(本文偏"介面測試工具")【GET/POST的HTTP請求、請求頭、響應斷言、正則表示式提取器、CSV讀取引數、跨執行緒組傳遞變數】
一、執行一個HTTP請求自從畢業從事軟體測試行業,大多數時間都在跟各種API打交道,使用過的介面測試工具也有許多,本文記錄下各工具的使用心得,以及重點介紹我在工作中是如何使用Jmeter做測試的,都是在windows作業系統下進行。最開始使用postman,該工具的優點是可以
HTTP請求報文、響應報文
HTTP請求報文 HTTP請求報文由3部分組成(請求行+請求頭+請求體): 請求行:①是請求方法,GET和POST是最常見的HTTP方法,除此以外還包括DELETE、HEAD、OPTIONS、PUT、TRACE。②為請求對應的URL地址,它和報文頭的Host屬性組成完整的請
Angular 4.3 HttpClient (Angular訪問 REST Web 服務) 一、Http 請求示例(Get)
連結 開發工具:Visual Studio Code 在Angular 4.3中引入了新的HttpClientModule。 這個新模組可以在@ angular / common / http包中找到,並且可以完全重新實現前一個HttpModule。新的Ht
Chrome有個HTTP請求報文生成外掛叫postman,這外掛在http服務介面除錯時非常實用(Mac OS安裝方法)
mac os 安裝方法 1、開啟chrome。 2、點選頂部選單 “ 視窗-->擴充套件程式 ” 就可以 開啟 外掛視窗 。 外掛視窗列出了你已經安裝過的所有外掛 (如果你有很多外掛的話 滑動視窗到最底部) 點選 獲取更多擴充套件程式 就可以開啟 chr