好得很程序员自学网
  • 首页
  • 后端语言
    • C#
    • PHP
    • Python
    • java
    • Golang
    • ASP.NET
  • 前端开发
    • Angular
    • react框架
    • LayUi开发
    • javascript
    • HTML与HTML5
    • CSS与CSS3
    • jQuery
    • Bootstrap
    • NodeJS
    • Vue与小程序技术
    • Photoshop
  • 数据库技术
    • MSSQL
    • MYSQL
    • Redis
    • MongoDB
    • Oracle
    • PostgreSQL
    • Sqlite
    • 数据库基础
    • 数据库排错
  • CMS系统
    • HDHCMS
    • WordPress
    • Dedecms
    • PhpCms
    • 帝国CMS
    • ThinkPHP
    • Discuz
    • ZBlog
    • ECSHOP
  • 高手进阶
    • Android技术
    • 正则表达式
    • 数据结构与算法
  • 系统运维
    • Windows
    • apache
    • 服务器排错
    • 网站安全
    • nginx
    • linux系统
    • MacOS
  • 学习教程
    • 前端脚本教程
    • HTML与CSS 教程
    • 脚本语言教程
    • 数据库教程
    • 应用系统教程
  • 新技术
  • 编程导航
    • 区块链
    • IT资讯
    • 设计灵感
    • 建站资源
    • 开发团队
    • 程序社区
    • 图标图库
    • 图形动效
    • IDE环境
    • 在线工具
    • 调试测试
    • Node开发
    • 游戏框架
    • CSS库
    • Jquery插件
    • Js插件
    • Web框架
    • 移动端框架
    • 模块管理
    • 开发社区
    • 在线课堂
    • 框架类库
    • 项目托管
    • 云服务

当前位置:首页>CMS系统>Dedecms
<tfoot draggable='sEl'></tfoot>

cors跨域php cors跨域php配置

很多站长朋友们都不太清楚cors跨域php,今天小编就来给大家整理cors跨域php,希望对各位有所帮助,具体内容如下:

本文目录一览: 1、 thinkphp6解决 CORS 跨域 2、 CORS过程的介绍以及跨域问题 3、 使用CORS解决跨域问题 4、 跨域问题解决方法 5、 Http 跨域(Cors) 详解 6、 php如何解决跨域问题? thinkphp6解决 CORS 跨域

1,在app/middleware.php中添加

中间件,这样就改成了

*是不安全的,可以在config/cookie.php配置cookie 有效域名的domain

如果接口请求发送了token,会提示Access-Control-Allow-Headers这个问题,tp6默认是这样

可以在'Access-Control-Allow-Headers' 这一样加上XXX-token,

我在搞这个时还遇见post请求变成get

把method改成了type

CORS过程的介绍以及跨域问题

参考文章:

说到跨域问题,我们最常见的就是在我们向服务器发起请求的时候会遇到。比如说如下情况

假设我们正在访问 的站点,当我们点击按钮,向 发送请求,获取网站上的一些用户信息。这个时候从结果上是完美的。原因是,根据 同源策略 ,我们发起请求的 域名 , 端口 , 协议 均是一至的。浏览器并不会产生跨域报错。

而如果,以上提到的三点其中一点不满足的站点,再向服务器发起请求,那么这个时候就会触发跨域报错。如下图

而以上两种情况出现的原因,其实就是我们今天要介绍的内容。

首先我们先来介绍一下同源策略

浏览器网络请求的时候,有一个 同源策略 的机制,即默认情况下,使用API的Web应用程序只能从加载应用程序的同一个域请求HTTP资源。也就是我们上面提到的,必须要求域名,端口,协议都要一至。请求才能发送成功。而只要其中一点不一致,那么该请求也算是跨域的。

所以我们同样可以看得出来。同源策略会限制以下三种行为:

说了这么多其实,我们可以看出同源策略的作用其实就是为了保证用户的信息安全。打个比方,如果没有同源策略,那么当你在不小心的情况下,点击了网页的钓鱼网站。然后恶意的网站很容易就能利用重定向把你带到一个iframe 的 攻击网站,这个iframe会自动加载银行网站,并通过Cookie登录你的账号。然后操作你的DOM,进行一系列的危险操作。

而我们当然不希望这种情况发生,这个时候同源策略就起到有效的保护作用。因为它确保了我们只能访问同一站点的资源

好了,接下来要说的就是CORS了。

浏览器出于安全的考虑,会限制 从脚本内发起 的跨域HTTP请求。(注意是脚本内)例如XHR 和 Fetch 就遵循同源策略。这意味着使用 API 的Web应用程序只能从加载应用程序的同一个域请求HTTP资源。

在日常的开发中,我们很多时候都会跨域去请求别的站点的资源。而这个时候我们为了解决跨域的问题就要利用CORS机制。

CORS(Cross-Origin Resource Sharing),即 跨域资源共享 。如字面意思,CORS机制的存在就是为了让我们在保证安全的前提下,实现访问不同域下的资源,这算是放宽的政策。

浏览器可以利用CORS机制,放行一些符合规范的跨域访问,阻止不符合规范的跨域访问。下面我我们就来介绍一下浏览器内部是如何实现的。

Web程序发出跨域请求后,浏览器会 自动 向我们的HTTP header添加一个额外的字段 Origin 。 Origin 标记了请求的站点来源:

为了使浏览器允许访问跨域资源,服务器返回的 response 还需要加一些响应头字段,这些字段可以 显式 的表明此服务器是否允许跨域请求。

作为服务端人员,我们为了允许符合规则的跨域请求。我们可以通过在HTTP的响应中添加响应字段 Access-Control-* 来表明是否允许跨域请求。根据这些CORS响应头字段,浏览器可以允许一些被同源策略限制的跨域响应

虽然有好几个CORS的字段,但是有一个必须要加的字段是 Acess-Control-Allow 。这个头字段的值指定了哪些站点被允许跨域访问资源的。

现在这个字段会被添加到服务端的响应报文中,然后返回给客户端。然后这个时候客户端再向服务端发起跨域请求,同源策略将不会再限制 站点返回的资源。

报文如下:

而相反,如果对比 Access-Control-Allow-Origin 和 Origin 的值不一致的时候,浏览器会抛出一个 CORS Error的报错信息。

除了 Access-Control-Allow-Origin 字段头之外,开发人员还可以通过其他字段对请求作出限制。比如说 Access-Control-Allow-Methods 该字段用来指明跨域请求所允许的 HTTP 方法。

如上图中,只有请求方法为 GET , POST 或 PUT 方法被允许跨域访问资源。其他的HTTP方法,例如 PATCH 和 DELETE 都会产生预检。

这里就引申出一些别的内容,比如说 预检

什么是预检呢?

到这里,CORS和跨域的关系基本就说清楚了。下面我们再说一点补充

XHR 或 Fetch 与 CORS的一个有趣的特性是,我们可以基于 Cookies 和 HTTP 认证信息发送身份凭证。一般而言,对于跨域 XHR 或 Fetch 请求,浏览器 不会 发送身份凭证信息。

尽管 CORS 默认 情况下不发送身份凭证,但我们仍然可以通过添加 Access-Control-Allow-Credentials CORS响应头来更改它

如果要在跨域请求中包含 cookie 和其他授权信息,我们需要做一下操作:

做到了上面几点之后,就能在跨域请求中携带身份凭证了。

以上就是全部内容了

补充参考:

使用CORS解决跨域问题

跨域是指跨域名的访问,以下情况都属于跨域:

如果 域名和端口都相同,但是请求路径不同 ,不属于跨域,如:

跨域不一定会有跨域问题。

因为跨域问题是浏览器对于ajax请求的一种安全限制: 一个页面发起的ajax请求,只能是于当前页同域名的路径 ,这能有效的阻止跨站攻击。

因此: 跨域问题 是针对ajax的一种限制 。

但是这却给我们的开发带来了不变,而且在实际生成环境中,肯定会有很多台服务器之间交互,地址和端口都可能不同,怎么办?

目前比较常用的跨域解决方案有3种:

我们这里会采用cors的跨域方案。

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。

它允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了AJAX只能 同源 使用的限制。

CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。

浏览器会将ajax请求分为两类,其处理方案略有差异:简单请求、特殊请求。

只要同时满足以下两大条件,就属于简单请求。:

(1) 请求方法是以下三种方法之一:

(2)HTTP的头信息不超出以下几种字段:

当浏览器发现发现的ajax请求是简单请求时,会在请求头中携带一个字段: Origin .

Origin中会指出当前请求属于哪个域(协议+域名+端口)。服务会根据这个值决定是否允许其跨域。

如果服务器允许跨域,需要在返回的响应头中携带下面信息:

注意:

如果跨域请求要想操作cookie,需要满足3个条件:

不符合简单请求的条件,会被浏览器判定为特殊请求,,例如请求方式为PUT。

特殊请求会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight)。

浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的 XMLHttpRequest 请求,否则就报错。

一个“预检”请求的样板:

与简单请求相比,除了Origin以外,多了两个头:

服务的收到预检请求,如果许可跨域,会发出响应:

除了 Access-Control-Allow-Origin 和 Access-Control-Allow-Credentials 以外,这里又额外多出3个头:

如果浏览器得到上述响应,则认定为可以跨域,后续就跟简单请求的处理是一样的了。

虽然原理比较复杂,但是前面说过:

事实上,SpringMVC已经帮我们写好了CORS的跨域过滤器:CorsFilter ,内部已经实现了刚才所讲的判定逻辑,我们直接用就好了。

在 Application 下编写一个配置类,并且注册CorsFilter:

结构:

放到Application下即可。

4.5.4.重启测试:

访问正常:

跨域问题解决方法

跨域?他是浏览器的 同源策略 造成的,是浏览器对javascript施加的安全限制。所谓同源是指:域名、协议、端口均相同。

解决

原理:利用标签具有可跨域的特性,可实现跨域访问接口,需要后端的支持。

服务器在收到请求后,解析参数,计算返还数据,输出messagetow(data)字符串。

缺点:只能发送get请求,无法访问服务器的响应文本(单向请求),即只能获取数据不能改数据。

通过ajax请求不同域的实现,底层不是靠XmlHttpRequest而是script,所以不要被这个方法给迷惑了。

在ajax请求中类型如果是type是get post,其实内部都只会用get,因为其跨域的原理就是用的动态加载script的src,所以我们只能把参数通过url的方式传递

其实jquery内部会转化成

然后动态加载;action=aaron">

;action=aaron"><script type="text/javascript" src=" "></script>

;action=aaron">

;action=aaron">

Cross-Origin Resource Sharing(CORS)跨域资源共享是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略,确保安全的跨域数据传输。现代浏览器使用CORS在API容器如XMLHttpRequest来减少HTTP请求的风险来源。与 JSONP 不同,CORS 除了 GET 要求方法以外也支持其他的 HTTP 要求。服务器一般需要增加如下响应头的一种或几种:

跨域请求默认不会携带Cookie信息,如果需要携带,请配置下述参数:

window.name通过在iframe(一般动态创建i)中加载跨域HTML文件来起作用。然后,HTML文件将传递给请求者的字符串内容赋值给window.name。然后,请求者可以检索window.name值作为响应。

iframe标签的跨域能力;

window.name属性值在文档刷新后依旧存在的能力(且最大允许2M左右)。

每个iframe都有包裹它的window,而这个window是top window的子窗口。 contentWindow 属性返回<iframe>元素的Window对象。你可以使用这个Window对象来访问iframe的文档及其内部DOM。

HTML5新特性,可以用来向其他所有的 window 对象发送消息。需要注意的是我们必须要保证所有的脚本执行完才发送 MessageEvent,如果在函数执行的过程中调用了它,就会让后面的函数超时无法执行。

前提条件:这两个域名必须属于同一个基础域名!而且所用的协议,端口都要一致,否则无法利用document.domain进行跨域,所以只能跨子域

在 根域 范围内,允许把domain属性的值设置为它的上一级域。例如,在”aaa.xxx.com”域内,可以把domain设置为 “xxx.com” 但不能设置为 “xxx.org” 或者”com”。

现在存在两个域名aaa.xxx.com和bbb.xxx.com。在aaa下嵌入bbb的页面,由于其document.name不一致,无法在aaa下操作bbb的js。可以在aaa和bbb下通过js将document.name = 'xxx.com';设置一致,来达到互相访问的作用。

WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信,同时允许跨域通讯,是server push技术的一种很棒的实现。相关文章,请查看: WebSocket 、 WebSocket-SockJS

**需要注意:**WebSocket对象不支持DOM 2级事件侦听器,必须使用DOM 0级语法分别定义各个事件。

同源策略是针对浏览器端进行的限制,可以通过服务器端来解决该问题,例如nginx

DomainA客户端(浏览器) ==> DomainA服务器 ==> DomainB服务器 ==> DomainA客户端(浏览器)

Http 跨域(Cors) 详解

1.构成跨域的条件(满足下方任意一个条件则构成跨域)

    domain不同(域名或者ip不同)

    端口不同

    协议不同(http/https)

给大家展示一个请求头和响应头,这是满足跨域的

请求头

```

POST HTTP/1.1

Host: 127.0.0.1:10030

Connection: keep-alive

Content-Length: 33

Pragma: no-cache

Cache-Control: no-cache

Accept: application/json, text/plain, */*

Origin:

User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1

Content-Type: application/x-www-form-urlencoded

Referer:

Accept-Encoding: gzip, deflate, br

Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7

Cookie: cna=CKV9Ew45tVYCAX1SFKx2d19k; _uab_collina=152896489958250435552525; _umdata=65F7F3A2F63DF020E1473F196945E27DBC990F7BBC00081CD2D29B2B4AD9F1FCC05972083687D762CD43AD3E795C914CD2FEBFBF6205958F64E60BC7B372D87F; Hm_lvt_31d8fd22bdec2e7ab9e5855741f0fac1=1541048271,1541503268,1542598403,1543222019; SESSION=NDllODZlMWQtODk5ZC00MDg3LThiN2ItNGM0MTRlMjZlOTFm

phone=15555555555password=111111

```

响应头

```

HTTP/1.1 200

Vary: Origin

Vary: Access-Control-Request-Method

Vary: Access-Control-Request-Headers

Access-Control-Allow-Origin:

Access-Control-Allow-Credentials: true

Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Tue, 01-Jan-2019 06:44:30 GMT

Content-Type: application/json;charset=UTF-8

Transfer-Encoding: chunked

Date: Wed, 02 Jan 2019 06:44:30 GMT

103

{"data":{"id":2,"name":null,"nickName":"15555555555","email":null}

```

详解

首先请求头中需要设置,这个是设置跨域的的协议,domain 和端口,也就是浏览器地址的栏的根路径

```

Origin:

```

服务器获取到这个请求头之后开始进行校验校验成功后,设置响应头

Access-Control-Allow-Origin 参数建议不要设置为 *  设置为 * 的话,其他的请求时则不会带上 Cookie

```

Access-Control-Allow-Origin:

Access-Control-Allow-Credentials: true

```

将这个响应头设置好返回给浏览器,就达到跨域的效果了

其他和跨域有关的响应头

```

//预检结果缓存时间,也就是上面说到的缓存啦

'Access-Control-Max-Age: 1800'

//允许的请求类型

'Access-Control-Allow-Methods:GET,POST,PUT,POST'

//允许的请求头字段

'Access-Control-Allow-Headers:x-requested-with,content-type'

```

参考链接

php如何解决跨域问题?

PHP 跨域问题的解决方法常见有以下几种:

使用 JSONP:通过动态创建 script 标签的方式,可以实现从不同的域名请求数据。

使用 CORS(跨域资源共享):通过在服务端设置 Access-Control-Allow-Origin 响应头,来允许特定域名请求数据。

使用代理:通过代理服务器请求数据,避免了跨域问题。

使用 Nginx 反向代理:通过配置 Nginx 反向代理,来实现跨域请求。

以下是使用 CORS 通过添加响应头来解决跨域问题的一个例子:

// 设置允许来自任何域名的请求

header("Access-Control-Allow-Origin: *");

// 设置允许请求方法(例如GET、POST等)

header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");

// 设置允许请求头

header("Access-Control-Allow-Headers: X-Requested-With, Content-Type");

// 如果请求是通过 AJAX 发起的,还需要在请求头中添加 X-Requested-With: XMLHttpRequest。

如果对你有所帮助,就点个赞再走吧~

关于cors跨域php的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。

查看更多关于cors跨域php cors跨域php配置的详细内容...

声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did168363
更新时间:2023-04-11   阅读:58次

上一篇: ipad上php ipad上php文件用什么软件打开

下一篇:phpredis事例 php redis实现秒杀思路

相关资讯

最新资料更新

  • 1.dedecms怎么设置当三级栏目为空时不显示同级栏目
  • 2.DEDECMS修改文章TAG 给TAG加链接 去掉TAG字数限制
  • 3.dedecms5.7后台发布文章提示“标题不能为空”的解决方法
  • 4.dedecms list增加noflag属性的方法 实现让列表标签不调用有推荐属性的文章
  • 5.织梦栏目有缓存导致刚发布的文章条数和分页不同步处理方法
  • 6.dedecms使用sql语句调用文章静态链接地址的方法
  • 7.dedecms结合jQuery实现汇率自动调整
  • 8.织梦模板用{dede:sql}标签如何实现分页的示例代码
  • 9.增加dedecms后台留言管理功能
  • 10.dedecms5.7 ask模块现404的解决方法
  • 11.织梦dedecms会员注册邮件验证设置方法
  • 12.Dede中通过SQL调用简略标题shorttitle和链接地址的方法
  • 13.dedecms tag标签实现随机颜色和字体大小
  • 14.DedeCMS系统301重定向配置方法详解
  • 15.DedeCMS系统自定义字段图片调用问题的解决方法
  • 16.在dedecms文章页中获取当前栏目字段如content字段
  • 17.dede:field name=position去除最后一个大于符号
  • 18.dedecms图片相关问题—后台上传图片实现图片轮播
  • 19.加快织梦dedeCMS内容生成速度方法
  • 20.dedecms列表页文章摘要字数的设置方法

CopyRight:2016-2025好得很程序员自学网 备案ICP:湘ICP备09009000号-16 http://www.haodehen.cn
本站资讯不构成任何建议,仅限于个人分享,参考须谨慎!
本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。

网站内容来源于网络分享,如有侵权发邮箱到:kenbest@126.com,收到邮件我们会即时下线处理。
网站框架支持:HDHCMS   51LA统计 百度统计
Copyright © 2018-2025 「好得很程序员自学网」
[ SiteMap ]