HTTP響應頭是網站服務器端針對客戶的請求發出的一串信息,它可能包含了請求文檔的內容類型,文檔長度,對內容編碼的字符集,日期時間,內容的過時時間,內容的最後修改時間,服務器型號,是否進行緩存等重要信息。瞭解這些信息對Java的網絡編程具備重要的指導意義。 php
HTTP 使用內容類型,是指Web服務器向Web瀏覽器返回的文件都有與之相關的類型。全部這些類型在MIME Internet郵件協議上模型化,即Web服務 器告訴Web瀏覽器該文件所具備的種類,是HTML文檔、GIF格式圖像、聲音文件仍是獨立的應用程序。大多數Web瀏覽器都擁有一系列的可配置的輔助應 用程序,它們告訴瀏覽器應該如何處理Web服務器發送過來的各類內容類型。HTTP通訊機制是在一次完整的HTTP通訊過程當中,Web瀏覽器與Web服務器之間將完成下列7個步驟: html
Connection:keep-alive。TCP鏈接在發送後將仍然保持打開狀態,因而,瀏覽器能夠繼續經過相同的鏈接發送請求。保持鏈接節省了爲每一個請求創建新鏈接所需的時間,還節約了網絡帶寬。 java
不論哪一個版本,響應碼從100到199總表示一個提供信息的相應,200到299總指示成功,300到399表示重定向,400到499表示客戶端錯誤,500到599表示服務器端錯誤。 linux
下面是一些常見的狀態碼及其含義 nginx
狀態碼 |
含義 |
100 Continue |
服務器準備接受,容許客戶端在請求中發送大量數據以前詢問服務器是否將接受該請求 |
200 OK |
請求成功,如果get或post請求,則包含請求數據;如果head請求,則之包含 |
301 Moved Permanently |
資源已經永久移到一個新的URL |
302 Moved Temporarily |
資源暫時移到一個新的URL |
304 Not Modified |
客戶端應該從緩存中加載文檔 |
403 Forbidden |
服務器理解請求,但有意拒絕處理 |
404 Not Found |
服務器找不到請求資源 |
500 Internal Server Error |
服務器不知道如何處理 |
502 Bad Gateway |
網關或者代理服務器試圖完成請求時,接受到一個無效的相應 |
503 Service Unavailable |
服務器暫時沒法處理請求,多是超負荷或維護緣由 |
package demo0808.demo1; /** * 現實響應頭代碼 */ import java.io.IOException; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class ShowHttpHeaders { //要查找的網址 private ArrayList<String> websites; /** * 構造函數 * @param websites 網站列表 */ public ShowHttpHeaders(ArrayList<String> websites) { this.websites=websites; } /** * 獲取響應頭 * 打印到控制檯 */ public void getHeaders() { if(websites==null) { System.err.println("查詢網址不能爲空!"); return; } try { for(String website:websites) { System.out.println("----------------網站:"+website+"HTTP響應頭---------------"); URL url = new URL(website); URLConnection connection = url.openConnection(); Map<String, List<String>> headerFields = connection.getHeaderFields(); Set<Entry<String, List<String>>> entrySet = headerFields.entrySet(); Iterator<Entry<String, List<String>>> iterator = entrySet.iterator(); while(iterator.hasNext()) { Entry<String, List<String>> next = iterator.next(); String key=next.getKey(); List<String> value = next.getValue(); if(key==null) System.out.println(value.toString()); else System.out.println(key+":"+value.toString()); } System.out.println(""); } } catch ( IOException e) { System.err.println("沒法查詢網址!"); } } }
package demo0808.demo1; /** * 測試代碼 */ import java.util.ArrayList; public class Test { public static void main(String[] args) { String web1="http://www.oschina.net/"; String web2="http://news.baidu.com/"; String web3="https://linux.cn/"; String web4="http://www.taobao.com/"; ArrayList<String> websites=new ArrayList<String>(); websites.add(web1); websites.add(web2); websites.add(web3); websites.add(web4); ShowHttpHeaders showHttpHeaders = new ShowHttpHeaders(websites); showHttpHeaders.getHeaders(); } }
----------------網站:http://www.oschina.net/HTTP響應頭--------------- [HTTP/1.1 403 Forbidden] Date:[Sat, 08 Aug 2015 02:35:08 GMT] Content-Length:[700] Connection:[keep-alive] Content-Type:[text/html;charset=UTF-8] Server:[Tengine/2.1.0] ----------------網站:http://news.baidu.com/HTTP響應頭--------------- [HTTP/1.1 200 OK] P3p:[CP=" OTI DSP COR IVA OUR IND COM "] Transfer-Encoding:[chunked] Vary:[Accept-Encoding, Accept-Encoding] Date:[Sat, 08 Aug 2015 02:35:09 GMT] Set-Cookie:[BAIDUID=27B1B47C0413E086084F1E668200715A:FG=1; expires=Sun, 07-Aug-16 02:35:09 GMT; max-age=31536000; path=/; domain=.baidu.com; version=1, LOCALGX=%u5E7F%u5DDE%7C%35%34%39%36%7C%u5E7F%u5DDE%7C%35%34%39%36; expires=Sat, 15-Aug-2015 02:35:09 GMT; path=/; domain=.news.baidu.com] Content-Type:[text/html] Server:[Apache] ----------------網站:https://linux.cn/HTTP響應頭--------------- [HTTP/1.1 200 OK] Strict-Transport-Security:[max-age=63072000; includeSubdomains; preload] Transfer-Encoding:[chunked] Date:[Sat, 08 Aug 2015 02:35:10 GMT] Set-Cookie:[dx_516d_sid=qADFvF; expires=Sun, 09-Aug-2015 02:35:10 GMT; Max-Age=86400; path=/; domain=.linux.cn; secure, dx_516d_lastact=1439001310%09index.php%09; expires=Sun, 09-Aug-2015 02:35:10 GMT; Max-Age=86400; path=/; domain=.linux.cn; secure, dx_516d_sid=qADFvF; expires=Sun, 09-Aug-2015 02:35:10 GMT; Max-Age=86400; path=/; domain=.linux.cn; secure, dx_516d_lastvisit=1438997710; expires=Mon, 07-Sep-2015 02:35:10 GMT; Max-Age=2592000; path=/; domain=.linux.cn; secure, dx_516d_saltkey=Vp3c3GiK; expires=Mon, 07-Sep-2015 02:35:10 GMT; Max-Age=2592000; path=/; domain=.linux.cn; secure; httponly] Connection:[keep-alive] Content-Type:[text/html; charset=utf-8] Server:[nginx] X-Content-Type-Options:[nosniff] ----------------網站:http://www.taobao.com/HTTP響應頭--------------- [HTTP/1.1 302 Found] Date:[Sat, 08 Aug 2015 02:35:10 GMT] Content-Length:[258] Location:[https://www.taobao.com/] Set-Cookie:[thw=cn; Path=/; Domain=.taobao.com; Expires=Sun, 07-Aug-16 02:35:10 GMT;] Connection:[keep-alive] Content-Type:[text/html] Server:[Tengine]