SE452: Common Request Headers [12/20] ![]() ![]() ![]() |
User-Agent
- Identifies the browser type and version,
e. g.,Mozilla/ 4.72 [en] (X11; U; Linux 2.2.14- 5.0 i686)
Host
- Indicates the host given in the request URL, e. g.,
se.cs.depaul.edu. Required in HTTP 1.1
Accept
- Indicates MIME types browser can handle,
e. g.,image/gif, image/jpeg, image/png, */*
Accept-Encoding
- Indicates encodings browser can handle,
e. g., gzip or compress
Connection
- keep-alive : browser can handle
persistent connection.
Authorization
- User identification for
password-protected pages.
Cookie
- Cookies previously sent to the client by the same server.
If-Modified-Since
- Send the page only if it has been
changed after specified date.
Referer
- URL of the referring Web page.
The request headers API
String getHeader( String name)
Returns the value of the specified request header as a String.
Enumeration getHeaderNames()
Returns an enumeration of all the header names this request contains.
Enumeration getHeaders( String name)
Returns all the values of the specified request header as an Enumeration of String objects.
Example:
Enumeration headers = request.getHeaderNames(); while(headers.hasMoreElements()) { String headerName = (String)headers.nextElement(); String value = request.getHeader(headerName); out.println(" <tr><td bgcolor=\"coral\">" + headerName + "</td>" + "<td>" + value + "</td></tr>"); } out.println(" </table>"); }
Once example of using headers to do something useful is in the case of compressing content. Data can be sent in compressed format, which allows downloads of text data to be much faster. Browsers indicate if they can read compressed data in the Accept-Encoding request header.
Example
/* * CompressedSurveyServlet.java * */ package se452.forms; import java.util.Enumeration; import javax.servlet.*; import javax.servlet.http.*; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.util.zip.ZipOutputStream; import java.util.zip.GZIPOutputStream; /** * * @author Matthew Wright * @version 1.0 */ public class CompressedSurveyServlet extends HttpServlet { /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. * @param request servlet request * @param response servlet response */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { // get compression support String encodings = request.getHeader("Accept-Encoding"); String footer; ByteArrayOutputStream bstream = new ByteArrayOutputStream(1024); // the eventual stream that will be used OutputStream ostream; response.setContentType("text/html"); if(encodings != null && encodings.indexOf("gzip") != -1) { footer = "GZIP compressed"; ostream = new GZIPOutputStream(bstream); response.setHeader("Content-Encoding", "gzip"); } else if(encodings != null && encodings.indexOf("compress") != -1) { footer = "ZIP compressed"; ostream = new ZipOutputStream(bstream); response.setHeader("Content-Encoding", "compress"); } else { footer = "Non-compressed"; ostream = bstream; } // instead of writing to the outputstream of the response // directly, write to a PrintWriter first, which is either // a ByteArray, GZIP, or Zip OutputStream. java.io.PrintWriter out = new PrintWriter(ostream); out.println("<html><head><title>Survey Servlet</title></head>"); out.println("<body>"); out.println(" <table>"); out.println(" <tr><td colspan=\"2\"><h1>Thank you for submitting your survey</h1></td></tr>"); out.println(" <tr><td colspan=\"2\">You submitted the following information</td></tr>"); out.println(" <tr><td>Name</td><td>" + request.getParameter("first") + " " + request.getParameter("middle") + " " + request.getParameter("last") + "<br/>" + request.getParameter("email") + "</td></tr>"); out.println(" <tr><td>Address</td><td>" + request.getParameter("address") + "<br/>" + request.getParameter("city") + ", " + request.getParameter("state") + " " + request.getParameter("zip") + "</td></tr>"); out.println(" <tr><td>Company</td><td>" + request.getParameter("company") + "<br/> which is a " + request.getParameter("co_type") + " organization</td></tr>"); // get the languages and put them in a string which can be displayed String[] languages = {"vb", "perl", "cpp", "java", "c", "csharp"}; String langresponse = new String(); for(int i = 0; i < languages.length; i++) { if("on".equals(request.getParameter(languages[i]))) { langresponse += " " + languages[i]; } } out.println(" <tr><td>Languages</td><td>" + langresponse + "</td></tr>"); out.println(" <tr><td>Comments</td><td>" + request.getParameter("comments") + "</td></tr>"); out.println("<i color=\"blue\">" + footer + "</i>"); out.println("</body></html>"); out.close(); int len = bstream.size(); response.setContentLength(len); bstream.writeTo(response.getOutputStream()); } /** Handles the HTTP <code>GET</code> method. * @param request servlet request * @param response servlet response */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { processRequest(request, response); } /** Handles the HTTP <code>POST</code> method. * @param request servlet request * @param response servlet response */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { processRequest(request, response); } }