2016 07 12 如何解决跨站访问问题? - huyx/1 GitHub Wiki

跨站访问涉及很多方面,有客户端也有服务器端的问题,如果用浏览器访问还有一个概念叫 preflight request。

preflight request

为了安全等原因,浏览器碰到某些跨站操作(如 DELETE dent),会先发送一个 OPTIONS 请求,告诉服务器自己要进行的操作,如果服务器回复可以进行该操作,则发送实际的请求。

因此服务器端不仅要处理 DELETE 方法,还必须要正确处理 OPTIONS 方法。

设置相应的 headers

使用 PHP 的话,可以直接在 PHP 里面设置 HTTP headers。

也可以在 Apache 的配置里面设置 HTTP headers:

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, POST, PUT, PATCH, DELETE"

如果出现 'Header' 无效之类的消息,则说明 headers 模块没有启用:

a2enmod headers
service apache2 restart

参考链接