HttpServletRequest getServerPort()、getLocalPort() 、getRemotePort() 区别

getRemotePort() 、getServerPort()、getLocalPort()

request.getServerPort()request.getLocalPort()request.getRemotePort() 这三个方法都是获取与HTTP请求相关的端口信息

客户端(如浏览器)通过某个随机分配的网络连接端口(7070)
向服务器发送HTTP请求( http://example.com:8080/app/somepage.jsp)连接到服务器端口(8080)。
反向代理或负载均衡场景下,请求可能从端口(8080)转发到另一个端口(9090)进行处理。

request.getRemotePort(): 发起请求的客户端所使用的端口号 7070
request.getServerPort(): 浏览器发送请求时连接到的服务器端口 8080
request.getLocalPort(): 当前处理请求的服务器上的本地端口 9090

在这里插入图片描述

getRemoteHost()、getServerName()、getLocalName()区别

request.getRemoteHost(): 返回客户端主机的名称,而不是直接的IP地址 实现机制通常是通过DNS反向查询 request.getRemoteAddr() 返回的IP地址以得到对应的主机名。如果反向解析失败、出于性能原因未进行反向解析、没有进行DNS查询的能力,可能会返回与 getRemoteAddr() 相同的IP地址,或者在某些情况下返回 null

request.getServerName(): 客户端请求时所使用的服务器域名IP地址 http://example.com:8080/app/somepage.jsp 访问时就是"example.com"
http://192.168.0.1:8080/app/somepage.jsp 访问时就是"192.168.0.1"

request.getLocalName(): 当前处理请求的服务器的本地主机名或IP地址,在多宿主环境、有反向代理、负载均衡器的情况下,这个值可能与客户端直接连接的主机名或IP不同。 假设服务器的本地主机名是 “local-server” 或者内部IP地址是 “10.0.0.5”,那么返回就是 “local-server” 或"10.0.0.5"

在这里插入图片描述

getRemoteAddr()、getLocalAddr()区别

request.getRemoteAddr(): 发起HTTP请求的客户端(例如浏览器)的IP地址 在实际应用中,如果存在反向代理、负载均衡器等网络组件时,可能需要通过特定的HTTP头(如 X-Real-IPX-Forwarded-For)来获取真实的客户端IP地址,因为这些网络组件可能会修改原始请求的来源信息。

request.getLocalAddr(): 当前处理请求的服务器接口绑定的IP地址 在多网络接口、多宿主配置的服务器上,这个值会是接收并处理当前请求的那个网络接口的IP地址。

用户通过浏览器(设备IP地址是 103.56.78.90)访问部署在服务器上的Web应用(IP地址 192.168.1.10,监听端口 8080)
request.getRemoteAddr() : “103.56.78.90”
request.getLocalAddr() : “192.168.1.10”

getContentLength():

getContentLength(): 获取客户端发送到服务器的HTTP请求主体内容的字节数(长度) 如果请求没有正文内容(如GET),或者请求头中没有包含Content-Length字段,则该方法返回 -1

getContentType(): 获取客户端发送数据的MIME类型(Multipurpose Internet Mail Extensions)。 如 "text/html"、"application/json" 或 "multipart/form-data" 等,如果请求没有指定内容类型,那么该方法将返回 null

getContextPath(),getRequestURI() ,getServletPath() ,getPathInfo()区别

getContextPath(): 获取当前Web应用的上下文路径(Context Path)。上下文路径是位于Web服务器域名资源路径之间的部分,以正斜杠 / 开始,但不以 / 结束。如果应用程序部署在服务器的根目录下(即默认上下文),则返回空字符串 "" 如果一个Web应用部署在 http://example.com/myapp 下,访问某个Servlet时,getContextPath() 方法将返回 "/myapp"

request.getRequestURI(): 包含了上下文路径(context path)和servlet路径,不包括查询参数(即URL中“?”之后的部分) 对于URL http://example.com/myApp/service/doSomething?param=value,如果应用上下文路径为 /myApp,则 getRequestURI() 将返回 /myApp/service/doSomething

request.getServletPath(): 不包括上下文路径(context path)和servlet路径,不包括查询参数(即URL中“?”之后的部分) 对于URL http://example.com/myApp/service/doSomething?param=value,如果应用上下文路径为 /myApp,则 getRequestURI() 将返回 /service/doSomething

request.getPathInfo() 获取客户端请求URL中除Servlet映射路径之外的额外路径信息。 如配置 @WebServlet("/api/*")后,对于URL http://example.com/myApp/api/v1/users/42 ,则request.getServletPath() 可能会返回 /api,因为这是Servlet映射的基础路径。 request.getPathInfo() 将返回 /v1/users/42,这是匹配Servlet映射之后剩余的具体路径信息。

request.getQueryString()

request.getQueryString(): 获取客户端在HTTP请求中发送的查询字符串 对于URL http://example.com/search?query=java&category=tutorial ,将返回 "query=java&category=tutorial" 这样的字符串

你可能感兴趣的:(网络编程,java)