Request Headers请求头和Response Headers响应头

本文详细解析了HTTP请求头和响应头的作用及常见字段,包括Accept、Cache-Control、Cookie等请求头,以及Content-Type、Server、Vary等响应头,帮助读者深入理解HTTP通信机制。

Request Headers

Accept:告诉服务器,客户机支持的数据类型

Accept-Encoding:告诉服务器,客户机支持的数据压缩格式

Cache-Control:缓存控制,服务器通过控制浏览器要不要缓存数据

Connection:处理完这次请求,是断开连接还是保持连接

Cookie:客户机通过这个可以向服务器带数据

Host:访问的主机名

Upgrade-Insecure-Requests:参考http://www.cnblogs.com/hustskyking/p/upgrade-insecure-requests.html

User-Agent:告诉服务器,客户机的软件环境

Response Headers响应头

Connection:处理完这次请求后,是断开连接还是继续保持连接

Content-Encoding:服务器通过这个头告诉浏览器数据的压缩格式

Content-Length:服务器通过这个头告诉浏览器回送数据的长度

Content-Type:服务器通过这个头告诉浏览器回送数据的类型

Date:当前时间值

Server:服务器通过这个头告诉浏览器服务器的类型

Vary:Accept-Encoding ——明确告知缓存服务器按照 Accept-Encoding 字段的内容,分别缓存不同的版本;参考:https://imququ.com/post/vary-header-in-http.html

X-Powered-By:服务器告知客户机网站是用何种语言或框架编写的。

参考: https://blog.youkuaiyun.com/weixin_43453386/article/details/83792682#Header_40

在Java中,处理HTTP请求头响应头主要依赖于`HttpHeaders`类,它属于`org.springframework.http`包,用于设置、获取或操作HTTP头信息。`HttpHeaders`广泛应用于Spring框架中,特别是在处理HTTP请求响应时。以下将详细介绍如何使用`HttpHeaders`处理请求头响应头,并提供示例代码。 ### 设置请求头 可以通过创建`HttpHeaders`实例,并使用`set()`方法来设置请求头字段。这种方式常见于发送HTTP请求时构造请求头。 ```java import org.springframework.http.HttpHeaders; public class RequestHeaderExample { public static void main(String[] args) { HttpHeaders headers = new HttpHeaders(); headers.set("Accept", "application/json"); headers.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"); } } ``` ### 在控制器中处理请求头响应头 在Spring MVC中,可以使用`HttpEntity`来访问请求头响应头。`HttpEntity`不仅可以访问请求体响应体,还可以访问请求头响应头。 ```java import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.nio.charset.StandardCharsets; @RestController public class HeaderController { @RequestMapping(value = "/something", method = RequestMethod.GET) public ResponseEntity<String> handle(HttpEntity<byte[]> requestEntity) { String requestHeader = requestEntity.getHeaders().getFirst("MyRequestHeader"); byte[] requestBody = requestEntity.getBody(); HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.set("MyResponseHeader", "MyValue"); return new ResponseEntity<>("Hello World", responseHeaders, HttpStatus.CREATED); } } ``` ### 在响应中添加HTTP头 如果在处理HTTP响应时需要添加特定的头信息,可以使用`HttpServerResponse`对象的`putHeader()`方法。这种方式常见于基于Netty或Vert.x等框架的应用中。 ```java import io.vertx.core.Handler; import io.vertx.core.http.HttpHeaders; import io.vertx.core.http.HttpServerRequest; import io.vertx.core.http.HttpServerResponse; import io.vertx.ext.web.RoutingContext; public class BaseResponseHandler implements Handler<RoutingContext> { @Override public void handle(RoutingContext context) { HttpServerResponse response = context.response(); response.putHeader(HttpHeaders.CONTENT_TYPE, "application/json"); response.setChunked(true); context.next(); } } ``` ### 服务端设置响应头 在服务端设置响应头时,可以使用`response.headers().set()`方法,其中`HttpHeaders.Names`提供了一些标准头字段的常量。 ```java import io.netty.handler.codec.http.HttpHeaders; // 在服务端设置允许的请求头 response.headers().set(HttpHeaders.Names.ACCESS_CONTROL_ALLOW_HEADERS, HttpHeaders.Names.CONTENT_TYPE); ``` ### 总结 `HttpHeaders`在Java中是处理HTTP请求头响应头的重要工具,无论是客户端发起请求还是服务端处理响应,都可以通过它来设置、获取或修改头信息。通过上述示例可以看到,`HttpHeaders`的使用方式灵活,适用于多种场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值