1. 程式人生 > >IIS中http頭的作用

IIS中http頭的作用



IIShttp頭的作用

IIS中有一個叫主機頭的概念,我們基本都已經掌握,還有一個叫HTTP的概念,有的同學已經問我這個問題,其實HTTP更多的涉及到軟體上的東東。 最直觀的HTTP就是當我們在FROTPAGEDREAMWEAVER中每次新建一個HTML頁面後,在這個頁面的程式碼都會有這樣一行程式碼: 其實這就是一個HTTP資訊,HTML頁面開頭都會有類似的這樣一行程式碼。 IIS除錯中http那麼到底是麼是HTTP呢?HTTP分為HTTP請求頭和HTTP應答頭。HTTP請求頭為HTTP客戶在瀏覽伺服器上的主頁時,向伺服器傳送請求的時候必須指明請求型別。請求型別是指HTTP-GET

HTTP-POST,每個HTTP-GETHTTP-POST都由一系列HTTP請求頭組成,這些請求頭定義了客戶端從伺服器請求了什麼,而響應則是由一系列HTTP應答頭和應答資料組成,如果請求成功則返回應答。 我的理解:每次客戶端通過IE向伺服器請求訪問一個頁面時總是使用HTTP的請求頭髮送GET型別或POST型別的HTTP請求頭.伺服器在傳送應答時,傳送的是HTTP應答請求。請求頭和應答具體有哪些標識,我們不詳細講了,自己看以下內容: HTTP請求頭概述 (HttpServletRequest) HTTP客戶程式(例如瀏覽器),向伺服器傳送請求的時候必須指明請求型別(一般是GET或者POST)。如有必要,客戶程式還可以選擇傳送其他的請求頭。大多數請求頭並不是必需的,但
Content-Length除外。對於POST請求來說Content-Length必須出現。 
下面是一些最常見的請求頭 Accept:瀏覽器可接受的MIME型別。 Accept-Charset:瀏覽器可接受的字符集。 Accept-Encoding:瀏覽器能夠進行解碼的資料編碼方式,比如gzipServlet能夠向支援gzip的瀏覽器返回經gzip編碼的HTML頁面。許多情形下這可以減少510倍的下載時間。 Accept-Language:瀏覽器所希望的語言種類,當伺服器能夠提供一種以上的語言版本時要用到。 Authorization:授權資訊,通常出現在對伺服器傳送的WWW-Authenticate
頭的應答中。 
Connection:表示是否需要持久連線。如果Servlet看到這裡的值為“Keep-Alive”,或者看到請求使用的是HTTP 1.1HTTP 1.1預設進行持久連線),它就可以利用持久連線的優點,當頁面包含多個元素時(例如Applet,圖片),顯著地減少下載所需要的時間。要實現這一點,Servlet需要在應答中傳送一個Content-Length頭,最簡單的實現方法是:先把內容寫入ByteArrayOutputStream,然後在正式寫出內容之前計算它的大小。 Content-Length:表示請求訊息正文的長度。 Cookie:這是最重要的請求頭資訊之一 From:請求傳送者的email地址,由一些特殊的Web客戶程式使用,瀏覽器不會用到它。 Host:初始URL中的主機和埠。 If-Modified-Since:只有當所請求的內容在指定的日期之後又經過修改才返回它,否則返回304“Not Modified”應答。 Pragma:指定“no-cache”值表示伺服器必須返回一個重新整理後的文件,即使它是代理伺服器而且已經有了頁面的本地拷貝。 Referer:包含一個URL,使用者從該URL代表的頁面出發訪問當前請求的頁面。 User-Agent:瀏覽器型別,如果Servlet返回的內容與瀏覽器型別有關則該值非常有用。 UA-PixelsUA-ColorUA-OSUA-CPU:由某些版本的IE瀏覽器所傳送的非標準的請求頭,表示螢幕大小、顏色深度、作業系統和CPU型別。 有關HTTP完整、詳細的說明,請參見http://www.w3.org/Protocols/HTTP規範。HTTP響應頭概述(HttpServletResponse) Web伺服器的HTTP應答一般由以下幾項構成:一個狀態行,一個或多個響應頭,一個空行,內容文件。設定HTTP應答頭往往和設定狀態行中的狀態程式碼結合起來。例如,有好幾個表示文件位置已經改變的狀態程式碼都伴隨著一個Location頭,而401Unauthorized)狀態程式碼則必須伴隨一個WWW-Authenticate頭。 然而,即使在沒有設定特殊含義的狀態程式碼時,指定應答頭也是很有用的。應答頭可以用來完成:設定Cookie,指定修改日期,指示瀏覽器按照指定的間隔重新整理頁面,宣告文件的長度以便利用持久HTTP連線,……等等許多其他任務。 設定應答頭最常用的方法是HttpServletResponsesetHeader,該方法有兩個引數,分別表示應答頭的名字和值。和設定狀態程式碼相似,設定應答頭應該在傳送任何文件內容之前進行。 setDateHeader方法和setIntHeadr方法專門用來設定包含日期和整數值的應答頭,前者避免了把Java時間轉換為GMT時間字串的麻煩,後者則避免了把整數轉換為字串的麻煩。 HttpServletResponse還提供了許多設定 setContentType:設定Content-Type頭。大多數Servlet都要用到這個方法。 setContentLength:設定Content-Length頭。對於支援持久HTTP連線的瀏覽器來說,這個函式是很有用的。 addCookie:設定一個CookieServlet API中沒有setCookie方法,因為應答往往包含多個Set-Cookie頭)。 另外,如上節介紹,sendRedirect方法設定狀態程式碼302時也會設定Location頭。 有關HTTP詳細和完整的說明,請參見http://www.w3.org/Protocols/規範。 HTTP應答頭 說明 Allow 伺服器支援哪些請求方法(如GETPOST等)。 Content-Encoding 文件的編碼(Encode)方法。只有在解碼之後才可以得到Content-Type頭指定的內容型別。利用gzip壓縮文件能夠顯著地減少HTML文件的下載時間。JavaGZIPOutputStream可以很方便地進行gzip壓縮,但只有Unix上的NetscapeWindows上的IE 4IE 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,只有改動時間遲於指定時間的文件才會返回,否則返回一個304Not Modified)狀態。Last-Modified也可用setDateHeader方法來設定。 Location 表示客戶應當到哪裡去提取文件。Location通常不是直接設定的,而是通過HttpServletResponsesendRedirect方法,該方法同時設定狀態程式碼為302。 Refresh 表示瀏覽器應該在多少時間之後重新整理文件,以秒計。除了重新整理當前文件之外,你還可以通過setHeader("Refresh", "5; URL=http://host/path")讓瀏覽器讀取指定的頁面。注意這種功能通常是通過設定HTML頁面HEAD區的實現,這是因為,自動重新整理或重定向對於那些不能使用CGIServletHTML編寫者十分重要。但是,對於Servlet來說,直接設定Refresh頭更加方便。注意Refresh的意義是“N秒之後重新整理本頁面或訪問指定頁面,而不是每隔N秒重新整理本頁面或訪問指定頁面。因此,連續重新整理要求每次都發送一個Refresh頭,而傳送204狀態程式碼則可以阻止瀏覽器繼續重新整理,不管是使用Refresh頭還是。注意Refresh頭不屬於HTTP 1.1正式規範的一部分,而是一個擴充套件,但NetscapeIE都支援它。 Server 伺服器名字。Servlet一般不設定這個值,而是由Web伺服器自己設定。 Set-Cookie 設定和頁面關聯的CookieServlet不應使用response.setHeader("Set-Cookie", ...),而是應使用HttpServletResponse提供的專用方法addCookie。參見下文有關Cookie設定的討論。 WWW-Authenticate 客戶應該在Authorization頭中提供什麼型別的授權資訊?在包含401Unauthorized)狀態行的應答中這個頭是必需的。例如,response.setHeader("WWW-Authenticate", "BASIC realm=\"executives\"")。注意Servlet一般不進行這方面的處理,而是讓Web伺服器的專門機制來控制受密碼保護頁面的訪問(例如.htaccess)。

5.3 例項:輸出所有的請求頭 

   下面的Servlet例項把所有接收到的請求頭和它的值以表格的形式輸出。另外,該Servlet還會輸出主請求命令的三個部分:請求方法,URI,協議/版本。 

   ShowRequestHeaders.java 
package hall;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

public class ShowRequestHeaders extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "顯示所有請求頭";
out.println(ServletUtilities.headWithTitle(title) +
"<BODY BGCOLOR=\"#FDF5E6\">\n" +
"<H1 ALIGN=CENTER>" + title + "</H1>\n" +
"<B>Request Method: </B>" +
request.getMethod() + "<BR>\n" +
"<B>Request URI: </B>" +
request.getRequestURI() + "<BR>\n" +
"<B>Request Protocol: </B>" +
request.getProtocol() + "<BR><BR>\n" +
"<TABLE BORDER=1 ALIGN=CENTER>\n" +
"<TR BGCOLOR=\"#FFAD00\">\n" +
"<TH>Header Name<TH>Header Value");
Enumeration headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String headerName = (String)headerNames.nextElement();
out.println("<TR><TD>" + headerName);
out.println(" <TD>" + request.getHeader(headerName));
}
out.println("</TABLE>\n</BODY></HTML>");
}

public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}




相關推薦

IIShttp作用

IIS中http頭的作用 在IIS中有一個叫主機頭的概念,我們基本都已經掌握,還有一個叫HTTP頭的概念,有的同學已經問我這個問題,其實HTTP頭更多的涉及到軟體上的東東。 最直觀的HTTP頭就是當我們在FROTPAGE或DREAMWEAVER中每次新建一個HTML頁面後,在這個頁面的程式碼都會有這

apache iis 使用HTTP 響應資訊的 X-Frame-Options屬性

原文:https://www.jb51.net/article/109436.htm 方法三:使用HTTP 響應頭資訊中的 X-Frame-Options屬性 使用 X-Frame-Options 有三個可選的值: DENY:瀏覽器拒絕當前頁面載入任何Frame頁面SAMEORIGIN:

IIS https綁定主機方法(可實現禁止直接通過IP訪問,好像還可以實現IIS綁定多個https<是使用多個單域名證書,非多域名證書>)

多個 nbsp app for iis 直接 fig protoc eight 步驟: 打開:%systemroot%\SYSTEM32\inetsrv\config\ 打開:applicationHost.config 查找:<binding protocol="

asp.net core部署到iis出現 HTTP Error 502.5 - Process Failure的問題

ces targe RoCE msu 裝系統 重啟 spa 程序 itl 環境是windows Server2012 問題的原因是缺少文件:api-ms-win-crt-runtimel1-1-0.dll, dotnet 啟動程序失敗。 解決方案1:

資料結構: 連結串列哨兵(結點)的作用

資料結構: 連結串列中哨兵(頭結點)的作用 單鏈表的實現中,常有 帶頭結點 和 不帶頭結點 兩種實現方式. 筆者在做演算法與資料結構題目時,非常喜歡使用帶頭結點的實現方式.可以簡化一些邊界的處理. 哨兵節點 哨兵節點,也是頭結點,是一個 dummy node.

Meta http-equiv屬性與HTTP的Expires(Cache-control)詳解

一、概述 A、http-equiv顧名思義,相當於http的檔案頭作用,它可以向瀏覽器傳回一些有用的資訊,以幫助正確和精確地顯示網頁內容,與之對應的屬性值為content,content中的內容其實就是各個引數的變數值。 B、Cache-control用於控制HTTP快取

META-INF/MANIFEST.MF檔案Sealed作用與含義

    政府某部門想打造一個國產軟體平臺,從硬體伺服器、作業系統、資料庫、應用伺服器中介軟體等全部採用國產平臺,並將一個執行良好的應用軟體進行改造,以適應國產資料庫與原Oracle資料庫在SQL語句、系統函式等方面的不同。     apusic應用伺服器作為國產應用伺服器中

http的host欄位詳解

Host:客戶端指定自己想訪問的http伺服器的域名/IP 地址和埠號。 今天同事問了一個問題引發了我對http頭中host欄位的詳細思考,總結了以下5條。 1.host欄位可以是域名,也可以是ip地址。host欄位域名/ip後可以跟埠號,如Host: www.6sa

【web】HTTP ETag

REST筆記(五):你應該知道的HTTP頭——ETag 在HTTP1.1規範中,新增了一個HTTP頭資訊:ETag。對Web開發者來說,它是一個非常重要的資訊。它是用作快取使 用的兩個主要的頭資訊之一 (另一個是Expires)。除此之外,在REST架構中,

C++做HTTP服務應用 在Socket套接字HTTP的處理

這些天都在弄個手機控制電腦的應用.. 在WEB上實現那必然就要處理GET與POST提交 起初在電腦上所有瀏覽器都沒有什麼問題 到了iPhone 上就出現在POST引數無法接收 以為是JS褲中的AJAX在Safari有問題..但是發現多次提交有時也可以接收引數 想到可能Saf

在curl設定自定義的HTTP

問題:我正嘗試使用curl命令獲取一個URL,但除此之外我還想在傳出的HTTP請求中設定一些自定義的頭部欄位。我如何能夠在curl中使用自定義的HTTP頭呢? curl是一個強大的命令列工具,它可以通過網路將資訊傳遞給伺服器或者從伺服器獲取資料。他支援很多的傳輸協議,尤

js閉包作用舉例

efi xiaomi cti log 舉例 ons fine ole undefine 模擬實現類的私有屬性 function Boy(name){   this.name = name;   var sex = ‘boy‘;   this.saySex = functio

javareturn的作用

blank cin void target space ref grid 註意 接下來 return的常用作用有以下兩種一種是返回參數所用的關鍵字,假如一個有返回值的方法執行完了之後需要返回一個參數,示例:public string functionTest(){

Python類反射的作用

屬性 cnblogs argv 字符串 實現 span div init asa #coding:utf-8 ‘‘‘ #反射的基本用法: hasattr 判斷一個方法是否存在於實例中 getattr 指定一個方法名字,獲取該方法的內存地址,加"()"括號並可執行 ‘‘‘

break 和continue在循環起到的作用

while 測試 log 開始 作用 當前 break 跳出循環 語句 break語句的作用是終止當前循環,跳出循環體。主意,break只能跳出一層循環。 continue語句的作用是終止本輪循環並開始下一輪循環,(這裏要主意的是在開始下一輪循環之前,會先測試循環條件)。

asp.net core webapi 似乎未安裝在 IIS 承載 .NET Core 項目所需的 AspNetCoreModule。請嘗試修復 Visual Studio 以糾正該問題。

pre tin nbsp img 承載 win res windows visual 安裝 DotNetCore.1.1.0-WindowsHosting 後,提示如題錯誤。 解決辦法: ASP.NET Core 應用程序運行,可以選擇 IIS Express 也可以選擇

正確處理下載文件時HTTP的編碼問題(Content-Disposition)

robot shel 回歸 發布 合並 市場 ots 例子 int 轉自:https://blog.robotshell.org/2012/deal-with-http-header-encoding-for-file-download/ 最近在做項目時遇到了一個 case

HTML5 | Canvas變量作用域與setInterval()方法的影響

通過 value utf 出現 close span arc shadow cli Demo - 隨機繪制圓環 實現思路: 將一個圓環的繪制分成100份,setInterval()方法定義每隔時間n繪制一段新的,每份的開始路徑都是上一次的結束路徑,實現步進繪制。 通

c++ explicit 的作用

pre test 一個 調用 顯示 bsp 我們 spa pan 在c++中,只傳一個參數的構造函數定義了一個缺省的轉換操作(隱式轉換),即將該構造函數對應數據類型的數據轉換為該類的對象,如下所示 class A { public: A(int a); } A