You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测浏览器的‘输入式’HTTP请求及view-source发起的请求?

区分浏览器预加载请求与实际访问请求

这类地址栏输入触发的请求是浏览器的预取/预加载请求(如Chrome Omnibox预加载、Firefox地址栏预览),用于提前加载资源提升体验,但会导致服务器重复执行业务逻辑。区分方法如下:

1. 核心判断:请求头标识

浏览器会为预加载请求添加特殊请求头,可通过Request.ServerVariables读取对应变量(请求头名转大写、连字符替换为下划线,前缀加HTTP_):

  • 检查HTTP_PURPOSE或HTTP_X_PURPOSE:值通常为prefetch、preview或prerender
  • 检查HTTP_SEC_PURPOSE:新标准头,值包含prefetch或preload

ASP代码示例:

Dim isPrefetch
isPrefetch = False
If Request.ServerVariables("HTTP_PURPOSE") = "prefetch" Or _
   Request.ServerVariables("HTTP_X_PURPOSE") = "preview" Or _
   InStr(Request.ServerVariables("HTTP_SEC_PURPOSE"), "prefetch") > 0 Then
    isPrefetch = True
End If

If isPrefetch Then
    ' 跳过耗时逻辑,返回轻量响应或直接终止
    Response.Status = "204 No Content"
    Response.End()
End If

2. 辅助判断维度

  • 预加载请求通常为GET方法,部分浏览器不会携带用户会话Cookie
  • 少数浏览器会在HTTP_USER_AGENT中包含预加载相关标识,但可靠性低于请求头

捕获view-source:发起的请求

view-source:协议发起的请求本质是普通GET请求,但不同浏览器存在差异化标识:

  • Firefox会发送X-View-Source: true请求头,可通过Request.ServerVariables("HTTP_X_VIEW_SOURCE")读取
  • Chrome/Edge等浏览器暂无统一特殊头,可通过以下方式辅助判断:
    • 请求的HTTP_REFERER为空(用户直接在地址栏输入view-source:URL)
    • 该请求无后续静态资源(JS/CSS/图片)的关联请求(需结合访问日志分析)

ASP代码示例:

Dim isViewSource
isViewSource = False
' 检测Firefox的view-source专属标识
If Request.ServerVariables("HTTP_X_VIEW_SOURCE") = "true" Then
    isViewSource = True
End If
' 辅助判断:空Referer场景
If isViewSource = False And Request.ServerVariables("HTTP_REFERER") = "" Then
    ' 可结合日志二次验证是否为view-source访问
End If

If isViewSource Then
    ' 执行自定义逻辑,如记录日志、限制访问等
End If

注意:不同浏览器实现存在差异,无法100%准确识别所有view-source请求,需结合业务场景调整策略。


内容的提问来源于stack exchange,提问作者user5713140

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 18:52:49