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

做个网站多少费用公司网址有哪些

做个网站多少费用,公司网址有哪些,网页微信注册新号怎么注册,集团网站设计欣赏浏览器访问 ASP.NET Core wwwroot 目录下静态资源的底层实现 这是一个非常深入且底层的问题,我们来详细拆解一下浏览器访问 ASP.NET Core wwwroot 目录下静态资源的底层实现。 整个过程可以看作是一个管道(Pipeline),请求在其中流…

浏览器访问 ASP.NET Core wwwroot 目录下静态资源的底层实现

这是一个非常深入且底层的问题,我们来详细拆解一下浏览器访问 ASP.NET Core wwwroot 目录下静态资源的底层实现。

整个过程可以看作是一个管道(Pipeline),请求在其中流动,并经过一系列中间件的处理。核心在于 UseStaticFiles 中间件


底层实现流程概览

  1. 浏览器发起请求

    • 用户输入 URL,例如 https://example.com/css/site.css
    • 浏览器根据 URL 路径 /css/site.css 向服务器发送 HTTP GET 请求。
  2. Kestrel 接收请求

    • ASP.NET Core 的默认 web 服务器 Kestrel 监听配置的端口(如 5000, 443),接收到这个原始 HTTP 请求。
    • Kestrel 将请求初步解析并封装成一个抽象的 HttpContext 对象,该对象包含了请求的所有信息(如 Path, Headers)和用于响应的对象。
  3. 中间件管道处理

    • HttpContext 开始依次流过在 Program.cs 中注册的各个中间件(Middleware)。
    • 例如,可能会先经过异常处理中间件 (UseExceptionHandler)、HTTPS 重定向中间件 (UseHttpsRedirection) 等。
  4. 抵达 StaticFilesMiddleware

    • 当请求流到 app.UseStaticFiles() 这个中间件时,核心处理开始了。
  5. 匹配请求路径 (Path Matching)

    • StaticFilesMiddleware 首先检查 HttpContext.Request.Path(这里是 /css/site.css)。
    • 它会将这个请求路径与配置的文件提供程序(默认是 PhysicalFileProvider,指向 wwwroot)进行映射。
    • 中间件会将请求路径附加到 wwwroot 的物理路径上,形成完整的文件路径。例如:
      • 网站根物理路径:C:\MyWebApp\
      • 组合后完整路径:C:\MyWebApp\wwwroot\css\site.css
  6. 检查文件是否存在

    • 中间件使用 .NET 的 File.Exists 或类似 API 检查这个拼接后的物理路径是否对应一个真实存在的文件。
  7. 决策与响应

    • 情况一:文件不存在
      • 中间件确定这不是一个静态文件请求(或者请求的文件不存在)。
      • 它简单地调用 _next(context),将 HttpContext 转交给管道中的下一个中间件(例如 MVC 控制器或 Razor Pages)。这就是为什么你的 API 或页面请求不会被静态文件中间件拦截的原因。
    • 情况二:文件存在
      • 中间件将短路(Short-Circuit) 管道。这意味着它处理完这个请求后,不会再将请求传递给后续的中间件,直接返回响应。
      • 它开始处理响应的细节。
  8. 构建响应 (文件存在时)

    • 设置 Content-Type: 根据文件的扩展名(如 .css),从一个预定义的 MIME 类型映射表中查找对应的 Content-Type 响应头(如 text/css)。这个映射表可以通过 StaticFileOptions 进行配置和扩展。
    • 设置 Etag 和 Last-Modified
      • Etag: 中间件通常会根据文件的大小、最后修改时间等计算一个哈希值作为 Etag。这是一个用于缓存验证的标识符。
      • Last-Modified: 设置为文件系统的最后写入时间。
    • 处理条件请求 (Conditional Requests)
      • 浏览器再次访问时,可能会在请求头中带上 If-None-Match (值为之前的 Etag) 或 If-Modified-Since (值为之前的 Last-Modified)。
      • 中间件会比对请求头中的值和文件的当前状态。
      • 如果文件没有变化,中间件会设置响应状态码为 304 Not Modified,并返回一个空的响应体,极大地节省了带宽。这是静态文件高性能的关键。
    • 处理范围请求 (Range Requests)
      • 对于大文件(如视频),客户端可能会发送 Range 头,请求文件的某一部分。
      • 中间件支持解析这种请求,并返回状态码 206 Partial Content 和相应的文件字节范围。
  9. 传输文件内容

    • 如果文件存在且不是条件请求(或条件请求验证失败需要返回全文),中间件会通过 HttpContext.Response.Body 这个流,将文件的内容写入响应流。
    • 底层通常使用异步IO操作,以避免阻塞线程池线程,保证高性能和高并发。
  10. 浏览器接收响应

    • 浏览器收到 HTTP 响应,状态码为 200 OK304 Not Modified,并附带 Content-Type 头。
    • 浏览器根据 Content-Type 决定如何解释和处理内容(如解析 CSS、渲染图片)。

关键组件与概念

  1. StaticFileMiddleware: 核心中间件,实现了上述所有逻辑。
  2. FileProvider: 抽象的文件提供程序。默认是 PhysicalFileProvider,它从服务器的物理磁盘上读取文件。你也可以替换为其他提供程序,例如从嵌入式资源(EmbeddedFileProvider)、云端存储甚至数据库中提供“静态”文件。
  3. StaticFileOptions: 用于配置 UseStaticFiles 中间件的行为。
    • FileProvider: 更改静态文件的来源。
    • RequestPath: 更改匹配的请求路径前缀。例如 app.UseStaticFiles(new StaticFileOptions { RequestPath = "/static" }) 会让中间件只处理 /static 开头的请求,文件映射到 wwwroot 下。
    • ContentTypeProvider: 用于自定义或扩展 MIME 类型映射。
    • OnPrepareResponse: 一个钩子,允许你在发送响应前对每个静态文件请求的响应进行自定义操作(如添加自定义头)。

总结

访问 wwwroot 下的静态文件并非由某个控制器处理,而是由 UseStaticFiles 中间件直接短路管道来完成的。其底层实现是一个高效、功能完备的静态HTTP服务器,包含了路径解析、文件存在性检查、MIME类型推断、缓存验证(Etag & Last-Modified)、条件请求和范围请求处理等一系列标准操作,从而能以最佳性能安全地提供静态文件服务。

http://www.dtcms.com/a/522937.html

相关文章:

  • 誓做中国最大钓鱼网站广州微信网站建设公司哪家好
  • 网站与微信对接百度公司招聘官网
  • 宁波外贸网站开发唐山的网站建设
  • 网站开发如何找甲方上海网站建设大概多少钱
  • 网站如何做交换链接洛阳网站建设报价
  • 制作网站教学如何创建自己的卡网
  • 网站建设平台简介网站备案如何注销
  • 南通购物网站建设caddy wordpress
  • 做物流的用什么网站配货衡水做网站服务商
  • 小说阅读网站开发设计什么是网站反链
  • 百度不收录网站怎么办深圳市易百讯科技有限公司
  • 学建筑的网站seo工具优化
  • 萝岗公司网站建设网站开发建设公司电话
  • 还原wordpress站点地址恢复河北省建设执业资格注册中心网站
  • 好的外贸网站的特征做网站时连服务器上的数据库
  • 仿魔酷阁网站源码怎样做知道网站
  • 做钓鱼网站网站新备案不能访问
  • 17网站一起做网店广州新塘做网站排在前十名要多少钱
  • 品质好价格低的广告词网站seo优化有哪些方面
  • 繁昌网站建设哪些平台制作网站
  • 专门做衣服的网站哪里有服务好的深圳网站建设
  • 网站数据库连接失败口碑好的句容网站建设
  • 搜狗站长平台主动提交创可贴设计网站官网
  • 做制作网站找啥工作给网站人做网站
  • 南昌网站app开发如何做英文系统下载网站
  • 南宁怎么做网站平面设计素材免费
  • 做国内电影网站赚钱不有没有专业做汽车坐垫网站
  • 网站介绍ppt怎么做网站换dns
  • 工具刷网站排刷排名软件棋牌app开发多少钱
  • 杭州竞彩网站开发山东一建建设有限公司网站首页