当前位置: 首页 > news >正文

C# 网络编程-关于请求头(Request Headers)和 响应头(Response Headers)作用(五)

以下是关于 HttpWebRequest请求头(Request Headers)响应头(Response Headers) 的详细说明,包括如何设置、读取及常见用法:

其实HttpClient 和 HttpWebRequest
在处理请求头和响应头方面有一些相似之处,但它们在使用方法和功能上存在一些差异。‌ 请求头和响应头的处理方式
‌HttpClient‌:

‌自定义请求头‌:HttpClient支持自定义HTTP请求头,这使得它能够更灵活地处理各种HTTP请求。通过设置HttpRequestMessage的Headers属性,可以添加或修改请求头‌

‌响应头信息‌:HttpClient在接收响应时,可以访问响应头信息,包括状态码和响应头。这使得开发者能够详细了解服务器的响应情况‌

‌HttpWebRequest‌:

‌自定义请求头‌:虽然HttpWebRequest也支持自定义HTTP请求头,但它的使用方式相对较为底层和复杂。开发者需要通过WebRequest.Create方法创建请求对象,并通过设置Headers属性来添加或修改请求头‌
‌响应头信息‌:HttpWebRequest在获取响应时,同样可以访问状态码和响应头信息,但整体使用过程相对繁琐‌


一、请求头(Request Headers)的设置

请求头用于向服务器传递客户端的附加信息(如身份验证、数据类型、客户端标识等)。可以通过 HttpWebRequest.Headers 属性或直接属性(如 ContentTypeAccept)进行设置。

1. 常见请求头设置示例
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://api.example.com");
request.Method = "POST";// 设置通用请求头
request.Headers.Add("X-Custom-Header", "MyValue"); // 自定义头// 设置用户代理(User-Agent)
request.UserAgent = "MyApp/1.0";// 设置内容类型(Content-Type)
request.ContentType = "application/json"; // 通常用于POST/PUT请求// 设置Accept头(告诉服务器期望的响应格式)
request.Accept = "application/json";// 设置身份验证头(如Basic Auth)
string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes("username:password"));
request.Headers.Add("Authorization", $"Basic {credentials}");// 设置超时头(可选)
request.Headers.Add("X-Request-Timeout", "5000"); // 示例自定义超时头
2. 常见请求头字段说明
头字段用途
User-Agent标识客户端(如浏览器或应用程序名称及版本)。
Content-Type指定请求体的MIME类型(如 application/json, application/x-www-form-urlencoded)。
Accept告知服务器客户端可接受的响应内容类型(如 application/json)。
Authorization传递身份验证信息(如Basic Auth、Bearer Token)。
Referer指示请求来源页面的URL。
Content-Length请求体的字节长度(通常自动计算,但可手动设置)。
X-Requested-With标识请求来源(如AJAX请求)。

二、响应头(Response Headers)的读取

响应头由服务器返回,包含关于资源元数据的信息(如内容类型、缓存策略、服务器信息等)。可以通过 HttpWebResponse.Headers 属性或直接属性(如 ContentType, StatusCode)读取。

1. 响应头读取示例
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{// 读取状态码Console.WriteLine($"Status Code: {response.StatusCode}"); // 如 200 OK// 读取通用响应头string contentType = response.ContentType; // 获取内容类型(如application/json)string server = response.Server;           // 获取服务器软件(如nginx/1.20)// 读取自定义响应头string customHeader = response.Headers["X-Custom-Header"];// 读取所有头字段foreach (string header in response.Headers){Console.WriteLine($"{header}: {response.Headers[header]}");}
}
2. 常见响应头字段说明
头字段用途
Content-Type响应内容的MIME类型(如 text/html, application/json)。
Content-Length响应体的字节长度。
Server服务器软件名称及版本(如 Apache/2.4.41)。
Set-Cookie设置客户端Cookie(可能有多个)。
Location重定向目标URL(3xx状态码时出现)。
Cache-Control缓存策略(如 no-cache, max-age=3600)。
X-Powered-By服务器后端技术(如 PHP/7.4.3)。

三、高级用法示例

1. 处理重定向(通过响应头 Location
try
{using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()){// 正常处理响应}
}
catch (WebException ex) when (ex.Response != null)
{HttpWebResponse errorResponse = (HttpWebResponse)ex.Response;if (errorResponse.StatusCode == HttpStatusCode.Found) // 302重定向{string redirectUrl = errorResponse.Headers["Location"];Console.WriteLine($"Redirect to: {redirectUrl}");// 可以递归重定向处理}
}
2. 设置和读取JSON请求/响应
// 设置JSON请求头
request.ContentType = "application/json";
request.Accept = "application/json";// 发送JSON数据
string jsonBody = "{\"key\":\"value\"}";
using (Stream stream = request.GetRequestStream())
using (StreamWriter writer = new StreamWriter(stream))
{writer.Write(jsonBody);
}// 读取JSON响应
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{string contentType = response.ContentType; // 应为application/jsonusing (StreamReader reader = new StreamReader(response.GetResponseStream())){string jsonResult = reader.ReadToEnd();Console.WriteLine(jsonResult);}
}
3. 处理Cookie(通过响应头 Set-Cookie
// 保存响应中的Cookie
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{// Cookie自动保存到cookieContainer
}// 后续请求自动携带Cookie
request.CookieContainer = cookieContainer;

四、注意事项

  1. 头字段的大小写:HTTP头字段名不区分大小写,但通常使用驼峰或大写形式(如 X-Custom-Header)。
  2. 头字段的覆盖:如果多次设置相同头字段,Headers.Add 会追加值,而 Headers.Set 会覆盖。
  3. 自动处理的头:某些头字段(如 Content-LengthHost)由 HttpWebRequest 自动处理,无需手动设置。
  4. 安全性:敏感信息(如 Authorization 头)应通过HTTPS传输以防止泄露。

五、总结

  • 请求头:通过 HttpWebRequest.Headers 或直接属性设置,用于控制请求行为和传递元数据。
  • 响应头:通过 HttpWebResponse.Headers 或直接属性读取,用于获取服务器返回的元数据。
  • 常见场景:身份验证(Authorization)、数据格式协商(Content-Type)、客户端标识(User-Agent)、重定向处理(Location)等。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/256253.html

相关文章:

  • SiteAzure:解决数据库服务器内存频繁吃满
  • 【Linux 平台总线驱动开发实战】
  • 三种语言写 MCP
  • 大数据量的分页,怎么办?
  • MagnTek MT6816-ACD 一款基于各向异性磁阻(AMR)技术的磁性角度传感器 IC
  • 现代浏览器剪贴板操作指南 + 示例页面 navigator.clipboard 详解与实战
  • 1.20.1 服务器系统(windows,Rocky 和 Ubuntu )体验
  • 浅议 3D 展示技术为线上车展新体验带来的助力​
  • 【Docker基础】Docker镜像管理:docker rmi、prune详解
  • 基于Spring Boot瀚森健身房会员管理系统设计与实现【源码+文档】
  • React JSX语法
  • 基于YOLO的智能车辆检测与记录系统
  • Vue.js 粒子连线动画组件 - FlyingLines
  • 【RAG优化】深度解析开源项目MinerU:从PDF解析到多模态理解的工业级解决方案
  • 《Whisper:开启语音识别新时代的钥匙》
  • 什么是跨域问题?后端如何解决跨域问题?
  • JVM(面试)
  • 【C/C++】Gtest + GMock 简单使用示例
  • 简说MQTT
  • 【分布式理论】读确认数与写确认数:分布式一致性的核心概念
  • C# 将 Enum枚举转成List,并显示在下拉列表中
  • 如何开发HarmonyOS 5的分布式通信功能?
  • 动态ds-vnp之normal和shortcut两种方式配置案例
  • 【软考高级系统架构论文】论企业应用系统的分层架构风格
  • AWS RDS/Aurora 开启 Database Insights 高级模式全攻略
  • SQL Server基础语句2:表连接与集合操作、子查询与CET、高级查询
  • 【Qt开发】网络运用
  • GitHub OAuth 认证示例
  • Linux - 安装 git(sudo apt-get)
  • Vue 简写形式全解析:清晰记忆指南