我想做什么
从本地html / javascript网站发布到在线PHP文件。
问题
当我尝试使用下面的代码时,我不断收到以下提到的错误。
背景:
该网站旨在在本地运行。由于要由每个用户选择使用哪种浏览器,因此我希望找到一种可以解决上述问题的方法,而不必强加对每个用户修改浏览器策略。
如果可能的话,这可能吗?
JavaScript代码:
$.ajax({ type: 'POST', url: 'http://example.com/test.php', crossDomain: true, data: "my_request_is=foo", dataType: 'json', success: function(responseData, textStatus, jqXHR) { console.log(responseData); }, error: function (responseData, textStatus, errorThrown) { console.warn(responseData, textStatus, errorThrown); alert('CORS failed - ' + textStatus); } });
php代码(test.php):
<?php header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: POST, GET, OPTIONS'); header('Access-Control-Max-Age: 1000'); header('Access-Control-Allow-Headers: Content-Type'); echo json_encode(array("your_request_was" => $_POST['my_request_is'])); ?>
错误:
默认情况下,铬(file:协议中的铬)不允许跨域请求。您可以关闭chrome,chrome的打开实例并使用--disable-web-securityflag 启动
file:
--disable-web-security
google-chrome --disabled-web-security
或通过设置其他实例打开现有实例来启动 user-data-dir
user-data-dir
google-chrome --disable-web-security --user-data-dir="~/.config/google-chrome-temp"
有没有一种方法可以完成我需要做的事情,而又不需要我修改本地网络浏览器的政策?
不铬,不修改默认设置的铬;或创建Chrome扩展程序或应用来执行网络请求-也在此处permissions设置适当的位置。
permissions
限制是有目的的。几个安全问题之一是,本地计算机上的用户可能在不知不觉中将其计算机上一个或多个目录中的所有文件的列表(可能还有目录本身)上载,而不必了解这一事实
哪一个; 注意,也可能在未设置标志的情况下发生。或者,所请求的脚本可以执行操作以读取或写入本地文件系统,而用户不必知道外部脚本正在访问其本地文件系统。
但是,在有适当限制的情况下,用户必须执行肯定操作才能禁用默认设置file:,从而限制从协议访问本地文件系统,并限制本地文件系统从null origin其他来源获取资源。
null
origin
如@StefanoBalzarotti所述
抱歉,如果我很挑剔,但是此限制与’file:’协议无关,即使使用’data:’,’about:’等,也无法发出跨源请求。提出跨来源请求的要求是要有一个来源主机
浏览器开发人员为何会对跨源请求实施此类默认限制的原因应予以考虑。
节制地使用,并与国旗的意义,标志的意识--disable-web-security和--allow-file-access-from-files见
--allow-file-access-from-files
如何使Google Chrome浏览器的标志“ –allow-file-access-from-files”永久保存?
Chromium命令行开关列表
设计用于本地Web开发,而不是用于需要Web应用程序资源的本地应用程序。
--disable-web-security不要执行同源政策。(供测试他们的网站的人使用。) --allow-file-access-from-files默认情况下,file:// URI无法读取其他file:// URI。对于需要旧行为进行测试的开发人员来说,这是一个替代。
--disable-web-security不要执行同源政策。(供测试他们的网站的人使用。)
--allow-file-access-from-files默认情况下,file:// URI无法读取其他file:// URI。对于需要旧行为进行测试的开发人员来说,这是一个替代。
标记说明中的“测试”一词应强调标记的用法。这些标志不适用于生产用途。
备择方案,
创建铬扩展名以执行网络任务;
创建一个Chrome应用来执行网络任务
两者都需要在进行适当的permissions设置manifest.json。
manifest.json