C# 网络编程-关于HTTP/HTTPS的基础(一)

一、HTTP基础概念

1. 请求-响应模型

HTTP是基于客户端-服务器的无状态协议,流程如下:

  1. 客户端(如浏览器)发起请求。
  2. 服务器接收请求并处理。
  3. 服务器返回响应,包含状态码、Header和响应体。
  4. 连接关闭,后续请求需重新建立。
链接
后续请求需重新建立连接
客户端发起HTTP请求
服务器接收并处理请求
服务器返回HTTP响应
服务器返回HTTP响应
关闭连接
客户端发起新请求

A → B → C → D → E 表示一次完整的HTTP请求-响应流程。
E → F 表示后续请求需重新建立连接(可选循环)。

  1. 客户端发起请求 :客户端(如浏览器)向服务器发送HTTP请求。
  2. 服务器接收并处理请求 :服务器接收请求并执行相应的处理逻辑(如查询数据库、生成内容等)。
  3. 服务器返回响应 :服务器将处理结果打包成HTTP响应,包含状态码、Header和响应体。
  4. 连接关闭 :HTTP协议默认为无状态,响应完成后关闭连接。
  5. 后续请求需重新建立 :如果客户端需要发起新请求,必须重新建立TCP连接(如HTTP/1.0),或可复用连接(HTTP/1.1的Keep-Alive)。
2. HTTP状态码分类
  • 1xx(信息性状态码):请求已接收,继续处理。
    • 100 Continue:服务器已收到请求头,客户端可继续发送正文。
  • 2xx(成功状态码)
    • 200 OK:请求成功。
    • 201 Created:资源创建成功。
  • 3xx(重定向)
    • 301 Moved Permanently:资源永久移动。
    • 302 Found:临时重定向。
  • 4xx(客户端错误)
    • 400 Bad Request:请求格式错误。
    • 401 Unauthorized:未授权。
    • 403 Forbidden:服务器拒绝访问。
    • 404 Not Found:资源不存在。
  • 5xx(服务器错误)
    • 500 Internal Server Error:服务器内部错误。
    • 503 Service Unavailable:服务器过载或维护。
3. HTTP Headers
  • 请求头(Request Headers):
    • User-Agent:客户端标识(如浏览器类型)。
    • Content-Type:请求体的MIME类型(如application/json)。
    • Accept:客户端可接受的响应类型。
    • Authorization:认证信息(如Bearer Token)。
  • 响应头(Response Headers):
    • Content-Type:响应体的MIME类型。
    • Set-Cookie:设置客户端Cookie。
    • Location:重定向的URL(3xx状态码时使用)。
    • Cache-Control:缓存策略(如no-cache)。
4. Cookie/Session机制
  • Cookie
    • 存储在客户端(浏览器),用于传递会话标识。
    • Set-Cookie:服务器设置Cookie(如Set-Cookie: sessionId=abc123; Path=/)。
    • Cookie:客户端在后续请求中自动携带Cookie。
  • Session
    • 服务端存储会话数据,通过Cookie传递Session ID(如JSESSIONID)。
    • 无状态协议下,通过Cookie关联客户端与服务端Session。

二、HTTPS加密原理(SSL/TLS)

1. SSL/TLS协议概述

HTTPS = HTTP + SSL/TLS,通过加密通信保护数据传输。TLS是SSL的升级版,当前主流为TLS 1.2/1.3。

2. 握手过程(TLS 1.2为例)
  1. ClientHello:客户端发送支持的加密套件(如TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384)、协议版本、随机数。
  2. ServerHello:服务器选择加密套件和协议版本,发送自己的随机数。
  3. 证书交换
    • 服务器发送SSL证书(含公钥)。
    • 客户端验证证书有效性(CA签名、域名匹配等)。
  4. 密钥交换
    • 客户端生成预主密钥(Pre-Master Secret),用服务器公钥加密后发送。
    • 双方协商主密钥(Master Secret),用于生成对称加密密钥。
  5. 加密通信: 使用对称加密(如AES)加密后续数据,MAC(如HMAC)验证完整性。
3. 加密与认证机制
  • 非对称加密(如RSA/ECDH):用于初始密钥交换,确保密钥安全。
  • 对称加密(如AES):用于高效加密应用数据。
  • 证书认证:通过CA(证书颁发机构)验证服务器身份。
  • 前向保密(PFS):使用ECDHE等算法,确保单个密钥泄露不影响其他会话。

三、C#实现方案

1. 使用HttpClient发送HTTP/HTTPS请求
using System.Net.Http;
using System.Threading.Tasks;public class HttpClientExample
{public async Task<string> SendGetRequest(string url){using var client = new HttpClient();HttpResponseMessage response = await client.GetAsync(url);response.EnsureSuccessStatusCode(); // 抛出异常(如404/500)return await response.Content.ReadAsStringAsync();}
}
2. 设置请求头与处理响应
public async Task<string> SendPostRequest(string url, string jsonContent)
{using var client = new HttpClient();var content = new StringContent(jsonContent, Encoding.UTF8, "application/json");// 设置请求头client.DefaultRequestHeaders.Add("User-Agent", "MyApp/1.0");client.DefaultRequestHeaders.Add("Authorization", "Bearer your_token");HttpResponseMessage response = await client.PostAsync(url, content);return await response.Content.ReadAsStringAsync();
}
3. Cookie管理(自动处理)
// 使用CookieContainer自动管理Cookie
var handler = new HttpClientHandler
{CookieContainer = new CookieContainer()
};
using var client = new HttpClient(handler);// 首次请求设置Cookie
await client.GetAsync("https://example.com/login");// 后续请求自动携带Cookie
var response = await client.GetAsync("https://example.com/protected");
4. 处理HTTPS证书问题(测试环境)
// 忽略证书验证(仅用于测试!生产环境应避免)
ServicePointManager.ServerCertificateValidationCallback +=(sender, cert, chain, sslPolicyErrors) => true;// 使用HttpClient
using var client = new HttpClient();
var response = await client.GetAsync("https://self-signed-site.com");
5. 低级TLS通信(SSLStream示例)
using System.Net.Security;
using System.Net.Sockets;
using System.Security.Cryptography.X509Certificates;public async Task UseSSLStream()
{var tcpClient = new TcpClient("example.com", 443);var stream = tcpClient.GetStream();// 创建SSL流,验证服务器证书var sslStream = new SslStream(stream,false,(sender, cert, chain, errors) => {// 自定义证书验证逻辑return cert != null && cert.Get IssuerName.Name == "Your CA";});await sslStream.AuthenticateAsClientAsync("example.com");// 发送请求并读取响应byte[] requestBytes = Encoding.UTF8.GetBytes("GET / HTTP/1.1\r\nHost: example.com\r\n\r\n");await sslStream.WriteAsync(requestBytes, 0, requestBytes.Length);byte[] buffer = new byte[4096];int bytesRead = await sslStream.ReadAsync(buffer, 0, buffer.Length);string response = Encoding.UTF8.GetString(buffer, 0, bytesRead);
}

四、关键注意事项

  1. HTTPS安全性
    • 生产环境禁用ServerCertificateValidationCallback忽略证书错误。
    • 使用最新TLS版本(TLS 1.2/1.3)和加密套件。
  2. HttpClient复用:避免频繁创建HttpClient,应作为单例使用(防止Socket耗尽)。
  3. 异常处理:捕获HttpRequestException处理网络错误或状态码异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/85922.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/85922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序右上角○关闭事件

小程序用户真实离开事件追踪&#xff1a;一场与技术细节的博弈 在数据分析的场景下&#xff0c;精准捕捉用户行为至关重要。我们遇到了这样一个需求&#xff1a;在小程序的埋点方案中&#xff0c;只记录用户真正意义上的离开&#xff0c;即通过点击小程序右上角关闭按钮触发的…

数据库高性能应用分析报告

数据库高性能应用分析报告 引言摘要 在数字经济加速发展的今天&#xff0c;数据库性能已成为企业核心竞争力的关键要素。根据Gartner 2024年最新研究&#xff0c;全球企业因数据库性能问题导致的直接经济损失高达每年420亿美元&#xff0c;同时性能优化带来的业务提升可达到2…

Java使用itext pdf生成PDF文档

Java使用itext pdf生成PDF文档 Java使用itextpdf生成PDF文档 在日常开发中&#xff0c;我们经常需要生成各种类型的文档&#xff0c;其中PDF是最常用的一种格式。本文将介绍如何使用Java和iText库生成包含中文内容的PDF文档&#xff0c;并通过一个具体的示例来展示整个过程。…

利用VBA将Word文档修改为符合EPUB3标准规范的HTML文件

Word本身具有将docx文件转换为HTML文件的功能&#xff0c;但是转换出来的HTML文档源代码令人不忍卒读&#xff0c;占用空间大&#xff0c;可维护性极差&#xff0c;如果想给HTML文档加上点自定义交互行为&#xff0c;也不是一般的麻烦。如果文档中包含注释&#xff0c;对于Word…

开发语言本身只是提供了一种解决问题的工具

前言 你是否曾经注意到&#xff0c;在中国的软件工程师日常工作中&#xff0c;他们使用的工具界面大多为英文&#xff1f;从代码编辑器到开发框架文档&#xff0c;再到错误信息提示框&#xff0c;英语似乎已经成为了计算机领域事实上的标准语言。那么为什么在全球化日益加深的…

2024计算机二级Python真题精讲|第一套(易错点分析)

一、选择题 1.计算机完成一条指令所花费的时间称为一个( )。 A.执行时序 B.执行速度 C.执行速度 D.指令周期 答案 D 一般把计算机完成一条指令所花费发时间称为一个指令周期。指令周期越短&#xff0c;指令执行就越快。 2.顺序程序不具有&#xff08; &#xf…

BGP路由反射器(RR)实验详解,结尾有详细脚本

目录 路由反射器基础概念 实验拓扑与设计 实验配置步骤 配置验证与排错 实验总结 完整配置命令集 路由反射器基础概念 在传统的IBGP网络中&#xff0c;为了防止路由环路&#xff0c;BGP规定通过IBGP学到的路由不能再传递给其他IBGP对等体&#xff0c;这导致所有IBGP路由…

(aaai2025) SparseViT: 用于图像篡改检测的Spare-Coding Transformer

论文&#xff1a;(aaai2025) SparseViT: Nonsemantics-Centered, Parameter-Efficient Image Manipulation Localization through Spare-Coding Transformer 代码&#xff1a;https://github.com/scu-zjz/SparseViT 这个论文研究的是图像篡改检测&#xff08;Image Manipulatio…

C#测试调用Markdig解析Markdown的基本用法

Markdig是.NET平台的高性能开源Markdown处理器&#xff0c;严格遵循 CommonMark 标准&#xff0c;确保解析一致性&#xff0c;其核心优势在于扩展性强&#xff1a;通过模块化管道模型&#xff0c;可轻松添加自定义语法或修改现有逻辑。Markdig内置支持表格、任务列表、数学公式…

MySQL 主从同步完整配置示例

以下是 MySQL 主从同步完整配置示例&#xff08;基于 Linux 系统&#xff09;&#xff0c;包含主库和从库的配置步骤&#xff1a; 一、主库&#xff08;Master&#xff09;配置 1. 安装 MySQL&#xff08;以 CentOS 为例&#xff09; yum install -y mysql-server systemctl …

可信启动与fTPM的交互验证(概念验证)

安全之安全(security)博客目录导读 目录 一、组件构成 二、Arm FVP平台PoC构建 三、在Armv8-A Foundation FVP上运行PoC 四、微调fTPM TA 可信启动&#xff08;Measured Boot&#xff09;是通过密码学方式度量启动阶段代码及关键数据&#xff08;例如使用TPM芯片&#xff…

SQL Server基础语句4:数据定义

文章目录 一、数据库与架构1.1 创建与删除数据库1.1.1 使用CREATE DATABASE语句创建数据库1.1.2 使用DROP DATABASE语句删除数据库1.1.3 使用SSMS创建数据库1.1.4 使用SSMS删除数据库 1.2 CREATE SCHEMA&#xff1a;创建新架构1.2.1 Schema简介1.2.2 使用CREATE SCHEMA语句创建…

上门按摩app会员系统框架搭建

一、逻辑分析 用户注册与登录&#xff1a; 新用户需要提供基本信息&#xff0c;如姓名、手机号、邮箱等进行注册。手机号用于接收验证码进行身份验证&#xff0c;邮箱可用于密码找回等功能。注册成功后&#xff0c;用户可以使用手机号 / 邮箱和密码进行登录。登录时需要验证用户…

java项目打包成jar包,并给jmeter使用

1.新建项目 编写代码&#xff0c;导入必要的jar包&#xff0c; 右键点击项目&#xff0c;然后export&#xff0c;选择main函数&#xff0c; package utils; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import java.util.Random; …

【Qt开发】Qt音频

Qt中&#xff0c;视频播放的功能主要是通过 QMediaPlayer类和 QVideoWidget类来实现。在使用这两个类时&#xff0c;需要在 .pro项目配置文件中添加对应的模块——multimedia 和 multimediawidgets。 核心的API如下&#xff1a; 下面来模拟实现音频文件的播放。 Widget::Widget…

椭球面上梯形面积的通用公式和图幅公式

import numpy as np def ellipsoidal_trapezoid_area(a, b, phi1_deg, phi2_deg, delta_L_deg, is_map_sheetFalse): """ 计算椭球面上梯形面积的通用公式和图幅公式 参数: a: 椭球长半轴&#xff08;米&#xff09; b: 椭球…

Pytest 入门:测试函数与测试类详解

概述 在编写自动化测试时,了解如何组织和管理测试用例是至关重要的。Pytest 提供了灵活的方式来定义测试函数和测试类,并支持多层次的设置(setup)和清理(teardown)机制,帮助你更高效地进行代码验证。本文将详细介绍 测试函数 和 测试类 的概念、定义、注意点以及实际操…

大模型的部署简单搭建

大模型的部署搭建 真的好久没有进行博客的写作了,原因,最近的自己生活有点小波动, 最近想想还是有空写一篇文章,这篇文章的描述是学习的当下热门AI 本期,介绍的也是AI相关的LLM(大语言模型) 这个好多人应该都是模糊的,包括我一开始没有学习,就感觉牛逼的不行,今天我们亲自部署实…

基于ssm英语学习交流平台微信小程序源码数据库文档

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了英语学习交流平台小程序的开发全过程。通过分析英语学习交流平台小程序管理的不足&#xff0c;创建了一个计算机管理英语学习交流平台小程序的方案。文章介绍了英…

华为云Flexus+DeepSeek征文|在Dify-LLM平台中开发童话故事精灵工作流AI Agent

华为云FlexusDeepSeek征文&#xff5c;在Dify-LLM平台中开发童话故事精灵工作流AI Agent &#x1f31f;嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 目录…