跨域资源共享(cross-origin resource sharing, cors) 是一种web技术,它允许浏览器在请求资源时向不同的域发送 ajax请求。在使用 web 服务时,cors 允许浏览器从另一个域请求数据。本文将介绍如何在 php 项目中设置跨域访问。
什么是跨域?
跨域是指在 Web 开发中,浏览器所执行的脚本试图访问不同于页面来自的服务器的来源。例如,在www.example.com的网页上,如果脚本试图访问http://www.example.org的服务器,那么就称为跨域请求。
为什么要设置跨域?
Web 浏览器实现了同源策略(Same-Origin Policy),它是一种基本的 Web 安全性策略,它限制了一个脚本只能访问同源站点的内容。同源站点是指 协议, 域名, 端口相同 的站点。如果没有同源策略的限制,那么跨域请求可以很容易地进攻用户的账户。例如,如果你在线购买了一本书,而一个恶意的脚本可以轻易地从不同的域中访问你的账户,也可以使用你的账户来进行支付。
立即学习“PHP免费学习笔记(深入)”;
如何设置跨域?
在 PHP 项目中,可以通过设置响应头来构建跨域请求(CORS)。
- Access-Control-Allow-Origin
设置“Access-Control-Allow-Origin” 响应头,它允许来自某个域的请求。例如,如果AJAX请求需要从 “http://localhost:3000” 发送请求,那么可以在服务器的响应头中添加以下行。
header("Access-Control-Allow-Origin:http://localhost:3000");
- Access-Control-Allow-Headers
设置Allow-Origin是允许某个域名跨域请求,同时也需要设置Access-Control-Allow-Headers,以允许自定义的请求头。例如,如果AJAX请求要发送自定义请求头 "X-Custom-Header",则需要在响应头中添加以下行。
header("Access-Control-Allow-Headers: X-Custom-Header");
- Access-Control-Allow-Methods
Access-Control-Allow-Methods 指定哪些请求方法是允许的,只要在响应头中加入以下行,例如,这个示例设置允许GET和POST方法。
header('Access-Control-Allow-Methods: GET, POST');
- Access-Control-Allow-Credentials
如果需要发送 cookies,则 Access-Control-Allow-Credentials 应该设置为 “true”。例如,让浏览器带上 cookie 请求。
header('Access-Control-Allow-Credentials: true');
总结
在 PHP 项目中实现跨域请求(CORS)需要设置响应头,通过设置 Access-Control-Allow-Origin,Access-Control-Allow-Headers,Access-Control-Allow-Methods以及Access-Control-Allow-Credentials 等关键响应头,来使浏览器在发送请求时可以允许跨域请求。