認知http響應頭

HTTP(HyperTextTransferProtocol)是超文本傳輸協議的縮寫,它用于傳送WWW方式的數據,關于HTTP協議的詳細內 容請參考RFC2616。HTTP協議采用了請求/響應模型。客戶端向服務器發送一個請求,請求頭包含請求的方法、URI、協議版本、以及包含請求修飾 符、客戶信息和內容的類似于MIME的消息結構。服務器以一個狀態行作為響應,相應的內容包括消息協議的版本,成功或者錯誤編碼加上包含服務器信息、實體 元信息以及可能的實體內容。?
通常HTTP消息包括客戶機向服務器的請求消息和服務器向客戶機的響應消息。這兩種類型的消息由一個起始 行,一個或者多個頭域,一個只是頭域結束的空行和可選的消息體組成。HTTP的頭域包括通用頭,請求頭,響應頭和實體頭四個部分。每個頭域由一個域名,冒 號(:)和域值三部分組成。域名是大小寫無關的,域值前可以添加任何數量的空格符,頭域可以被擴展為多行,在每行開始處,使用至少一個空格或制表符。?
通 用頭域?
通用頭域包含請求和響應消息都支持的頭域,通用頭域包含Cache-Control、 Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。對通用頭域的擴展要求通訊雙方都支持此擴 展,如果存在不支持的通用頭域,一般將會作為實體頭域處理。下面簡單介紹幾個在UPnP消息中使用的通用頭域。?
Cache- Control頭域?
Cache-Control指定請求和響應遵循的緩存機制。在請求消息或響應消息中設置 Cache-Control并不會修改另一個消息處理過程中的緩存處理過程。請求時的緩存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached,響應消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。各個消息中的指令含義如 下:?
Public指示響應可被任何緩存區緩存。?
Private指示對于單個用戶的整個或部分響應消息,不能被共享緩 存處理。這允許服務器僅僅描述當用戶的部分響應消息,此響應消息對于其他用戶的請求無效。?
no-cache指示請求或響應消息不能緩存?
no-store用于防止重要的信息被無意的發布。在請求消息中發送將使得請求和響應消息都不使用緩存。?
max- age指示客戶機可以接收生存期不大于指定時間(以秒為單位)的響應。?
min-fresh指示客戶機可以接收響應時間小于當前時間加上 指定時間的響應。?
max-stale指示客戶機可以接收超出超時期間的響應消息。如果指定max-stale消息的值,那么客戶機可以 接收超出超時期指定值之內的響應消息。?
Date頭域?
Date頭域表示消息發送的時間,時間的描述格式由rfc822定義。例 如,Date:Mon,31Dec200104:25:57GMT。Date描述的時間表示世界標準時,換算成本地時間,需要知道用戶所在的時區。?
Pragma 頭域?
Pragma頭域用來包含實現特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1協議中,它的含義和 Cache- Control:no-cache相同。?
請求消息?
請求消息的第一行為下面的格式:?
MethodSPRequest-URISPHTTP-VersionCRLFMethod 表示對于Request-URI完成的方法,這個字段是大小寫敏感的,包括OPTIONS、GET、HEAD、POST、PUT、DELETE、 TRACE。方法GET和HEAD應該被所有的通用WEB服務器支持,其他所有方法的實現是可選的。GET方法取回由Request-URI標識的信息。 HEAD方法也是取回由Request-URI標識的信息,只是可以在響應時,不返回消息體。POST方法可以請求服務器接收包含在請求中的實體信息,可 以用于提交表單,向新聞組、BBS、郵件群組和數據庫發送消息。?
SP表示空格。Request-URI遵循URI格式,在此字段為星號 (*)時,說明請求并不用于某個特定的資源地址,而是用于服務器本身。HTTP- Version表示支持的HTTP版本,例如為HTTP/1.1。CRLF表示換行回車符。請求頭域允許客戶端向服務器傳遞關于請求或者關于客戶機的附加 信息。請求頭域可能包含下列字段Accept、Accept-Charset、Accept- Encoding、Accept-Language、Authorization、From、Host、If-Modified-Since、If- Match、If-None-Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、 Proxy-Authorization、Range、Referer、User-Agent。對請求頭域的擴展要求通訊雙方都支持,如果存在不支持的請 求頭域,一般將會作為實體頭域處理。?
典型的請求消息:?
GET http://download.microtool.de:80/somedata.exe?
Host: download.microtool.de?
Accept:*/*?
Pragma: no-cache?
Cache-Control: no-cache?
Referer: http://download.microtool.de/?
User-Agent:Mozilla/4.04[en](Win95;I;Nav)?
Range:bytes=554554-?
上例第一行表示HTTP客戶端(可能是瀏覽器、下載程序)通過GET方法獲得指定 URL下的文件。棕色的部分表示請求頭域的信息,綠色的部分表示通用頭部分。?
Host頭域?
Host頭域指定請求資源的 Intenet主機和端口號,必須表示請求url的原始服務器或網關的位置。HTTP/1.1請求必須包含主機頭域,否則系統會以400狀態碼返回。?
Referer 頭域?
Referer頭域允許客戶端指定請求uri的源資源地址,這可以允許服務器生成回退鏈表,可用來登陸、優化cache等。他也允 許廢除的或錯誤的連接由于維護的目的被追蹤。如果請求的uri沒有自己的uri地址,Referer不能被發送。如果指定的是部分uri地址,則此地址應 該是一個相對地址。?
Range頭域?
Range頭域可以請求實體的一個或者多個子范圍。例如,?
表 示頭500個字節:bytes=0-499?
表示第二個500字節:bytes=500-999?
表示最后500個字 節:bytes=-500?
表示500字節以后的范圍:bytes=500-?
第一個和最后一個字 節:bytes=0-0,-1?
同時指定幾個范圍:bytes=500-600,601-999?
但是服務器可以忽略此 請求頭,如果無條件GET包含Range請求頭,響應會以狀態碼206(PartialContent)返回而不是以200 (OK)。?
User- Agent頭域?
User-Agent頭域的內容包含發出請求的用戶信息。?
響應消息?
響應消息的第一 行為下面的格式:?
HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF?
HTTP- Version表示支持的HTTP版本,例如為HTTP/1.1。Status- Code是一個三個數字的結果代碼。Reason-Phrase給Status-Code提供一個簡單的文本描述。Status-Code主要用于機器自 動識別,Reason-Phrase主要用于幫助用戶理解。Status-Code的第一個數字定義響應的類別,后兩個數字沒有分類的作用。第一個數字可 能取5個不同的值:?
1xx:信息響應類,表示接收到請求并且繼續處理?
2xx:處理成功響應類,表示動作被成功接收、 理解和接受?
3xx:重定向響應類,為了完成指定的動作,必須接受進一步處理?
4xx:客戶端錯誤,客戶請求包含語法錯 誤或者是不能正確執行?
5xx:服務端錯誤,服務器不能正確執行一個正確的請求?
響應頭域允許服務器傳遞不能放在狀態行 的附加信息,這些域主要描述服務器的信息和 Request-URI進一步的信息。響應頭域包含Age、Location、Proxy-Authenticate、Public、Retry- After、Server、Vary、Warning、WWW-Authenticate。對響應頭域的擴展要求通訊雙方都支持,如果存在不支持的響應頭 域,一般將會作為實體頭域處理。?
典型的響應消息:?
HTTP/1.0200OK?
Date:Mon,31Dec200104:25:57GMT?
Server:Apache/1.3.14(Unix)?
Content-type:text/html?
Last-modified:Tue,17Apr200106:46:28GMT?
Etag:"a030f020ac7c01:1e9f"?
Content-length:39725426?
Content-range:bytes554554-40279979/40279980?
上例第一行表示HTTP服務端響應一個GET方法。棕色的部分表示響應頭域的信息,綠色的部分表示通用頭部分,紅色的部分表示實體頭域 的信息。?
Location響應頭?
Location響應頭用于重定向接收者到一個新URI地址。?
Server 響應頭?
Server響應頭包含處理請求的原始服務器的軟件信息。此域能包含多個產品標識和注釋,產品標識一般按照重要性排序。?
實 體?
請求消息和響應消息都可以包含實體信息,實體信息一般由實體頭域和實體組成。實體頭域包含關于實體的原信息,實體頭包括Allow、 Content- Base、Content-Encoding、Content-Language、 Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、 Etag、Expires、Last-Modified、extension-header。extension-header允許客戶端定義新的實體 頭,但是這些域可能無法未接受方識別。實體可以是一個經過編碼的字節流,它的編碼方式由Content-Encoding或Content-Type定 義,它的長度由Content-Length或Content-Range定義。?
Content-Type實體頭?
Content- Type實體頭用于向接收方指示實體的介質類型,指定HEAD方法送到接收方的實體介質類型,或GET方法發送的請求介質類型 Content-Range實體頭?
Content-Range實體頭用于指定整個實體中的一部分的插入位置,他也指示了整個實體的長 度。在服務器向客戶返回一個部分響應,它必須描述響應覆蓋的范圍和整個實體長度。一般格式:?
Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth?
例如,傳送頭500個字節次字段的形式:Content-Range:bytes0- 499/1234如果一個http消息包含此節(例如,對范圍請求的響應或對一系列范圍的重疊請求),Content-Range表示傳送的范圍, Content-Length表示實際傳送的字節數。?
Last-modified實體頭?
Last-modified 實體頭指定服務器上保存內容的最后修訂時間。

??

應答頭說明
Allow服務器支持哪些請求方法(如GET、POST等)。
Content-Encoding文檔的編碼(Encode)方法。只有在解碼之后才可以得到Content-Type頭指定的內容類型。利用gzip壓縮文檔能夠顯著地減少 HTML文檔的下載時間。Java的GZIPOutputStream可以很方便地進行gzip壓縮,但只有Unix上的Netscape和 Windows上的IE 4、IE 5才支持它。因此,Servlet應該通過查看Accept-Encoding頭(即request.getHeader("Accept- Encoding"))檢查瀏覽器是否支持gzip,為支持gzip的瀏覽器返回經gzip壓縮的HTML頁面,為其他瀏覽器返回普通頁面。
Content-Length表示內容長度。只有當瀏覽器使用持久HTTP連接時才需要這個數據。如果你想要利用持久連接的優勢,可以把輸出文檔寫入 ByteArrayOutputStram,完成后查看其大小,然后把該值放入Content-Length頭,最后通過 byteArrayStream.writeTo(response.getOutputStream()發送內容。
Content-Type表示后面的文檔屬于什么MIME類型。Servlet默認為text/plain,但通常需要顯式地指定為text/html。由于經常要設置 Content-Type,因此HttpServletResponse提供了一個專用的方法setContentTyep。
Date當前的GMT時間。你可以用setDateHeader來設置這個頭以避免轉換時間格式的麻煩。
Expires應該在什么時候認為文檔已經過期,從而不再緩存它?
Last-Modified文檔的最后改動時間。客戶可以通過If-Modified-Since請求頭提供一個日期,該請求將被視為一個條件GET,只有改動時間遲于指定 時間的文檔才會返回,否則返回一個304(Not Modified)狀態。Last-Modified也可用setDateHeader方法來設置。
Location表示客戶應當到哪里去提取文檔。Location通常不是直接設置的,而是通過HttpServletResponse的 sendRedirect方法,該方法同時設置狀態代碼為302。
Refresh表示瀏覽器應該在多少時間之后刷新文檔,以秒計。除了刷新當前文檔之外,你還可以通過setHeader("Refresh", "5; URL=http://host/path")讓瀏覽器讀取指定的頁面。?
注意這種功能通常是通過設置HTML頁面HEAD區的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">實現,這是因為,自動刷新或重定向對于那些不能使用CGI或Servlet的 HTML編寫者十分重要。但是,對于Servlet來說,直接設置Refresh頭更加方便。?

注意Refresh的意義是“N秒之后刷 新本頁面或訪問指定頁面”,而不是“每隔N秒刷新本頁面或訪問指定頁面”。因此,連續刷新要求每次都發送一個Refresh頭,而發送204狀態代碼則可 以阻止瀏覽器繼續刷新,不管是使用Refresh頭還是<META HTTP-EQUIV="Refresh" ...>。?

注意 Refresh頭不屬于HTTP 1.1正式規范的一部分,而是一個擴展,但Netscape和IE都支持它。
Server服務器名字。Servlet一般不設置這個值,而是由Web服務器自己設置。
Set-Cookie設置和頁面關聯的Cookie。Servlet不應使用response.setHeader("Set-Cookie", ...),而是應使用HttpServletResponse提供的專用方法addCookie。參見下文有關Cookie設置的討論。
WWW-Authenticate客戶應該在Authorization頭中提供什么類型的授權信息?在包含401(Unauthorized)狀態行的應答中這個頭是必需的。例 如,response.setHeader("WWW-Authenticate", "BASIC realm=\"executives\"")。?
注 意Servlet一般不進行這方面的處理,而是讓Web服務器的專門機制來控制受密碼保護頁面的訪問(例如.htaccess)。

?

?

轉載于:https://www.cnblogs.com/blogyuan/p/3739639.html

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

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

相關文章

Python3的方法解析順序(MRO)

Python 2.3 的新式類的 C3 算法。它也是 Python 3 唯一支持的方式(筆者使用python3,所以就先講這種的) 一個例子: class D(object): pass class E(object): pass class F(object): pass class C(D, F): pass class B(E, D): …

WPF 用 DataTemplate 合并DataGrid列表列頭類似報表設計及行頭列頭樣式 - 學習

WPF中 DataGrid 列頭合并&#xff0c;類似于報表設計。效果圖如下↓ 1.新建一個WPF項目WpfApplication1&#xff0c;新建一個窗體DataGridTest&#xff0c;前臺代碼如下&#xff1a; <Window x:Class"WpfApplication1.DataGridTest" xmlns"http://sch…

python 中的pickle庫

序列化&#xff1a;我們把變量從內存中變成可存儲或傳輸的過程稱之為序列化&#xff0c;在Python中叫pickling&#xff0c;在其他語言中也被稱之為serialization&#xff0c;marshalling&#xff0c;flattening等等&#xff0c;都是一個意思。 序列化之后&#xff0c;就可以把…

他山之石,可以攻玉——來自亞馬遜的電商啟示錄

題記&#xff1a;“創新是我們的DNA&#xff0c;技術是我們改善客戶體驗的基礎2009 年致股東的信” 1. 從亞馬遜的成功講起 1.1 歷經8 年虧損始成正果 它是世界上所有電商的龍頭和楷模&#xff0c;是毫無爭議的行業標桿和旗幟&#xff0c;它在戰略和經營上的一舉一動都是關注的…

python數據結構-棧和隊列的實現

&#xff11;、棧&#xff08;后進先出(last in first out&#xff0c;LIFO)&#xff09; 棧是一種特殊的列表&#xff0c;棧內的元素只能通過列表的一端訪問&#xff0c;這一端稱為棧頂。棧被稱為一種后入先出&#xff08;LIFO&#xff0c;last-in-first-out&#xff09;的數…

c#只讀字段和常量的區別,以及靜態構造函數的使用 .

using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{ /// <summary> /// 功能&#xff1a;c#只讀字段和常量的區別&#xff0c;以及靜態構造函數的使用 /// </summary> class Progra…

python中的json序列化

如果我們要在不同的編程語言之間傳遞對象&#xff0c;就必須把對象序列化為標準格式&#xff0c;比如XML&#xff0c;但更好的方法是序列化為JSON&#xff0c;因為JSON表示出來就是一個字符串&#xff0c;可以被所有語言讀取&#xff0c;也可以方便地存儲到磁盤或者通過網絡傳輸…

android 中 四舍五入的method */

/* 四舍五入的method */private String format(double num) {NumberFormat formatter new DecimalFormat("0.00");String s formatter.format(num);return s;} 轉載于:https://www.cnblogs.com/hao222/p/3485204.html

Jar 打包 EXE文件,可以脫離java環境運行 Jsmooth的使用

1、首先準備我們的資源&#xff0c;把要轉換的Jar文件、精簡過的JRE文件夾和想生成的EXE文件的圖標&#xff08;可以是png&#xff0c;jpg等格式&#xff0c;不想加圖標可以不弄&#xff09;放到同一個文件夾內。這一步一定要做&#xff0c;否則可以成功生成&#xff0c;但在沒…

linux中的fork方法(python)

前言&#xff1a; Unix/Linux操作系統提供了一個fork()系統調用&#xff0c;它非常特殊。普通的函數調用&#xff0c;調用一次&#xff0c;返回一次&#xff0c;但是fork()調用一次&#xff0c;返回兩次&#xff0c;因為操作系統自動把當前進程&#xff08;稱為父進程&#xf…

PowerDesigner的文章

來自iteye的PowerDesigner的相關文章&#xff0c;寫的不錯&#xff0c;這里引用一下 PD12 建模工具的使用 博客分類&#xff1a; PowerDesigner.nethttp://jpkc.zjbti.net.cn/sjkjs/uploadfile/2007514153222522.swf2010-01-12 00:34 瀏覽 352 評論(0) 分類:數據庫從PowerDesi…

并發(concurrency)和并行(parallellism)

并發&#xff08;concurrency&#xff09;和并行&#xff08;parallellism&#xff09;是&#xff1a; 解釋一&#xff1a;并行是指兩個或者多個事件在同一時刻發生&#xff1b;而并發是指兩個或多個事件在同一時間間隔發生。

大公司開源共享

Google開源:https://developers.google.com/open-source/projectsFacebook開源:https://github.com/facebook阿里巴巴開源:https://github.com/alibabaIntel開源:https://01.org/http://software.intel.com/zh-cn/ossApple開源:http://www.apple.com/opensource/http://www.ope…

進程間通信(python)

Process之間肯定是需要通信的&#xff0c;操作系統提供了很多機制來實現進程間的通信。Python的multiprocessing模塊包裝了底層的機制&#xff0c;提供了Queue、Pipes等多種方式來交換數據。 一、我們以Queue為例&#xff0c;在父進程中創建兩個子進程&#xff0c;一個往Queue…

80x86 CPU 的工作模式

8086/8088微處理器只有一種工作模式&#xff1a;實地址模式。 32為的80x86微處理器有3種工作模式&#xff1a;實地址模式、保護模式和虛擬8086模式。 實地址模式 對于8086/8088微處理器&#xff0c;實模式是它的唯一工作方式&#xff0c;對于80386以上的處理器來說&#xff0c;…

Python定時任務調度——APScheduler

參考&#xff1a; &#xff08;1&#xff09;https://www.cnblogs.com/luxiaojun/p/6567132.html &#xff08;2&#xff09;https://blog.csdn.net/u010376788/article/details/75726182

Ajax 模糊查詢的簡單實現

類似于百度的搜索引擎模糊查詢功能&#xff0c;不過百度的模糊查詢功能更強大&#xff0c;這里簡單實現下. 要實現模糊查詢&#xff0c;首先要做的就是把SQL寫好。話不多少&#xff0c;直接貼代碼了! JSP頁面&#xff1a; <% page language"java" import"jav…

OpenStack組件

OpenStack的架構及組件&#xff08;Havana&#xff09; 服務項目名描述控制臺Horizon用戶通過該服務與OpenStack的各服務進行交互&#xff0c;如啟動虛機實例、分配IP地址、設置訪問控制等&#xff1b;計算Nova按需分派并管理虛機&#xff1b;網絡Neutron通常是計算服務通過該服…

python 計算數字 k 在 0 到 n 中的出現的次數,k 可能是 0~9 的一個值

3. 統計數字 中文English 計算數字 k 在 0 到 n 中的出現的次數&#xff0c;k 可能是 0~9 的一個值。 Example 樣例 1&#xff1a; 輸入&#xff1a; k 1, n 1 輸出&#xff1a; 1 解釋&#xff1a; 在 [0, 1] 中&#xff0c;我們發現 1 出現了 1 次 (1)。樣例 2&#x…

[轉]Design Pattern Interview Questions - Part 2

Interpeter , Iterator , Mediator , Memento and Observer design patterns.(I) what is Interpreter pattern?(B) Can you explain iterator pattern?(A) Can you explain mediator pattern?(I) Can you explain memento pattern?(B) Can you explain observer pattern?…