悠悠楠杉
网站页面
跨域问题主要是由于浏览器的同源策略(Same-Origin Policy)所致。同源策略限制了来自不同源的文档或脚本间的交互方式,以维护网站的安全。当AJAX请求的URL与当前页面不在同一域、协议或端口上时,浏览器会阻止该请求,除非它满足CORS规范。
JSONP(JSON with Padding)是一种非官方的跨域数据交换协议,它允许在不允许AJAX跨域请求的环境下,通过动态添加<script>
标签来调用不同域的URL。该URL返回的JavaScript代码中包含回调函数调用的数据,从而实现数据的读取。
CORS是一种官方的跨域解决方案,它使用额外的HTTP头来告诉浏览器允许一个网页的AJAX请求访问不同源的服务器上的资源。通过在服务器上设置适当的响应头(如Access-Control-Allow-Origin
),可以明确地允许或拒绝跨域请求。
Access-Control-Allow-Origin
头,可以设置为具体域名*
表示接受所有域的请求,或根据实际情况精确控制。同时可设置Access-Control-Allow-Methods
和Access-Control-Allow-Headers
等来进一步控制访问权限。http
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization
javascript
fetch('https://example.com/data', {method: 'GET'})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
http
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Max-Age: 1728000 // 预检结果缓存时间(秒)