ColdFusion/IIS/重定向限制?

ColdFusion / IIS / Redirect Limit?

我有一个 ColdFusion 脚本,它执行一个任务,然后使用 <cflocation> 标签重定向到它自己,传递下一个要处理的 ID。该脚本在 EXACTLY 51 行后停止工作。我认为这是代码中的一个错误,所以我将要处理的 ID 更新为 52,它从 ID 52 运行到 102 并停止。同样,恰好 51 行。

有谁知道 ColdFusion 对 cflocation 标签是否有限制?或者这可能是 IIS 正在做的事情?

当我使用 JavaScript window.location 方法时,它工作正常并且直到结束才停止 - 正如预期的那样。

已更新 - 说明

脚本在处理每个 ID 后重定向到自身的原因是因为 ColdFusion 在请求完成之前不会将 variables/memory 释放回 JVM。因此,对于执行数百个复杂任务的请求,内存使用量会持续增长,直到请求正式完成。这会在 JVM 中导致 ERROR OUT OF MEMORY。据我了解,纠正此问题的最佳方法是将项目拆分为单独的请求,这样 ColdFusion 就会将请求 variables/memory 释放回 JVM。因此,为什么我们要处理 1 个项目然后重定向到 self 传递下一个 ID 来处理。这是为了让 ColdFusion 将请求视为唯一并降低内存消耗。

我不确定 ColdFusion/IIS 中是否存在限制,但我认为浏览器具有故障保护功能以限制无限循环。在我的浏览器中(Chrome),似乎限制是 19。

克服这个问题的方法是确保 HTML 加载,这样我们就不会混淆会话。然后使用以下任一方法重定向。

  1. window.location
  2. <meta http-equiv="refresh" content="0;url=http://example.com">.

这是一个 "ugly hack" 但是,如果您找不到其他选择,也许您想尝试一下。

我能够通过从 ColdFusion 执行 curl 来测试并 运行 这直到作为计划任务完成,因此它需要 curl 可用。


<cfparam name="url.id" default="0" />
<cfset url.id = url.id + 1 />


<!--- // your task code --->

<cffile 
    action = "append"
    file = "C:\inetpub\wwwroot\foo\redir-log.txt" 
    output = '#url.id#'>

<!--- // your task code --->


<!--- // condition to end the loop --->
<cfif (url.id lt 300)>

    <cfset args = [
        'http://127.0.0.1:53227/redir.cfm?id=#url.id#'
    ] />

    <cfexecute 
        name="curl" 
        arguments="#args#" 
        variable="output" 
        errorVariable="error" 
        timeout="0" 
    />

    <cfdump var="#output#" />
    <hr />

    <cfdump var="#error#" />
    <hr />

</cfif>