Apache同源请求阻塞

Posted

技术标签:

【中文标题】Apache同源请求阻塞【英文标题】:Apache same orgin request blocking 【发布时间】:2011-11-01 21:59:40 【问题描述】:

当我尝试在同一浏览器的不同选项卡中从我的服务器加载两个相同页面时,它会等待一个完成,然后再启动另一个。这很好,但我有一个 cron 进程需要调用同一个脚本的多个调用,我不能有这种类型的阻塞行为。我认为这是因为该进程与服务器具有相同的会话/连接,并且默认行为是一次只允许来自同一来源的一个请求......我该如何解决这个问题?我想要做的是让一个 cron 进程能够触发对我的一个脚本的调用,并且 apache 启动一个目标脚本的新实例来处理每个脚本的请求。这可能吗?

【问题讨论】:

【参考方案1】:

您是否在使用 php 的标准基于文件的会话? PHP 会在您执行 session_start() 时锁定会话并保持文件锁定直到脚本退出,或者您执行 session_write_close()

这会阻止提供任何其他启用会话的页面,因为在解除锁定之前它们无法访问会话文件。

session_write_close() 可以在脚本中的任何位置调用。它所做的只是写出当时的 _SESSION 数组,但保留该数组可供读取。如果您需要进行任何修改,您可以随时在脚本上重新打开会话。

基本上,你会有

<?php

session_start(); // populate $_SESSION;
session_write_close(); // relinquish session lock

.... dome some really heavy duty long computations

session_start();
$_SESSION['somekey'] = $new_val;

【讨论】:

我不确定这是否是整个问题,但我认为这绝对是问题的一部分......我现在正在测试它,我会让你知道它是怎么回事。 我认为这是一些阻碍,所以感谢您提供的信息。【参考方案2】:

我不认为php continue有什么问题,其实我喜欢它的表现方式

使用继续 2;因为 continue 将与 switch 中的刹车相同,而 for、while、foreach 等循环将在退出 switch 后继续执行。

以下示例将仅回显 1,因为我正在中断 switch 和 foreach 的继续。

$un_array=array(1,2); foreach($un_array as $num) 开关($num) 情况1: //没有 休息; 案例2: 继续2; 休息; 回声 $num; 出口;

【讨论】:

以上是关于Apache同源请求阻塞的主要内容,如果未能解决你的问题,请参考以下文章

Jsonp的js实现,跨域请求,同源策略机制

ajaxaxios请求之同源策略与CORS

同源策略/AJAX 请求

同源策略与跨域请求

同源策略与跨域请求

Django框架 之 跨域请求伪造