跨域问题

61 篇文章 0 订阅

什么是跨域?

跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。

情形 是否允许通信
同一域名下
同一域名下不同文件夹
同一域名、不同端口
同一域名、不同协议
域名和域名对应ip
主域名相同、子域名不同
不同域名






所谓同源是指,域名,协议,端口均相同,不明白没关系,举个栗子:

http://www.123.com/index.html 调用 http://www.123.com/server.PHP (非跨域)

http://www.123.com/index.html 调用 http://www.456.com/server.php (主域名不同:123/456,跨域)

http://abc.123.com/index.html 调用 http://def.123.com/server.php (子域名不同:abc/def,跨域)

http://www.123.com:8080/index.html 调用 http://www.123.com:8081/server.php (端口不同:8080/8081,跨域)

http://www.123.com/index.html 调用 https://www.123.com/server.php (协议不同:http/https,跨域)

请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。

浏览器执行javascript脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。

解决办法:

常用的跨域方式有2种:CROS(跨域资源共享Cross-Origin Resource Sharing)、JSONP

CROS:服务器端对于CORS的支持,主要就是通过设置Access-Control-Allow-Origin来进行的。如果浏览器检测到相应的设置,就可以允许Ajax进行跨域的访问。该设置只被现代浏览器支持

JSONP:实际是对跨域行为的hack手段,实现原理和加载js是一个道理,所以只能实现get请求的jsonp.

在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的。但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。

CORS和JSONP对比

CORS与JSONP相比,无疑更为先进、方便和可靠。

    1、 JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。
    2、 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。
    3、 JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS)。

跨域是为了防止CSRF攻击的一种方式

 
 

一.CSRF是什么?

  CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。

二.CSRF可以做什么?

  你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。

详细参考 http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html

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、付费专栏及课程。

余额充值