PHP 跨域资源共享 CORS 设定

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

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

详细介绍见: http://www.ruanyifeng.com/blog/2016/04/cors.html

NGINX端:

 location / {
       ... 
    add_header ‘Access-Control-Allow-Origin‘ *;
    add_header ‘Access-Control-Allow-Methods‘ ‘GET, POST, OPTIONS‘;
    add_header ‘Access-Control-Allow-Headers‘ ‘Content-Type,Content-Length,Accept-Encoding,X-Requested-with, Origin,Range‘;
    add_header ‘Access-Control-Expose-Headers‘ ‘Content-Length,Content-Range‘;
       ...

  }

或者 在 PHP代码中设定 (php代码中设置了, nginx就不要配置了, 二选一):

<?php

header(‘Access-Control-Allow-Origin:*‘);  // 设为星号,表示同意任意跨源请求。也可配置特定的域名可访问 如:  https://www.xxxx.com
header(‘Access-Control-Allow-Methods:OPTIONS,POST,GET‘); // 允许请求的类型
header(‘Access-Control-Allow-Headers:Content-Type,Content-Length,Accept-Encoding,X-Requested-with, Origin‘);
header(‘Access-Control-Expose-Headers:Content-Length,Content-Range‘);

 

服务重启后, 至此 web端可直接 JavaScript 访问该站点的资源, ajax 亦可。

特别说明:
     非同源的请求,会额外产生一次 "预检"的请求 请求方法 : OPTIONS

OPTIONS /cors HTTP/1.1
Origin: http://api.bob.com
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: X-Custom-Header
Host: api.alice.com
Accept-Language: en-US
Connection: keep-alive
User-Agent: Mozilla/5.0...

  

"预检"请求用的请求方法是OPTIONS,表示这个请求是用来询问的。头信息里面,关键字段是Origin,表示请求来自哪个源。

除了Origin字段,"预检"请求的头信息包括两个特殊字段。

(1)Access-Control-Request-Method

该字段是必须的,用来列出浏览器的CORS请求会用到哪些HTTP方法,上例是PUT

(2)Access-Control-Request-Headers

该字段是一个逗号分隔的字符串,指定浏览器CORS请求会额外发送的头信息字段,上例是X-Custom-Header

服务器收到"预检"请求以后,检查了OriginAccess-Control-Request-MethodAccess-Control-Request-Headers字段以后,确认允许跨源请求,就可以做出回应。

这个环节,由浏览器控制,用户无感知。

原文地址:https://www.cnblogs.com/taozi32/p/10417287.html

时间: 2024-11-10 07:12:34

PHP 跨域资源共享 CORS 设定的相关文章

跨域资源共享CORS详解

简介 CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing). 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制. 本文详细介绍CORS的内部机制. CORS需要浏览器和服务器同时支持.目前,所有浏览器都支持该功能,IE浏览器不能低于IE10. 整个CORS通信过程,都是浏览器自动完成,不需要用户参与.对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样.浏览器

011天之跨域资源共享CORS

通过XHR实现Ajax通信的一个主要限制,来源于跨域安全策略,默认情况下XHR对象只能访问与包含它的页面位于同一个域中的资源.这种安全策略可以预防某些恶意行为.但是,实现合理的跨域请求对于开发某些浏览器的应用也是非常important的. CORS(Cross-Origin Resource Sharing,跨域资源共享)是w3c的一个工作草案,定义了在必须访问跨域资源时,浏览器和服务器应该如何沟通.CORS背后的基本思想,就是使用自定义的HTTP头部让浏览器和服务器进行沟通,从而决定请求或响应

跨域资源共享(CORS)

通过 XHR 实现 Ajax 通信的一个主要限制,来源于跨域安全策略.默认情况下,XHR 对象只能访 问与包含它的页面位于同一个域中的资源.这种安全策略可以预防某些恶意行为.但是,实现合理的跨 域请求对开发某些浏览器应用程序也是至关重要的. CORS(Cross-Origin Resource Sharing,跨源资源共享)是 W3C 的一个工作草案,定义了在必须访 问跨源资源时,浏览器与服务器应该如何沟通.CORS 背后的基本思想,就是使用自定义的 HTTP 头部 让浏览器与服务器进行沟通,从

跨域资源共享 CORS 详解

一.简介 CORS需要浏览器和服务器同时支持.目前,所有浏览器都支持该功能,IE浏览器不能低于IE10. 整个CORS通信过程,都是浏览器自动完成,不需要用户参与.对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样.浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉. 因此,实现CORS通信的关键是服务器.只要服务器实现了CORS接口,就可以跨源通信. 二.两种请求 浏览器将CORS请求分成两类:简单请求(simple

跨域资源共享CORS

浏览器的同源策略:协议相同 and 域名相同 and 端口相同.当一个http请求不满足以上的同源策略时就是跨域请求.比如: // 协议不同 http://s.taobao.com https://s.taobao.com // 端口不同 http://www.taobao.com http://www.taobao.com:8090 // 域名不同 http://s.taobao.com http://www.taobao.com //js中的fetch方法会引起跨域请求 注意:如果是通过hr

跨域资源共享(CORS)-漏洞整理

绕过 - 仅对域名校验 #POC #"Access-Control-Allow-Origin: https://xx.co & Access-Control-Allow- Credentials: true". #Origin: https://xx.co.evil.net, Access-Control-Allow-Origin: https://xx.co.evil.net. <html> <body> <button type='button

百万年薪python之路 -- 请求跨域和CORS协议详解

楔子 什么是同源策略 同源策略,它是由Netscape提出的一个著名的安全策略.现在所有支持JavaScript 的浏览器都会使用这个策略.所谓同源是指,域名,协议,端口相同.当一个浏览器的两个tab页中分别来自127.0.0.1:8000和127.0.0.1:8001的页面,当浏览器的127.0.0.1:8000的tab页执行一个脚本的时候会检查这个脚本是属于哪个页面的,即检查是否同源,只有和127.0.0.1:8000同源的脚本才会被执行.如果非同源,那么在请求数据时,浏览器会在控制台中报一

关于 CORS:跨域资源共享

I want to add CORS support to my server [CORS:跨域资源共享] 同源策略与JSONP

CORS(跨域资源共享)

1, 简介CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing).它允许浏览器向跨源(协议 + 域名 + 端口)服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制. CORS需要浏览器和服务器同时支持.它的通信过程,都是浏览器自动完成,不需要用户参与.对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样.浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次