Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
看来CORS的飞行前没有';没有道理。这是个玩笑吗?_Cors_Preflight - Fatal编程技术网

看来CORS的飞行前没有';没有道理。这是个玩笑吗?

看来CORS的飞行前没有';没有道理。这是个玩笑吗?,cors,preflight,Cors,Preflight,根据以下样本: 如果请求使用GET、HEAD或POST以外的方法。另外,如果发布 用于发送内容类型不是的请求数据 application/x-www-form-urlencoded、多部分/表单数据或text/plain, e、 g.如果POST请求使用 application/xml或text/xml,则请求是预引导的 因此,在下面的示例中,由于XML内容类型和自定义标题X-PINGOTHER,所以执行预飞行: var invocation = new XMLHttpRequest(); va

根据以下样本:

如果请求使用GET、HEAD或POST以外的方法。另外,如果发布 用于发送内容类型不是的请求数据 application/x-www-form-urlencoded、多部分/表单数据或text/plain, e、 g.如果POST请求使用 application/xml或text/xml,则请求是预引导的

因此,在下面的示例中,由于XML内容类型和自定义标题
X-PINGOTHER
,所以执行预飞行:

var invocation = new XMLHttpRequest();
var url = 'http://bar.other/resources/post-here/';
var body = '<?xml version="1.0"?><person><name>Arun</name></person>';

function callOtherDomain(){
  if(invocation)
    {
      invocation.open('POST', url, true);
      invocation.setRequestHeader('X-PINGOTHER', 'pingpong'); //<====
      invocation.setRequestHeader('Content-Type', 'application/xml'); //<====
      invocation.onreadystatechange = handler;
      invocation.send(body); 
    }
}
var invocation=newXMLHttpRequest();
var url='1〕http://bar.other/resources/post-here/';
变量body='Arun';
函数callOtherDomain(){
如果(调用)
{
open('POST',url,true);

setRequestHeader('X-PINGOTHER','pingpong');/CORS几乎总是安全的

对于通过IP身份验证或 使用CORS的防火墙(不幸的是仍然比较常见) 协议不安全。(这就是为什么CORS协议必须 (这是虚构的。)

但是,否则使用以下标题是安全的:

访问控制允许来源:*

即使资源公开了基于cookie或 HTTP身份验证,使用上面的头将不会显示它 将与XMLHttpRequest等API共享资源,非常类似 已与curl和wget共享

因此,换句话说,如果资源不能从随机访问 使用上述curl和wget连接到web的设备 不包括标题。但是,如果可以访问,则为 这样做很好

因此,服务器不需要知道任何关于请求内容类型的信息,就可以知道如何响应选项请求。服务器只需要知道:被询问的URL是否只能通过基于IP的身份验证访问,或者在某些防火墙或intranet后访问?如果是,则应拒绝选项请求。如果不是,即如果可以通过公共internet使用诸如curl、wget、telnet或您最喜欢的HTTP库之类的工具访问资源,然后它应该允许选项请求。这样做只会使浏览器与其他工具具有相同的访问权限

然后,当后续POST请求传入时,服务器可以做出进一步的决定。例如,服务器可能希望拒绝具有错误内容类型的POST。但它总是希望这样做。它不希望只拒绝来自CORS浏览器的选项请求;相反,它应该拒绝来自任何来源的POST请求。


考虑浏览器的特殊性的原因如下:考虑一个内联网,它遵循一个特定的范围内的IP地址,即任何一个使用公司计算机的人,这是没有问题的:使用CURL的公司内部的人可以访问数据,而使用CURL的人则不能访问该数据。但是,考虑公司内部有人浏览某个恶意网站,如果EVILL使用XHR API访问,那么请求将来自特权IP地址,因为它是特权用户计算机上的浏览器进行请求。为了防止这些安全漏洞,CORS协议被发明,因此关于直接发送到的广告,浏览器首先会执行一个选项请求,对于该请求,整个浏览器可能只会说“不,您不能访问此”,然后该帖子就永远不会发生。)

如果可能,请将您的代码作为文本而不是图像。@toasted_flakes OK,修复。很难获得,但似乎是正确的。我会花更多的时间在上面。谢谢。