绕过 CloudFlare 的 100 秒超时

gor*_*613 5 javascript ajax asynchronous timeout cloudflare

我正在尝试对我的报告进行 AJAX 化,以绕过 CloudFlare 对通过其站点运行的请求施加的 100 秒超时。

请参阅是否可以增加 CloudFlare 超时?

我做了以下事情:

function ajaxReport() {
    var seconds = prompt("Please enter how many seconds you want the report to run", "5");
    $('#imgWaiting').show();
    $.post("post/post_ajaxReport.jsp",
  {
    theParam:seconds
  },function(data) {
    $('#imgWaiting').hide();
    window.location=data;
 });

}
Run Code Online (Sandbox Code Playgroud)

以及 post_ajaxReport.jsp 的以下内容

<%
 int theParam=myFunctionToConvertStringToInt(request.getParameter("theParam"));
int a=theParam/60;
int b=theParam-a*60;
String query="WAITFOR DELAY '00:"+a+":"+b+"';";
double d=myCustomCodeToRunQuery(query);
String fileName=createReport();
%>
<%=fileName%>
Run Code Online (Sandbox Code Playgroud)

该代码在 100 秒内运行良好。但没有工作超过100秒。

有任何想法吗?

反馈后更新

我的报告现在可以在没有 AJAX 的情况下正常工作(尽管 CloudFlare 有 100 秒超时)。我试图将它们转换为 AJAX,以避免因为我不想暴露我的 IP 地址而使子域变灰蒙蒙。如果我要对子域进行灰云处理,我会在原始代码上进行,这比 AJAX 化我的代码要简单得多!我的问题是“如何修复我的 AJAX 代码,以便我可以避免 100 秒超时,但又不会暴露我的 IP 地址……”

gor*_*613 4

如果其他人也遇到同样的问题,我将发布我最终如何解决这个问题的。我放弃了尝试使用 AJAX 来运行报告,而是通过线程运行报告,但使用 AJAX 来“轮询”以检查报告是否已创建。我所做的基本上如下。

请注意,我从代码中删除了很多内容,例如安全例程和错误检查例程,只是为了提供基本框架。

我创建了一个名为 ThreadMyReport 的 java 类

public class ThreadMyReport implements Runnable {

    String fileID = "";
    Date dateOfReport = null;

    public ThreadMyReport(Date dateOfReport) {
        this.fileID= "MyReport_" + UUID.randomUUID();
        this.dateOfReport = dateOfReport;
    }

    public void run() {
        int a = ReportMyReport.loadAndSaveMyReport(dateOfReport, fileID);
    }


    public String getFileID() {
        return fileID;
    }
}
Run Code Online (Sandbox Code Playgroud)

我用于生成报告的所有原始代码都可以在 ReportMyReport.loadAndSaveMyReport 中找到。报告完成后,会在服务器上保存一个带有 fileName fileID 的文件。

然后我启动了一个线程来运行报告

    ThreadMyReport a  = new ThreadMyReport(theDate);
    Thread theThread=new Thread(a);
    theThread.start();
    fileID=a.getFileID();
Run Code Online (Sandbox Code Playgroud)

然后,我添加了一个 javascript 例程,每秒通过 AJAX 检查文件是否已创建,如果已创建则显示报告。

<SCRIPT language="javascript">


    var myVar;
    myVar=setInterval(function (){
    $.post("post/post_checkReportReady_xml.jsp", {
       generatedReport: '<%=fileID%>'
    }, function(data) {
       if (data.indexOf("produced")>-1) {
           clearInterval(myVar);
           //display report
       }
       if (data.indexOf("failed")>-1) {
           clearInterval(myVar);
       }
    });

}, 1000);
        </SCRIPT>
Run Code Online (Sandbox Code Playgroud)

AJAX 代码如下所示:

     <%
    String result="";

    String generatedReport=(request.getParameter("generatedReport"));

    if(!"".equals(generatedReport)) {
        String fileName2="My directory/"+generatedReport+".xlsm"; 
        java.io.File f = new java.io.File(fileName2);
        if(f.exists()) { 
            result="produced";
        }
    }
}

%>
<%=result%>
Run Code Online (Sandbox Code Playgroud)