首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

HTTP 協議請求頭詳解、Servlet 讀取實踐與 WHOIS 域名查詢實現

     編輯:DB2 教學

一、常見 HTTP 請求頭速查表

請求頭用途
Accept瀏覽器可接受的 MIME 類型
Accept-Charset可接受字符集
Accept-Encoding支持的編碼(如 gzip),可大幅減少下載時間
Accept-Language期望語言,多語言站點用於內容協商
Authorization認證憑據,回應 WWW-Authenticate
ConnectionKeep-Alive 持久連接,配合 Content-Length 減少多元素頁面下載耗時
Content-LengthPOST 請求體長度,POST 必須
Cookie攜帶會話標識,詳見 Cookie 處理章節
Host初始 URL 的主機與端口
If-Modified-Since條件請求,未修改返回 304
Pragma: no-cache強制獲取最新文檔
Referer來源頁面 URL
User-Agent瀏覽器類型,用於差異化輸出

二、Servlet 中讀取請求頭

  • getHeader(String name):獲取指定頭,不存在返回 null
  • getHeaders(String name):獲取同名頭的所有值(Enumeration)
  • getHeaderNames():獲取所有頭名稱
  • 專用便捷方法:getCookies()、getAuthType()、getRemoteUser()、getDateHeader()、getIntHeader()
  • 主請求行信息:getMethod()、getRequestURI()、getProtocol()

三、實例:顯示所有請求頭的 Servlet

public class ShowRequestHeaders extends HttpServlet {
  public void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    resp.setContentType("text/html");
    PrintWriter out = resp.getWriter();
    String title = "顯示所有請求頭";
    out.println(ServletUtilities.headWithTitle(title) +
      "<BODY BGCOLOR=\"#FDF5E6\">\n" +
      "<H1 ALIGN=CENTER>" + title + "</H1>\n" +
      "<B>Request Method: </B>" + req.getMethod() + "<BR>\n" +
      "<B>Request URI: </B>" + req.getRequestURI() + "<BR>\n" +
      "<B>Request Protocol: </B>" + req.getProtocol() + "<BR><BR>\n" +
      "<TABLE BORDER=1 ALIGN=CENTER>\n" +
      "<TR BGCOLOR=\"#FFAD00\"><TH>Header Name<TH>Header Value");
    Enumeration e = req.getHeaderNames();
    while (e.hasMoreElements()) {
      String h = (String) e.nextElement();
      out.println("<TR><TD>" + h + "<TD>" + req.getHeader(h));
    }
    out.println("</TABLE></BODY></HTML>");
  }
  public void doPost(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException { doGet(req, resp); }
}

四、利用 XMLHTTP 實現無刷新 WHOIS 域名查詢

架構流程

  1. 客戶端頁面(VBScript + XMLHTTP)發起 POST 請求到自建 ASP 中間層
  2. ASP 服務端(XMLHTTP)轉發查詢至 www.domainbank.net WHOIS 服務
  3. 解析返回 HTML,過濾提取關鍵字段(Registrant 等)回傳前端
  4. 前端 VBScript 解析響應文本,顯示查詢結果或「域名可用」提示

客戶端核心代碼片段

Set objXML = CreateObject("Microsoft.XMLHTTP")
objXML.Open "post", "dns.asp", False
objXML.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objXML.setRequestHeader "Content-Length", Len(postData)
objXML.send postData
xmlGet = objXML.responseText
' 後續文本解析判斷域名狀態...

服務端 ASP 核心代碼

<%
Set objXML = CreateObject("Microsoft.XMLHTTP")
objXML.Open "post", "https://www.domainbank.net/whoisresults_gen.cfm?show=1", False
objXML.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objXML.setRequestHeader "Content-Length", Len(postData)
objXML.send postData
Response.Write objXML.responseText
%>

為何需要 ASP 中間層?

直接在客戶端 XMLHTTP 訪問異域 WHOIS 服務會觸發 IE「跨域訪問」安全限制(默認禁用),中間層繞過瀏覽器同源策略,通用性更強。

五、HTTPS 證書錯誤排查與 HTTP/HTTPS 強制跳轉

IE7 訪問 HTTPS 證書錯誤解決步驟

  1. 點擊地址欄紅色「證書錯誤」→「查看證書」
  2. 「常規」頁籤 → 「安裝證書」→ 下一步
  3. 選「將所有證書放入下列存儲」→ 瀏覽選「受信任的根證書頒發機構」
  4. 確認安全警告「是」完成導入,再次訪問無提示

ASP 強制 HTTPS/HTTP 跳轉代碼

' 強制 HTTPS
If Request.ServerVariables("HTTPS") = "off" Then
  xredir = "https://" & Request.ServerVariables("SERVER_NAME") & _
           Request.ServerVariables("SCRIPT_NAME")
  If Request.ServerVariables("QUERY_STRING") <> "" Then
    xredir = xredir & "?" & Request.ServerVariables("QUERY_STRING")
  End If
  Response.Redirect xredir
End If

' 強制 HTTP(邏輯相反,判斷 HTTPS = "on")

六、DNS 服務器配置速記(內網測試環境)

主機 pc10.tcpip.cxm (192.168.1.10) 配置 BIND 9:

  • /etc/hosts:本地主機名解析
  • /etc/host.conf:order hosts, bind、multi on
  • /etc/resolv.conf:search tcpip.cxm、nameserver 192.168.1.10
  • /etc/named.conf:定義 zone . (hint)、0.0.127.in-addr.arpa、1.168.192.in-addr.arpa (反向)、tcpip.cxm (正向)
  • 區數據文件 /var/named/named.192.168.1、/var/named/named.tcpip.cxm 包含 SOA、NS、A、PTR、CNAME 記錄
  • service named restart 重啟,nslookup 驗證
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved