编辑
2025-11-23
C#
00

目录

HTTP协议基础
什么是HTTP协议?
HTTP请求结构
HTTP请求结构示例
解析说明:
HTTP响应结构
HTTP响应结构示例
解析说明:
常见HTTP方法
常见HTTP状态码
HTTPS协议:安全的HTTP
什么是HTTPS?
HTTPS工作原理
HTTP vs HTTPS
C#实现HTTP通信
使用HttpClient发送GET请求
发送POST请求并传递JSON数据
总结

在当今互联网时代,HTTP/HTTPS协议是网络通信的基石,也是C#开发者必须掌握的核心知识。本文将深入剖析HTTP/HTTPS协议的工作原理,并结合C#实例,展示如何在实际开发中高效运用这些协议。无论你是网络编程新手,还是寻求提升的开发者,这篇文章都将为你提供全面而实用的指导。

HTTP协议基础

什么是HTTP协议?

HTTP(超文本传输协议)是一种应用层协议,设计用于在Web上传输超文本、图像、视频等内容。它基于客户端-服务器模型,是无状态的通信协议。

HTTP请求结构

典型的HTTP请求包含:

  • 请求行(方法、URL、协议版本)
  • 请求头(包含元数据)
  • 空行
  • 请求体(可选)

HTTP请求结构示例

以下是一个典型的HTTP POST请求的例子,包含了所有你提到的组成部分:

JSON
POST /api/users HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Accept: application/json Content-Type: application/json Content-Length: 64 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 { "username": "johndoe", "email": "john@example.com", "fullName": "John Doe" }

解析说明:

  1. 请求行
    • HTTP方法:POST
    • 请求URL:/api/users
    • 协议版本:HTTP/1.1
  2. 请求头
    • Host:指定服务器域名
    • User-Agent:标识客户端应用程序
    • Accept:指定客户端能够接收的内容类型
    • Content-Type:指定请求体的数据格式
    • Content-Length:请求体的字节长度
    • Authorization:认证信息,这里现在不少网站都需要这个了。
  3. 空行:分隔请求头和请求体的必要空行
  4. 请求体:JSON格式的数据,包含用户信息

HTTP响应结构

HTTP响应包含:

  • 状态行(协议版本、状态码、状态消息)
  • 响应头
  • 空行
  • 响应体

HTTP响应结构示例

以下是一个典型的HTTP响应的例子,包含了所有你提到的组成部分:

JSON
HTTP/1.1 200 OK Date: Mon, 27 Jul 2023 12:28:53 GMT Server: Apache/2.4.41 (Ubuntu) Content-Type: application/json Content-Length: 185 Cache-Control: no-cache Access-Control-Allow-Origin: * { "status": "success", "message": "User created successfully", "data": { "id": 12345, "username": "johndoe", "email": "john@example.com", "created_at": "2023-07-27T12:28:53Z" } }

解析说明:

  1. 状态行
    • 协议版本:HTTP/1.1
    • 状态码:200
    • 状态消息:OK
  2. 响应头
    • Date:响应生成的时间戳
    • Server:服务器软件信息
    • Content-Type:响应体的数据格式
    • Content-Length:响应体的字节长度
    • Cache-Control:缓存控制指令
    • Access-Control-Allow-Origin:跨域资源共享(CORS)设置
  3. 空行:分隔响应头和响应体的必要空行
  4. 响应体:JSON格式的数据,包含操作结果和用户创建信息

常见HTTP方法

方法描述是否幂等
GET请求获取资源
POST提交数据
PUT更新资源
DELETE删除资源
HEAD仅获取头信息
OPTIONS获取服务器支持的方法

常见HTTP状态码

  • 1xx:信息性状态码
  • 2xx:成功状态码(如200 OK)
  • 3xx:重定向状态码(如301 Moved Permanently)
  • 4xx:客户端错误状态码(如404 Not Found)
  • 5xx:服务器错误状态码(如500 Internal Server Error)

HTTPS协议:安全的HTTP

什么是HTTPS?

HTTPS(HTTP Secure)是HTTP协议的安全版本,通过SSL/TLS加密HTTP通信内容,提供数据机密性、完整性和身份验证。

HTTPS工作原理

  1. 客户端发送HTTPS请求
  2. 服务器返回SSL证书
  3. 客户端验证证书有效性
  4. 客户端和服务器协商加密算法
  5. 生成会话密钥
  6. 使用会话密钥加密通信内容

HTTP vs HTTPS

特性HTTPHTTPS
安全性不加密传输SSL/TLS加密传输
默认端口80443
URL前缀http://https://
证书要求不需要需要SSL证书
速度相对较快由于加密解密稍慢
SEO友好度一般更高(Google优先索引)

C#实现HTTP通信

使用HttpClient发送GET请求

C#
namespace AppCrawler { internal class Program { static async Task Main(string[] args) { // 创建HttpClient实例 using (HttpClient client = new HttpClient()) { try { // 发送GET请求 HttpResponseMessage response = await client.GetAsync("https://sieportal.siemens.com/zh-cn/home"); // 确保响应成功 response.EnsureSuccessStatusCode(); // 读取响应内容 string responseBody = await response.Content.ReadAsStringAsync(); // 输出响应内容 Console.WriteLine("响应状态码: " + (int)response.StatusCode); Console.WriteLine("响应内容: " + responseBody); } catch (HttpRequestException e) { // 异常处理 Console.WriteLine("请求异常: " + e.Message); } Console.ReadKey(); } } } }

image.png

发送POST请求并传递JSON数据

C#
using System.Text.Json; using System.Text; namespace AppCrawler { internal class Program { static async Task Main(string[] args) { // 创建HttpClient实例 using (HttpClient client = new HttpClient()) { try { // 准备要发送的数据 var data = new { name = "张三", age = 30, password = "123456" }; // 序列化为JSON string json = JsonSerializer.Serialize(data); // 创建StringContent对象,指定内容类型为application/json var content = new StringContent(json, Encoding.UTF8, "application/json"); // 发送POST请求 HttpResponseMessage response = await client.PostAsync("https://localhost:7242/api/User\r\n", content); // 确保响应成功 response.EnsureSuccessStatusCode(); // 读取响应内容 string responseBody = await response.Content.ReadAsStringAsync(); // 输出响应内容 Console.WriteLine("响应状态码: " + (int)response.StatusCode); Console.WriteLine("响应内容: " + responseBody); } catch (HttpRequestException e) { // 异常处理 Console.WriteLine("请求异常: " + e.Message); } Console.ReadLine(); } } } }

image.png

总结

HTTP/HTTPS协议是Web通信的基础,而C#提供了强大的工具如HttpClient来实现这些协议。通过本文介绍的实践方法,你可以构建安全、高效的网络应用程序。记住,良好的HTTP/HTTPS实现不仅关乎功能实现,还涉及性能优化和安全防护。

希望这篇文章对你的C#网络编程有所帮助!如有问题,欢迎在评论区讨论交流。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!