這篇文章簡單總結一下HTTP請求頭和響應頭,並舉一些web開發中響應頭的用例。
1. HTTP請求頭
accept:瀏覽器通過這個頭告訴服務器,它所支持的數據類型。如:text/html, image/jpeg
accept-Charset:瀏覽器通過這個頭告訴服務器,它支持哪種字符集。
accept-encoding:瀏覽器通過這個頭告訴服務器,它支持哪種壓縮格式。
accept-language:瀏覽器通過這個頭告訴服務器,它的語言環境。
host:瀏覽器通過這個頭告訴服務器,它想訪問哪台主機。
if-modified-since:瀏覽器通過這個頭告訴服務器,緩存數據的時間
referer:瀏覽器通過這個頭告訴服務器,客戶機是哪個頁面來的(防盜鏈)。
Connection:瀏覽器通過這個頭告訴服務器,請求完后是斷開鏈接還是維持鏈接。
2. HTTP響應頭
location:服務器通過這個頭告訴瀏覽器跳到哪里。
server:服務器通過這個頭告訴瀏覽器服務器的型號。
content-encoding:服務器通過這個頭告訴瀏覽器數據的壓縮格式。
content-length:服務器通過這個頭告訴瀏覽器回送數據的長度。
content-language:服務器通過這個頭告訴瀏覽器語言環境。
content-type:服務器通過這個頭告訴瀏覽器回送數據的類型。
refresh:服務器通過這個頭告訴瀏覽器定時刷新。
content-disposition:服務器通過這個頭告訴瀏覽器以下載方式打開數據。
transfer-encoding:服務器通過這個頭告訴瀏覽器數據是以分塊方式回送的
以下三個表示服務器通過這個頭告訴瀏覽器不要緩存
expires:-1
cache-control:no-cache
pragma:no-cache
3. 響應頭在開發中的示例
public class ServletDemo extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // locationTest(resp); // zipTest(resp); contentTypeTest(resp); // refreshTest(resp); } //指定瀏覽器定時刷新 private void refreshTest(HttpServletResponse resp) throws IOException { // resp.setHeader("refresh", "3");//3秒鍾刷新一次 resp.setHeader("refresh", "3;url='http://www.baidu.com'");//隔三秒跳轉到百度 resp.getWriter().write("java web"); } //指定回送數據類型以及以下載方式呈現到瀏覽器 private void contentTypeTest(HttpServletResponse resp) throws IOException { resp.setHeader("Content-type", "image/jpeg");//關於類型的value值,可以在tomcat目錄下的\config\web.xml中找到 resp.setHeader("Content-Disposition", "attachment;filename=dog.jpg");//告訴瀏覽器以下載的方式呈現給用戶 InputStream in = this.getServletContext().getResourceAsStream("/dog.jpg"); //讀寫模板代碼 byte buffer[] = new byte[1024]; int len = 0; OutputStream out = resp.getOutputStream();//拿到響應的輸出流 while((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } } //數據壓縮 private void zipTest(HttpServletResponse resp) throws IOException { String data = "java web學習 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; System.out.println("原始數據的大小:" + data.getBytes().length); //獲得一個輸出流,其中的數據被寫入一個byte數組,緩沖區會隨着數據的不斷寫入而自動增長 //可使用toByteArray()和toString()獲得數據 ByteArrayOutputStream bout = new ByteArrayOutputStream(); GZIPOutputStream gout = new GZIPOutputStream(bout);//獲得一個壓縮流,參數為一個輸出流,這個輸出流捕獲壓縮后的數據並將其寫到瀏覽器 gout.write(data.getBytes());//調用壓縮流的write方法即可將指定數據進行壓縮,參數為字節流數據 gout.close();//將緩沖數據寫到流中 //獲得壓縮后的數據 byte g[] = bout.toByteArray(); System.out.println("壓縮數據的大小:" + g.length); resp.setHeader("Content-Encoding", "gzip");//通知瀏覽器這是壓縮數據 resp.setHeader("Content-Length", g.length + "");//並告訴瀏覽器壓縮數據的長度 resp.getOutputStream().write(g);//打印到瀏覽器中 } //location頭的應用 private void locationTest(HttpServletResponse resp) { resp.setStatus(302);// resp.setHeader("location", "/day04/MyHtml.html");//服務器通過location告訴瀏覽器跳轉到MyHtml.html頁面執行 } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
4. HTTP響應狀態碼
100-199:表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程
200-299:表示成功接收請求並已完成整個處理過程,常用200
300-399:未完成請求,客戶需進一步細化請求,常用302,307,304
400-499:客戶端的請求有錯誤,常用404
500-599:服務器端出現錯誤,常用500