跨域的问题

本文深入解读了跨域问题的本质,介绍了同源策略,并对比了JSONP和CORS两种解决策略。重点讲解了CORS的工作原理,包括服务器端如何设置Access-Control-Allow-Origin支持跨域,以及前端如何处理带cookie的请求。
摘要由CSDN通过智能技术生成

1.什么是跨域

        当一个请求url的协议,域名,端口号三者之间任意一个与当前页面url不同即为跨域

        浏览器解析页面时,当页面中有ajax请求时,则要求页面的URL地址,与Ajax请求的地址必须满足同源策略的规范.

同源策略:

  • 请求协议 http:// https://
  • 请求域名
  • 请求的端口**
    上述的三项必须相同. 满足同源策略.浏览器可以解析数据,否则不能正常解析.

2.跨域解决策略

        旧的方式: JSONP(了解)
        新的方式: CORS 方式

3.CORS介绍

        **跨源资源共享 (CORS) (或通俗地译为跨域资源共享)**是一种基于HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其它origin(域,协议和端口),这样浏览器可以访问加载这些资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的"预检"请求。在预检中,浏览器发送的头中标示有HTTP方法和真实请求中会用到的头。
核心: 服务器在响应头中标识可以访问用户的地址. CORS服务端跨域
        (1)普通跨域请求:只需服务器端设置Access-Control-Allow-Origin

        (2)带cookie跨域请求:前后端都要进行设置

【前端设置】根据xhr.withCradentials判断是否有cookie

xhr.withCradentials=true;

【服务器端设置】服务器端对于CORS的支持,主要是通过设置Access-Control-Allow-Origin来进行的。如果浏览器检测到相应的设置,将可以允许ajax进行跨域的访问

PHPStudy 中遇到跨域问题通常是由于浏览器的安全策略限制,不允许来自本地服务器(如 PHPStudy)的请求访问其他域名下的资源。当你尝试通过 PHPStudy 发起 AJAX 请求或者其他前端脚本去访问不在同一域内的 API 或静态文件时,浏览器会阻止这种请求以防止潜在的安全威胁。 解决 PHPStudy 跨域问题可以采取以下几种方法: 1. **允许 CORS**(Cross-Origin Resource Sharing):在目标服务器上设置响应头,添加 `Access-Control-Allow-Origin` 字段,指定允许哪些源发起请求。例如,可以在 Apache 或 Nginx 配置文件中设置 CORS。 2. **JSONP**(JSON with Padding):如果目标服务支持 JSONP,那么可以在 PHP 文件里动态生成 `<script>` 标签,通过 URL 参数传递回调函数名。 3. **代理设置**:在 PHPStudy 中,可以在配置的 HTTP 代理设置里,将所有请求转发到目标服务器,从而绕过浏览器的同源策略。 4. **本地服务器反向代理**:使用 PHPStudy 自带的或者第三方工具(如 Fiddler 或Charles)设置一个本地代理服务器,所有的跨域请求都先发送给这个代理,代理再转发到真实的目标服务器。 5. **使用 No-Cache 头部**:有些服务器端框架提供选项,可以临时关闭浏览器缓存,使得每次请求都会从服务器获取最新的内容。 在处理跨域问题时,还要注意安全性和隐私保护,尽量不要随意开放 CORS 权限,只对必要的请求开放。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值