【Ajax】笔记-同源策略
同源策略(Same-origin policy)是一种安全机制,它限制了一个源的文档或脚本如何与另一个源的资源进行交互。这是一个重要的安全功能,可以减少跨站脚本攻击(XSS)的风险。
简单来说,当两个页面的协议、域名和端口号相同时,它们才被认为是同源的。如果一个页面尝试与一个不同源的页面进行数据交互,比如使用XMLHttpRequest或Fetch API进行HTTP请求,浏览器会阻止这种行为并可能抛出异常。
解决同源策略限制的方法:
- JSONP:通过动态创建
<script>
标签请求一个带参数的服务器端脚本,服务器端脚本将响应一个JavaScript函数调用,该调用包含所需数据作为参数。 - CORS:服务器端需要在响应头中设置
Access-Control-Allow-Origin
,允许特定的域或任何域进行跨域请求。 - 代理服务:在服务器端创建一个代理服务,所有前端对外的请求都先发送到这个代理服务,由代理服务转发请求到目标服务器,并返回数据。
- WebSocket:WebSocket协议不受同源策略的限制。
- 在开发环境中,可以使用特定工具如webpack-dev-server的代理功能,配置反向代理来绕过同源策略。
示例代码(CORS设置响应头):
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Headers: Content-Type
在服务器(如Node.js的Express框架)中设置CORS的示例代码:
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*"); // 允许任何源
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
评论已关闭