Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
Jquery 跨源请求在没有CORS的情况下成功_Jquery_Ajax_Http_Xmlhttprequest - Fatal编程技术网

Jquery 跨源请求在没有CORS的情况下成功

Jquery 跨源请求在没有CORS的情况下成功,jquery,ajax,http,xmlhttprequest,Jquery,Ajax,Http,Xmlhttprequest,这让我怀疑我自己 我们可以通过jQueryAjax发出POST请求。差不多 $.post("https://external.com", $('form').serialize()); 在我的Chrome控制台中,我可以看到这样的信息 XMLHttpRequest无法加载{external.com}。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源代码“mysite.com” 然而,在network选项卡中,这个Ajax调用实际上返回200,

这让我怀疑我自己

我们可以通过jQueryAjax发出POST请求。差不多

$.post("https://external.com", $('form').serialize());
在我的Chrome控制台中,我可以看到这样的信息

XMLHttpRequest无法加载{external.com}。请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源代码“mysite.com”

然而,在network选项卡中,这个Ajax调用实际上返回200,当然,外部web服务会处理我的请求

谁能给我点线索,我快疯了


非常感谢。

我想您可能误解了CORS机制的概念。如果你仔细阅读这封信,你应该明白

请求的资源上不存在“Access Control Allow Origin”标头

它说资源没有必需的头,因此很明显浏览器必须首先发出请求才能检查资源的头

因此,不允许访问源代码“mysite.com”

这一部分还指出,不允许您获取跨源资源,而我认为您可能希望COR像阻止脚本(例如,由攻击者注入)一样发挥安全作用

您可以阅读更多关于CORS的信息。重要的(和太长了,读不下去了;))部分是:

跨源资源共享标准的工作原理是添加新的HTTP头,允许服务器描述允许使用web浏览器读取该信息的源集


虽然CORS主要是保护浏览器中资源的加载,而不是阻止下载,但对于POST请求(以及其他可能改变状态的请求),浏览器应发送飞行前请求以获取CORS标头,然后如果设置了CORS标头,则应发送实际请求。因此,虽然我知道您可能会在“网络”选项卡中看到一个请求(假设这是飞行前的请求,如果您看得更近一点,则不应该有您的帖子正文详细信息,如果是),但我不理解OP说这项服务处理了请求-因为不应该有任何请求要处理!确切地说,我希望看到错误消息,但不希望外部服务处理我的请求。然而,我确实在控制台中得到了错误,请求确实到达了外部服务并得到了200个响应。因此我的问题是,由于可以用PHP(或任何其他服务器端语言)设置HTTP头,所以必须处理请求,因为您不知道最终的头是什么。如果您想在PHP中设置CQRS头怎么办?从HTTP通信的角度来看,资源是请求的服务的结果,而不是服务本身。浏览器甚至不知道它是否是动态服务的静态资产。