HTTP請求頭和響應頭


這篇文章簡單總結一下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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM