0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

HTTP/Hostヘッダの調査用サーブレット

Posted at

headers.java
package pkg;

import java.io.IOException;
import java.io.PrintWriter;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Headers
 */
@WebServlet("/Headers")
public class Headers extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		response.setContentType("text/html");
		response.setCharacterEncoding("utf-8");
		
		PrintWriter print = response.getWriter();

		// HttpリクエストのHostヘッダを取得(Hostヘッダがない場合はnull)
		String hostHdr = request.getHeader("Host");

		// HostヘッダをHostとPortに分割
		String[] aryHostValue = (hostHdr == null) ? null : hostHdr.split(":");

		// Host値を取得(Hostヘッダがない場合はnull)
		String host = (hostHdr == null) ? null : aryHostValue[0];
		// port値を取得
		String port;
		if(aryHostValue.length > 1) {
			port = aryHostValue[1];
		} else if (request.isSecure()) {
			// ポート番号省略かつhttps接続
			port = "443";
		} else {
			// ポート番号省略かつhttp接続
			port = "80";
		}

		if(host == null) {
			// ★Hostヘッダがない場合は 400(BatReqest)
			response.sendError(HttpServletResponse.SC_BAD_REQUEST);

		} else if(port.equals("443")) {
			// ★portが443番の場合は処理Aを実行			
		} else if(port.equals("80")) {
			// ★portが80番の場合は処理Bを実行
		} else {
			// ★portが上記以外は処理Cを実行
		}
		response.setStatus(HttpServletResponse.SC_OK);
		
		// 取得したHostヘッダの値を表示
		if(host == null) {
			print.append("Host header is not set.");
		} else {
			print.append("Host: ").append(host).append("</br>");
			print.append("Port: ").append(port).append("</br>");
		}
	}

}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?