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 加载,这样我们就不会混淆会话。然后使用以下任一方法重定向。
window.location
<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>
我有一个 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 加载,这样我们就不会混淆会话。然后使用以下任一方法重定向。
window.location
<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>