我正在开发一个测试页面,该页面仅供我自己使用,仅供Google Chrome使用。有没有办法用这样的条件对第三方服务器(不允许这样的请求)执行跨域请求?请求可以是GET
或OPTIONS
。
(我知道Chrome扩展程序,如高级REST客户端,它可以执行此类请求,但它对我没有帮助,因为复杂的计算应该在请求执行之前执行)
答案 0 :(得分:1)
一种方法是从Web服务器而不是本地文件系统提供文件。另一种方法是使用标志启动Chrome:
chrome --disable-web-security
(来自Cross-origin image load denied on a local image with THREE.js on Chrome)
这里有更广泛的标志列表:http://peter.sh/experiments/chromium-command-line-switches/
答案 1 :(得分:1)
我正在开发一个与此类似的项目,我不得不将一个简单的html文件上传到我的一个prod服务器进行测试,这样我就可以测试跨域功能了。 html文件指向localhost,因此它只适用于我在开发过程中。
jquery代码看起来像这样(以防它有帮助):
$.ajax({
type: "POST",
dataType: "json",
cache: false,
url: url,
data: data,
crossDomain: true,
success: function (data) {
ATSJBAjax = null;
if (callback != null) callback(data);
}
});
此外我正在使用c#/ MVC,我必须向所有控制器方法添加一个属性,将“Access-Control-Allow-Origin”添加到响应标头中,以便Chrome可以正常使用它。我调用了属性“AllowCrossDomainAccess”,它引用了下面的类:
public class AllowCrossDomainAccessAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
base.OnActionExecuting(filterContext);
}
}
答案 2 :(得分:1)
一种选择是完全禁用同源策略,详见Disable same origin policy in Chrome。这可能会对你有所帮助,但它有点不优雅,因为它关闭了整个浏览器实例的同源策略。
第二个选项是创建一个小型Chrome扩展程序,其中包含您需要加载的所有文件。它将使您的文件可以通过chrome-extension://...
访问,并且只有该扩展名中的文件才能免受同源政策的影响。
创建一个新文件夹,将测试网页放入其中,并在同一文件夹中创建manifest.json
文件:
/testing_extension
test_page_immune_from_same_origin.html
script_used_by_test_page.js
styles_for_test_page.css
manifest.json
manifest.json
的内容应为
{
"name": "All-origin access extension",
"manifest_version": 2,
"version": "1.0",
"permissions": ["<all_urls>"]
}
加载扩展程序,转到chrome://extensions
,启用Developer Mode
,然后选择带Load unpacked extension...
选项的新文件夹。
您可以将自己的页面视为扩展资源chrome-extension://[app_id]/[file_name]
,其中&#34; app_id
&#34;是chrome://extensions
页面上扩展名列出的哈希值。 (它将是一长串小写字母。)现在,当页面执行跨源资源时,它会使用浏览器扩展的权限,不受同源策略的限制。
请注意,您需要移动任何inline scripts into separate files才能符合扩展CSP要求。