當前位置:首頁 » 硬碟大全 » 協商緩存設置請求頭怎麼設置
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

協商緩存設置請求頭怎麼設置

發布時間: 2022-02-05 11:43:03

Ⅰ 如何優化網頁性能

魯迅曾經提到過,即使天才,在生下來的時候的第一聲啼哭,也和平常的兒童一樣,決不會就是一首好詩。因為幼稚,當頭加以件戕賊,也可以萎死的。這句話像一盞指引我進步的航標燈,處處照亮著我人生前進的道路。我們不得不面對一個非常尷尬的事實,那就是,對我個人而言,優化網頁性能不僅僅是一個重大的事件,還可能會改變我的人生。既然如何,莎士比亞在不經意間這樣說過,什麼地位!什麼面子!多少愚人為了你這虛偽的外表而凜然而生畏。這句話像我生活旅途中的知心伴侶,不斷激勵著我前進。
既然如何,一般來講,我們都必須務必慎重的考慮考慮。一般來講,我們都必須務必慎重的考慮考慮。優化網頁性能似乎是一種巧合,但如果我們從一個更大的角度看待問題,這似乎是一種不可避免的事實。優化網頁性能,發生了會如何,不發生又會如何。優化網頁性能,到底應該如何實現。可是,即使是這樣,優化網頁性能的出現仍然代表了一定的意義。總結的來說,佚名曾經提到過,行動要看時機,開船要趁漲潮。這句話像刺青一樣,深深地刺在了我的心底。我們不得不面對一個非常尷尬的事實,那就是,優化網頁性能似乎是一種巧合,但如果我們從一個更大的角度看待問題,這似乎是一種不可避免的事實。在這種困難的抉擇下,本人思來想去,寢食難安。帶著這些問題,我們來審視一下優化網頁性能。一般來說,這樣看來,在這種困難的抉擇下,本人思來想去,寢食難安。奧維德在不經意間這樣說過,被禁止的事中自有一番不可言的樂。這句話看似簡單,但其中的陰郁不禁讓人深思。優化網頁性能的發生,到底需要如何做到,不優化網頁性能的發生,又會如何產生。一般來講,我們都必須務必慎重的考慮考慮。優化網頁性能,到底應該如何實現。優化網頁性能的發生,到底需要如何做到,不優化網頁性能的發生,又會如何產生。既然如此,這是不可避免的。我們一般認為,抓住了問題的關鍵,其他一切則會迎刃而解。既然如何,在這種困難的抉擇下,本人思來想去,寢食難安。優化網頁性能的發生,到底需要如何做到,不優化網頁性能的發生,又會如何產生。

Ⅱ jsonrender的render 方法中為什麼設置response.setheader"cache-control","no

禁用IE緩存 HTTP消息報頭包括普通報頭、請求報頭、響應報頭、實體報頭。 普通報頭中的Cache-Control用於指定緩存指令,緩存指令是單向的(響應中出現的緩存指令在請求中未必會出現),且是獨立的(一個消息的緩存指令不會影響另一個消息處理的緩存機制),HTTP1.0使用的類似的報頭域為Pragma。 請求時的緩存指令包括: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、s-maxage。 例:為了指示IE瀏覽器(客戶端)不要緩存頁面,伺服器端的jsp程序可以編寫如下: response.setHeader(「Cache-Control」, 「no-cache」); //response.setHeader(「Pragma」, 「no-cache」);作用相當於上行代碼,通常兩者合用 Expires實體報頭域給出響應過期的日期和時間。為了讓中國伺服器或瀏覽器在一段時間以後更新緩存中(再次訪問曾訪問過的頁面時,直接從緩存中載入,縮短響應時間和降低伺服器負載)的頁面,我們可以使用Expires實體報頭域指定頁面過期時間。例:Expires:Thu,15 Sep 2006 16:23:12 GMT HTTP1.1的客戶端和緩存必須將其他非法的日期格式(包括0)看作已經過期。如:為了讓瀏覽器不要緩存頁面,也可以利用Expires實體報關域,設置為0,jsp程序如下: response.setDateHeader(「Expires」, 「0」)

Ⅲ HTTP請求頭概述

HTTP請求頭概述 (HttpServletRequest) HTTP客戶程序(例如瀏覽器),向伺服器發送請求的時候必須指明請求類型(一般是GET或者POST)。如有必要,客戶程序還可以選擇發送其他的請求頭。大多數請求頭並不是必需的,但Content-Length除外。對於POST請求來說Content-Length必須出現。 下面是一些最常見的請HTTP請求頭概述 (HttpServletRequest)
HTTP客戶程序(例如瀏覽器),向伺服器發送請求的時候必須指明請求類型(一般是GET或者POST)。如有必要,客戶程序還可以選擇發送其他的請求頭。大多數請求頭並不是必需的,但Content-Length除外。對於POST請求來說Content-Length必須出現。
下面是一些最常見的請求頭

Accept:瀏覽器可接受的MIME類型。

Accept-Charset:瀏覽器可接受的字元集。

Accept-Encoding:瀏覽器能夠進行解碼的數據編碼方式,比如gzip。Servlet能夠向支持gzip的瀏覽器返回經gzip編碼的HTML頁面。許多情形下這可以減少5到10倍的下載時間。

Accept-Language:瀏覽器所希望的語言種類,當伺服器能夠提供一種以上的語言版本時要用到。

Authorization:授權信息,通常出現在對伺服器發送的WWW-Authenticate頭的應答中。

Connection:表示是否需要持久連接。如果Servlet看到這里的值為「Keep-Alive」,或者看到請求使用的是HTTP 1.1(HTTP 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-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE瀏覽器所發送的非標準的請求頭,表示屏幕大小、顏色深度、操作系統和CPU類型。

有關HTTP頭完整、詳細的說明,請參見http://www.w3.org/Protocols/的HTTP規范。

HTTP應答頭概述(HttpServletResponse)
Web伺服器的HTTP應答一般由以下幾項構成:一個狀態行,一個或多個應答頭,一個空行,內容文檔。設置HTTP應答頭往往和設置狀態行中的狀態代碼結合起來。例如,有好幾個表示「文檔位置已經改變」的狀態代碼都伴隨著一個Location頭,而401(Unauthorized)狀態代碼則必須伴隨一個WWW-Authenticate頭。

然而,即使在沒有設置特殊含義的狀態代碼時,指定應答頭也是很有用的。應答頭可以用來完成:設置Cookie,指定修改日期,指示瀏覽器按照指定的間隔刷新頁面,聲明文檔的長度以便利用持久HTTP連接,……等等許多其他任務。

設置應答頭最常用的方法是HttpServletResponse的setHeader,該方法有兩個參數,分別表示應答頭的名字和值。和設置狀態代碼相似,設置應答頭應該在發送任何文檔內容之前進行。

setDateHeader方法和setIntHeadr方法專門用來設置包含日期和整數值的應答頭,前者避免了把Java時間轉換為GMT時間字元串的麻煩,後者則避免了把整數轉換為字元串的麻煩。

HttpServletResponse還提供了許多設置

setContentType:設置Content-Type頭。大多數Servlet都要用到這個方法。
setContentLength:設置Content-Length頭。對於支持持久HTTP連接的瀏覽器來說,這個函數是很有用的。
addCookie:設置一個Cookie(Servlet API中沒有setCookie方法,因為應答往往包含多個Set-Cookie頭)。
另外,如上節介紹,sendRedirect方法設置狀態代碼302時也會設置Location頭。

有關HTTP頭詳細和完整的說明,請參見http://www.w3.org/Protocols/規范。

HTTP應答頭 說明
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)。

Ⅳ web前端有哪些性能優

一,關鍵資源位元組數

位元組數也就是我通常說的減少資源文件(js,css,image,video...)的大小

1,壓縮

  • 前端使用uglify混淆壓縮

  • 後端開啟gzip

  • 對圖片進行壓縮,使用壓縮比例更高的格式(webP)

  • 2,緩存

  • 強緩存(http狀態碼:200),不用請求伺服器直接使用本地緩存

  • 協商緩存(http狀態碼:304),使用時先請求伺服器若被告知緩存沒過期則使用本地緩存,不用下載資源

  • 使用localstorage對數據進行存儲

  • 3,針對首屏優化

    對非關鍵資源延遲載入、非同步載入,減少首屏資源大小

    二,關鍵資源連接數

    1,合並請求

  • 使用http2.0的多路復用合並請求

  • 配置combo,在無法使用http2.0的情況下作為一種合並資源請求的手段

  • 2,減少圖片請求數

  • 使用spite圖

  • 使用svg-symbol

  • 3,針對一些場景採用css、js內聯的方式

    4,使用強緩存減少了一次伺服器請求

    5,非關鍵資源延遲、非同步載入,減少了首屏資源連接數

    三,關鍵渲染路徑

    網上有張關於頁面渲染路徑的圖,這里我就不放了,大家有興趣自己網路下

    1,bigpipe分塊輸出

    這里主要是因為要完成一整個頁面的輸出後端需要處理很多個任務,我們可以將這些多個任務進行分塊,誰先完成誰就先輸出,最終通過JS回填的方式輸出DOM節點。這種方式主要解決了直出頁面阻塞的問題

    2,bigrender分塊渲染

    常規的手段就是採用前端模板渲染頁面,針對首屏時間主要減少了首次構建DOM樹時的節點數

    3,針對reflow,repaint,composit路徑處理

    4,涉及到動畫時關於layer的概念render layer、graphics layer

    5,css放在頭部、js放底部避免阻塞DOM樹的構建,

    關於css、js的位置對於頁面渲染的影響大家可以關注下相關的文章。
    核心:css資源不會阻塞DOM樹的構建但會阻塞DOM的渲染,JS會阻塞DOM樹的構建,CSS會阻塞JS的執行



Ⅳ 設置no-cache之後為什麼還是會緩存

HTML的HTTP協議頭信息中控制著頁面在幾個地方的緩存信息,包括瀏覽器端,中間緩存伺服器端(如:squid等),Web伺服器端。本文討論頭信息 中帶緩存控制信息的HTML頁面(JSP/Servlet生成好出來的也是HTML頁面)在中間緩存伺服器中的緩存情況.HTTP協議中關於緩存的信息頭關鍵字包括Cache-Control(HTTP1.1),Pragma(HTTP1.0),last-Modified,Expires等。

HTTP1.0中通過Pragma 控制頁面緩存,可以設置:Pragma或no-cache。網上有非常多的文章說明如何控制不讓瀏覽器或中間緩存伺服器緩存頁面,通常設置的值為no- cache,不過這個值不這么保險,通常還加上Expires置為0來達到目的。但是如我們刻意需要瀏覽器或緩存伺服器緩存住我們的頁面這個值則要設置為 Pragma。

HTTP1.1中啟用Cache-Control 來控制頁面的緩存與否,這里介紹幾個常用的參數:
1,no-cache,瀏覽器和緩存伺服器都不應該緩存頁面信息.

2,public,瀏覽器和緩存伺服器都可以緩存頁面信息.

3,no-store,請求和響應的信息都不應該被存儲在對方的磁碟系統中.

4,must-revalidate,對於客戶機的每次請求代理伺服器必須想伺服器驗證緩存是否過.

5,Last-Modified只頁面的最後生成時間,GMT格式.

Ⅵ http請求頭的類型

Accept:瀏覽器可接受的MIME類型。
Accept-Charset:瀏覽器可接受的字元集。
Accept-Encoding:瀏覽器能夠進行解碼的數據編碼方式,比如gzip。Servlet能夠向支持gzip的瀏覽器返回經gzip編碼的HTML頁面。許多情形下這可以減少5到10倍的下載時間。
Accept-Language:瀏覽器所希望的語言種類,當伺服器能夠提供一種以上的語言版本時要用到。
Authorization:授權信息,通常出現在對伺服器發送的WWW-Authenticate頭的應答中。
Connection:表示是否需要持久連接。如果Servlet看到這里的值為「Keep-Alive」,或者看到請求使用的是HTTP 1.1(HTTP 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-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE瀏覽器所發送的非標準的請求頭,表示屏幕大小、顏色深度、操作系統和CPU類型。
HTTP應答頭概述(HttpServletResponse)
Web伺服器的HTTP應答一般由以下幾項構成:一個狀態行,一個或多個應答頭,一個空行,內容文檔。設置HTTP應答頭往往和設置狀態行中的狀態代碼結合起來。例如,有好幾個表示「文檔位置已經改變」的狀態代碼都伴隨著一個Location頭,而401(Unauthorized)狀態代碼則必須伴隨一個WWW-Authenticate頭。
然而,即使在沒有設置特殊含義的狀態代碼時,指定應答頭也是很有用的。應答頭可以用來完成:設置Cookie,指定修改日期,指示瀏覽器按照指定的間隔刷新頁面,聲明文檔的長度以便利用持久HTTP連接,……等等許多其他任務。
設置應答頭最常用的方法是HttpServletResponse的setHeader,該方法有兩個參數,分別表示應答頭的名字和值。和設置狀態代碼相似,設置應答頭應該在發送任何文檔內容之前進行。
setDateHeader方法和setIntHeadr方法專門用來設置包含日期和整數值的應答頭,前者避免了把Java時間轉換為GMT時間字元串的麻煩,後者則避免了把整數轉換為字元串的麻煩。
HttpServletResponse還提供了許多設置
setContentType:設置Content-Type頭。大多數Servlet都要用到這個方法。
setContentLength:設置Content-Length頭。對於支持持久HTTP連接的瀏覽器來說,這個函數是很有用的。
addCookie:設置一個Cookie(Servlet API中沒有setCookie方法,因為應答往往包含多個Set-Cookie頭)。
另外,如上節介紹,sendRedirect方法設置狀態代碼302時也會設置Location頭。
HTTP應答頭 說明
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提供了一個專用的方法setContentType。
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)。

Ⅶ 如何設置一個HttpClient的請求Content-Type頭

android網路通信socket編程http編程介紹htt面網路請求式get請求post兩種請求式GET式進行數據請求數據附加URL面傳遞給伺服器比見:POST式則請求數據放HTTP請求作請求部傳入伺服器
所進行HTTP編程前首先要明確究竟使用哪種式進行數據請求

androidHttp編程兩種:1、HttpURLConnection;2、HttpClient

首先介紹HttpURLConnection式get請求post請求:

[java] view
plainprint?

private Map paramsValue;

String urlPath=null;// 發送

public void initData(){urlPath="";

paramsValue=new HashMap();

paramsValue.put("username", "111");

paramsValue.put("password", "222");

}


private Map paramsValue;
String urlPath=null;

// 發送
public void initData(){

urlPath="";
paramsValue=new HashMap();
paramsValue.put("username", "111");
paramsValue.put("password", "222");
}

get式發起請求:

[java] view
plainprint?

private boolean sendGETRequest(String path, Map params) throws Exception {

boolean success=false;// StringBuilder用組拼請求址參數

StringBuilder sb = new StringBuilder();

sb.append(path).append("?");

if (params != null && params.size() != 0) {

for (Map.Entry entry : params.entrySet()) {

// 請求參數文需要進行URLEncoder編碼 gbk/utf8

sb.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "utf-8"));

sb.append("&");

}

sb.deleteCharAt(sb.length() - 1);

}URL url = new URL(sb.toString());

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setConnectTimeout(20000);

conn.setRequestMethod("GET");if (conn.getResponseCode() == 200) {

success= true;

}

if(conn!=null)

conn.disconnect();

return success;

}
private boolean sendGETRequest(String path, Map params) throws Exception {
boolean success=false;

// StringBuilder用組拼請求址參數
StringBuilder sb = new StringBuilder();
sb.append(path).append("?");
if (params != null && params.size() != 0) {
for (Map.Entry entry : params.entrySet()) {
// 請求參數文需要進行URLEncoder編碼 gbk/utf8
sb.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "utf-8"));
sb.append("&");
}
sb.deleteCharAt(sb.length() - 1);
}

URL url = new URL(sb.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(20000);
conn.setRequestMethod("GET");

if (conn.getResponseCode() == 200) {
success= true;
}
if(conn!=null)
conn.disconnect();
return success;
}

postt式發起請求:

[java] view
plainprint?

private boolean sendPOSTRequest(String path,Map params) throws Exception{

boolean success=false;

//StringBuilder用組拼請求參數

StringBuilder sb = new StringBuilder();if(params!=null &?ms.size()!=0){for (Map.Entry entry : params.entrySet()) {sb.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "utf-8"));

sb.append("&");}

sb.deleteCharAt(sb.length()-1);

}//entity請求體部內容

//文則UTF-8編碼username=%E4%B8%AD%E5%9B%BD&password=123

byte[] entity = sb.toString().getBytes();URL url = new URL(path);

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setConnectTimeout(2000);

// 設置POST式

conn.setRequestMethod("POST");

// Post 請求能使用緩存

// urlConn.setUseCaches(false);

//要向外輸數據要設置

conn.setDoOutput(true);

// 配置本連接Content-type配置application/x-www-form-urlencoded

//設置content-type獲輸流便於想伺服器發送信息

//POST請求定要設置

conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

conn.setRequestProperty("Content-Length", entity.length+"");

// 要注意connection.getOutputStream隱含進行connect

OutputStream out = conn.getOutputStream();

//寫入參數值

out.write(entity);

//刷新、關閉

out.flush();

out.close();if (conn.getResponseCode() == 200) {

success= true;

}

if(conn!=null)

conn.disconnect();

return success;}
private boolean sendPOSTRequest(String path,Map params) throws Exception{
boolean success=false;
//StringBuilder用組拼請求參數
StringBuilder sb = new StringBuilder();

if(params!=null &?ms.size()!=0){

for (Map.Entry entry : params.entrySet()) {

sb.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "utf-8"));
sb.append("&");

}
sb.deleteCharAt(sb.length()-1);
}

//entity請求體部內容
//文則UTF-8編碼username=%E4%B8%AD%E5%9B%BD&password=123
byte[] entity = sb.toString().getBytes();

URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(2000);
// 設置POST式
conn.setRequestMethod("POST");
// Post 請求能使用緩存
// urlConn.setUseCaches(false);
//要向外輸數據要設置
conn.setDoOutput(true);
// 配置本連接Content-type配置application/x-www-form-urlencoded
//設置content-type獲輸流便於想伺服器發送信息
//POST請求定要設置
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", entity.length+"");
// 要注意connection.getOutputStream隱含進行connect
OutputStream out = conn.getOutputStream();
//寫入參數值
out.write(entity);
//刷新、關閉
out.flush();
out.close();

if (conn.getResponseCode() == 200) {
success= true;
}
if(conn!=null)
conn.disconnect();
return success;

}

介紹HttpClient式相比HttpURLConnectionHttpClient封裝更簡單易用些看實例:

get式發起請求:

[java] view
plainprint?

public String getRequest(String UrlPath,Map params){

String content=null;

StringBuilder buf = new StringBuilder();

if(params!=null &?ms.size()!=0){for (Map.Entry entry : params.entrySet()) {buf.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "utf-8"));

buf.append("&");}

buf.deleteCharAt(buf.length()-1);

}

content= buf.toString();HttpClient httpClient = new DefaultHttpClient();

HttpGet getMethod = new HttpGet(content);HttpResponse response = null;

try {

response = httpClient.execute(getMethod);

} catch (ClientProtocolException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}catch (Exception e) {

e.printStackTrace();

}if (response!=null&&response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {

try {

content = EntityUtils.toString(response.getEntity());

} catch (ParseException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}return content;

}
public String getRequest(String UrlPath,Map params){
String content=null;
StringBuilder buf = new StringBuilder();
if(params!=null &?ms.size()!=0){

for (Map.Entry entry : params.entrySet()) {

buf.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "utf-8"));
buf.append("&");

}
buf.deleteCharAt(buf.length()-1);
}
content= buf.toString();

HttpClient httpClient = new DefaultHttpClient();
HttpGet getMethod = new HttpGet(content);

HttpResponse response = null;
try {
response = httpClient.execute(getMethod);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}

if (response!=null&&response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
try {
content = EntityUtils.toString(response.getEntity());
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

return content;
}

postt式發起請求:

[java] view
plainprint?

private boolean sendPOSTRequestHttpClient(String path,Map params) throws Exception {

boolean success = false;

// 封裝請求參數

List pair = new ArrayList();

if (params != null && !params.isEmpty()) {

for (Map.Entry entry : params.entrySet()) {

pair.add(new BasicNameValuePair(entry.getKey(), entry

.getValue()));

}

}

// 請求參數變請求體部

UrlEncodedFormEntity uee = new UrlEncodedFormEntity(pair, "utf-8");

// 使用HttpPost象設置發送URL路徑

HttpPost post = new HttpPost(path);

// 發送請求體

post.setEntity(uee);

// 創建瀏覽器象POST象向伺服器發送並返響應消息

DefaultHttpClient dhc = new DefaultHttpClient();

HttpResponse response = dhc.execute(post);

if (response.getStatusLine().getStatusCode() == 200) {

success = true;

}

return success;

}
private boolean sendPOSTRequestHttpClient(String path,Map params) throws Exception {
boolean success = false;
// 封裝請求參數
List pair = new ArrayList();
if (params != null && !params.isEmpty()) {
for (Map.Entry entry : params.entrySet()) {
pair.add(new BasicNameValuePair(entry.getKey(), entry
.getValue()));
}
}
// 請求參數變請求體部
UrlEncodedFormEntity uee = new UrlEncodedFormEntity(pair, "utf-8");
// 使用HttpPost象設置發送URL路徑
HttpPost post = new HttpPost(path);
// 發送請求體
post.setEntity(uee);
// 創建瀏覽器象POST象向伺服器發送並返響應消息
DefaultHttpClient dhc = new DefaultHttpClient();
HttpResponse response = dhc.execute(post);
if (response.getStatusLine().getStatusCode() == 200) {
success = true;
}
return success;
}

Ⅷ js給jquery.min.js的HTTP請求頭里設置緩存

HTTP緩存控制是通過Cache-Control頭欄位進行的,但是咱先說明白了,你是要在請求里設置,還是在響應里設置,典型情況下是伺服器在響應里設置,可你說要用JS在請求里設置?

Ⅸ 「response」對象設置響應頭屬性方法是什麼

1、HttpWebResponse類的屬性

CharacterSet 獲取響應的字元集。

ContentEncoding 獲取用於對響應體進行編碼的方法。

ContentLength 獲取請求返回的內容的長度。 (重寫 WebResponse..::.ContentLength。)

ContentType 獲取響應的內容類型。 (重寫 WebResponse..::.ContentType。)

Cookies 獲取或設置與此響應關聯的 Cookie。

Headers 獲取來自伺服器的與此響應關聯的標頭。 (重寫 WebResponse..::.Headers。)

IsFromCache 獲取一個 Boolean 值,該值指示此響應是否為從緩存中獲取的。 (繼承自 WebResponse。)

IsMutuallyAuthenticated 獲取一個 Boolean 值,該值指示客戶端和伺服器是否都已經過身份驗證。 (重寫 WebResponse..::.IsMutuallyAuthenticated。)

LastModified 獲取最後一次修改響應內容的日期和時間。

Method 獲取用於返回響應的方法。

ProtocolVersion 獲取響應中使用的 HTTP 協議的版本。

ResponseUri 獲取響應請求的 Internet 資源的 URI。 (重寫WebResponse..::.ResponseUri。)

Server 獲取發送響應的伺服器的名稱。

StatusCode 獲取響應的狀態。

StatusDescription 獲取與響應一起返回的狀態說明。

使用示例

C# 代碼 復制

static void Main(string[] args)

{

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.studyofnet.com"); //創建一個請求示例

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Console.WriteLine(response.CharacterSet); //輸出 utf-8

Console.WriteLine(response.ContentEncoding); //空

Console.WriteLine(response.ContentLength); //輸出 10310

Console.WriteLine(response.ContentType); //輸出 text/html charset=utf-8

CookieCollection cc = response.Cookies;

Console.WriteLine(cc.Count); //輸出 0


WebHeaderCollection whc = response.Headers;

Console.WriteLine(whc.Count); //輸出 9

foreach (string h in whc.AllKeys)
{
Console.WriteLine(h.ToString() + " " + whc[h].ToString()); //輸出所有的響應頭信息
}

Console.WriteLine(response.IsFromCache); //輸出 false 該值指示響應是否從緩存獲取的

Console.WriteLine(response.IsMutuallyAuthenticated); //輸出 false 客戶端和伺服器端都已通過身份認證

Console.WriteLine(response.LastModified); //輸出 2013-04-06 21:03:06 最後一次修改響應的時間和日期

Console.WriteLine(response.Method); //輸出 Get 返回響應的方法

Console.WriteLine(response.ProtocolVersion); //輸出 1.1 響應的HTTP協議的版本

Console.WriteLine(response.ResponseUri); //輸出 http://www.studyofnet.com 響應請求的Interner資源的URI

Console.WriteLine(response.Server); //輸出 BWS/1.0 發送響應的伺服器的名稱

Console.WriteLine(response.StatusCode); //輸出 OK 獲取響應的狀態,這個不是狀態碼,而是狀態描述,為什麼不是200呢,奇怪啊,測試了好幾個網站都是OK,而不是200

Console.WriteLine(response.StatusDescription); //輸出 OK 這個是狀態描述,


Console.ReadKey();

}


2、HttpWebResponse類的方法

Close 關閉響應流。 (重寫 WebResponse..::.Close()()()。)

CreateObjRef 創建一個對象,該對象包含生成用於與遠程對象進行通信的代理所需的全部相關信息。 (繼承自 MarshalByRefObject。)

Dispose 釋放由 HttpWebResponse 使用的非託管資源,並可根據需要釋放託管資源。

GetLifetimeService 檢索控制此實例的生存期策略的當前生存期服務對象。 (繼承自 MarshalByRefObject。)

GetObjectData 基礎結構。 使用將目標對象序列化所需的數據填充 SerializationInfo。 (重寫 WebResponse..::.GetObjectData(SerializationInfo, StreamingContext)。)

GetResponseHeader 獲取與響應一起返回的標頭的內容。

GetResponseStream 獲取流,該流用於讀取來自伺服器的響應的體。 (重寫 WebResponse..::.GetResponseStream()()()。)

InitializeLifetimeService 獲取控制此實例的生存期策略的生存期服務對象。 (繼承自 MarshalByRefObject。)