`

服务端解决跨源共享

 
阅读更多

 

跨源资源共享是web开发领域中一个非常有趣的话题,互联网上有很多朋友讨论这个话题。跨源共享的官方文档可到这里查看,当然也有很多朋友给出各式各样的解决方案,确实都是OK的,但今天我分享的这套解决方案可能在以往的文章中很少看见—–我们如何在服务器端解决跨源资源共享的问题

做过服务端开发的同学都知道服务器每次响应(http response)都会送回客户端一个http header,而这些http header数据中有时会带有Access-Control-Allow-Origin,请记住Access-Control-Allow-Origin不是每次都会response给客户端的,Access-Control-Allow-Origin通常是在开发者定义后会正确响应给客户端,Access-Control-Allow-Origin的意思是指定可访问控制的请求源,Access-Control-Allow-Origin字段有三种支持的值。
第一种是指定一个可访问控制的请求源,它的格式是一个完整的URL地址

 Access-Control-Allow-Origin: http://qiqicartoon.com
 以上代码表示服务器上的这个文件只允许http://qiqicartoon.com源访问。

第二种是指定多个可访问控制的请求源,它的格式是多个完整的URL地址,以空格分开

Access-Control-Allow-Origin: http://qiqicartoon.com http://demo.qiqicartoon.com:8080

 第三种是可以允许任何可访问控制的源,它的格式是一个通配符*

Access-Control-Allow-Origin: *
 如果服务器上的某个文件需要向任何一个没有认证的源提供访问权限的话,可以指定通配符*值

请注意,不是所有的浏览器都支持Access-Control-Allow-Origin字段,但目前主流的浏览器基本都支持。

Apache中可以执行命令a2enmod headers来暴露Access-Control-Allow-Origin,Access-Control-Allow-Origin成功暴露后,你可以在<Directory>, <Location>, <Files> or <VirtualHost> 中或者一个.htaccess文件中添加以下代码

Header set Access-Control-Allow-Origin *
 当然你也可以使用add而不是set,使用add可以多次添加,因为基于安全的考虑我们可能会使用add。记住修改成功后,重启apache。

在IIS6中暴露Access-Control-Allow-Origin,可通过以下步骤:
1:打开IIS服务器管理
2:右键点击你想启用CORS的站点,选择属性
3:选择Http header tab
4:在自定义http header中选择添加
5:输入Access-Control-Allow-Origin作为一个header信息
6:输入通配符*作为header的值
7:两次点击OK

IIS7中可以复制以下代码到你站点或应用程序根目录下的web.config文件中

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="*" />
     </customHeaders>
   </httpProtocol>
 </system.webServer>
</configuration>
 如果你的目录中没有web.config,你可以先手动新建一个web.config

在基于NodeJSExpressJS中可以添加以下代码,以启用CORS

app.all('/', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  next();
 });

app.get('/', function(req, res, next) {

});

app.post('/', function(req, res, next) {

});

 在PHP中,如果你没有权限访问Apache config文件,你同样可以启用CORS

header("Access-Control-Allow-Origin: *");
 请注意在PHP语言中,使用header function,必须要把它放在任何脚本输出之前。

在ASP.NET中,如果你没有权限访问IIS配置文件,你同样也可以启用CORS

Response.AppendHeader("Access-Control-Allow-Origin", "*");
 这种方法同样适用于IIS6 IIS7传统模式,以及IIS5综合模式

在APP Engine中,比如在Google APP Engine的Python application中,这个self.response.headers.add_header()可以使用

class CORSEnabledHandler(webapp.RequestHandler):
  def get(self):
    self.response.headers.add_header("Access-Control-Allow-Origin", "*")
    self.response.headers['Content-Type'] = 'text/csv'
    self.response.out.write(self.dump_csv())
 谁已经开始在服务端开始CORS了(据我也了解到的)?

HTML5 Rocks一个开源的HTML5开发者资源共享网站
WebKit WebKit宣布在WebGL mailing list,CORS支持图片和视频资源已经完全实施了。
火花集 中国一家创意图片分享网站。

有兴趣的话,你还可以阅读MDN的一篇文章

 

分享到:
评论

相关推荐

    Nextcloud 服务端 源代码安装包nextcloud-19.0.1.zip

    这个“Nextcloud 服务端 源代码安装包nextcloud-19.0.1.zip”包含了Nextcloud 19.0.1版本的源代码,使得用户可以进行自定义配置和深度定制,以适应不同的系统环境和功能需求。 1. **Nextcloud核心功能**: - 文件...

    Rsync win版本客户端和服务端+linux服务端

    **Rsync技术详解** ...总结,Rsync是跨平台的数据同步利器,无论是在Windows还是Linux环境中,都能提供高效、可靠的文件同步解决方案。通过理解Rsync的工作原理和使用方法,可以极大地提高文件管理和备份的效率。

    ice客户端和服务端

    标题中的“ice客户端和服务端”指的是ZeroC的ICE(Internet Communications Engine)框架,这是一个高性能、跨平台的中间件,用于构建分布式系统。ICE提供了一种面向对象的接口,支持多种编程语言,包括C++、Java、...

    JSONP解决跨域问题

    对于移动端应用,虽然它们也可以使用JSONP,但现代浏览器普遍支持CORS(跨源资源共享),因此通常推荐使用JSON格式配合CORS进行前后端数据交换,以获得更好的安全性和灵活性。只需要服务端在响应头中设置相应的CORS...

    SVN (包括服务端、客户端、插件和使用教程)

    例如,如何创建新的SVN仓库,如何将本地项目导入仓库,如何检出工作副本,如何提交更改,如何解决冲突,以及如何使用分支和标签进行版本管理和协同开发。这些教程通常包括图文并茂的步骤说明,有的还包含视频教程,...

    服务端跨域访问处理.rar

    解决跨域问题,我们可以采用CORS(Cross-Origin Resource Sharing,跨源资源共享)机制。这个压缩包中包含的文件"web.xml"和两个jar包,就是实现服务端CORS支持的关键。 1. **导入jar包**: "cors-filter-1.7.1....

    此资源为dde服务端编程

    这暗示我们将学习如何使用VC来编写DDE服务端程序,并且这些源代码具有实际应用价值,可能包含解决特定问题或实现特定功能的示例。 **DDE服务器编程基础知识** DDE服务器是实现DDE通信的一方,它监听来自DDE客户端...

    SVN客户端和服务端安装文档

    Apache2 + mod_dav_svn适合大型、跨平台的项目,而VisualSVN Server则更适合Windows环境。 2. **下载与安装**: 根据你的操作系统和需求,访问官方网站下载相应版本的安装包。Windows环境下,通常推荐使用VisualSVN ...

    获取服务端硬件信息和客户端IP,MAC,浏览器信息

    可以使用CORS(跨源资源共享)或者其他服务器端代理方法来解决这个问题。同时,为了保护用户隐私,必须遵守相关的数据保护法规,如GDPR(欧洲通用数据保护条例),在获取和处理个人信息时需得到用户的明确同意。 综...

    前后端分离-跨域解决方案.docx

    后台服务端的跨域解决方案通常涉及使用CORS(Cross-Origin Resource Sharing,跨源资源共享)机制。CORS是一种安全机制,允许网页从不同的源加载资源。它依赖于服务器的支持,服务器必须对HTTP请求做出响应,并包含...

    jsonp跨域解决源代码

    JSONP(JSON with Padding)是一种跨域数据交互协议,它利用了HTML的`&lt;script&gt;`标签可以不受...然而,考虑到其局限性和安全性,对于更复杂或安全性要求较高的场景,可能需要考虑其他跨域技术,如CORS(跨源资源共享)。

    CORS跨域资源共享及解决方案.docx

    CORS是一种机制,通过添加HTTP头来告诉浏览器允许跨源访问。 #### 二、CORS的工作原理 CORS根据请求的不同类型分为**简单请求**和**非简单请求**。 ##### 1. 简单请求 当请求符合以下条件时,被视为简单请求: - ...

    配置服务端支持跨域所应用到的jar包

    在处理这种情况时,服务器端可以通过设置CORS(Cross-Origin Resource Sharing,跨源资源共享)头来允许特定的跨域请求。这个过程通常涉及修改HTTP响应头,添加`Access-Control-Allow-Origin`字段,允许指定的源进行...

    web服务开发学习实录源代码

    通过分析并实践这些源代码,读者可以更好地理解Web服务的工作原理,学会如何在实际项目中应用Web服务技术,解决跨平台、跨系统的信息共享问题。同时,对于初学者来说,这是一个很好的起点,而对于有经验的开发者,它...

    ajax跨域,这应该是最全的解决方案了.docx

    CORS(Cross-Origin Resource Sharing,跨源资源共享)是一种允许浏览器向跨源服务器发出XMLHttpRequest请求的技术规范。CORS通过在HTTP头部增加特定的信息来实现跨域请求的安全验证。CORS主要分为简单请求和非简单...

    解决 springboot跨域请求问题

    1. **服务端配置CORS(Cross-Origin Resource Sharing,跨源资源共享)**: SpringBoot应用可以通过配置CORS来允许特定或所有来源的跨域请求。在SpringBoot应用中,你可以创建一个配置类,比如`CorsConfig`,并添加...

    Allow-Control-Allow-Origin-1-0-3-0.crx

    跨源读取阻塞 详见:CORB 最常见的就是关于跨域资源共享的问题,也就是我们通常说的跨域。当我们本地服务器预览页面,使用ajax访问远程服务器的内容时就会请求失败,比如:本地预览的地址是:http://localhost:8080/...

    js跨域访问示例(客户端/服务端)

    除了JSONP之外,还有其他解决跨域问题的方法,例如使用CORS(跨源资源共享)等。CORS是一种更为强大和灵活的跨域解决方案,它通过在HTTP头中增加额外的信息来控制访问权限,从而允许或拒绝跨域请求。不过,由于CORS...

    远程控制编程技术源代码

    在压缩包文件"remotecontrol"中,可能包含了各个章节的源代码实例,这些实例可能涵盖FTP服务端和客户端的实现,以及不同远程控制协议的解析和执行。通过分析这些代码,读者可以逐步理解远程控制的工作流程,学习到...

    执法仪设备传输子码流协议文档(附完整代码以供参考)1

    此协议的关键在于内存共享和同步机制,它有效地解决了Android系统中Camera资源的独占问题,使得多个应用能够协作处理同一视频源,为执法软件提供了流畅的视频流体验。完整代码包含了实现这些功能的详细逻辑,包括...

Global site tag (gtag.js) - Google Analytics