我正在尝试使用一种合法允许使用但不允许分发的网络字体。我在一个单独的用于静态内容的域中托管字体文件。这两个域不相关(一个不是另一个的子域)。假设使用webfont的站点是示例。com和托管它的站点就是一个例子。net。
我试过这个。示例上的htaccess文件。net
<FilesMatch "\.(ttf|otf|eot|woff|svg)$">
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "example.com"
</IfModule>
</FilesMatch>
然而,这使得字体只能在示例的主页上使用。com。我再次尝试:
Header set Access-Control-Allow-Origin "example.com/*"
现在,该字体适用于示例。除了主页(当然)不是我想要的。
我找不到这个标题的任何留档。我真正想要的是允许example.com
和www.example.com
(或者,为了更好的衡量,*.example.com
)上的所有页面。有没有简单的方法做到这一点?我猜标题需要某种正则表达式。
寻找我找到的文件,
我没有找到任何关于标题本身的语法或如何指定域变体的留档。
根据对一个相关问题的回答,我尝试了以下方法:
<FilesMatch "\.(ttf|otf|eot|woff|svg)$">
<IfModule mod_headers.c>
SetEnvIf Origin "http(s)?://(www\.)?(example.com)$" AccessControlAllowOrigin=$0$1
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
Header set Access-Control-Allow-Credentials true
</IfModule>
</FilesMatch>
我的理解是,这将为每个请求设置一个单独的标题,允许每个请求页面单独使用字体。不过,在检查Firebug时,标题似乎总是<代码>http://example.com,在主页和其他地方。尽管如此,这是可行的,但让我感到困惑。一个相关的问题表明,类似的设置不适用于其他人。他的问题表明,对他来说,它实际上是为每个请求页面发送不同的标题,因此未修改的HTTP 304响应被破坏。他的解决方案是向添加一个始终
指令。htaccess,但对我来说,这导致了HTTP 500错误。
现在,它正在工作,我认为在示例中继续工作。com将切换到HTTPS(很快就会)。然而,我忍不住觉得这太复杂了。它每次都设置相同的标题,但使用复杂的模式匹配来实现。此外,虽然我对HTTP 304 Not Modified(未修改)响应没有任何问题(事实上,我还没有看到任何此类响应:在清除缓存之前,浏览器根本不会请求字体文件),但我担心将来可能会看到它们。
作为参考,我出于同样的目的更新了/etc/apache2/conf/sites-enabled/*文件。我的代码:
<Directory /var/www/dir> AllowOverride FileInfo Options Header set Access-Control-Allow-Origin "http://example.com" Header set Access-Control-Allow-Origin "http://www.example.com" </Directory>
我必须处理的一件事是,我没有启用mod_头,因此重新启动apache失败。我必须用
a2enmods headers
匿名用户
如CORS规范所述,您只能在Access-Control-Allow-Origin
标头(或*
或null
)中拥有一个域。
所以是的,您需要根据请求站点的域以不同的方式设置标头。这就是为什么您发布的apache配置片段尝试使用此正则表达式在请求的Origin
标头上匹配:
http(s)?://(www\.)?(example.com)$
$
匹配字符串末尾。因此,此正则表达式将匹配来自http://www.example.com
、http://example.com
及其https等价物的请求,但不匹配example.com/bla
。这应该没问题,因为请求的Origin
标头以及响应的Access-Control-Allow-Origin
标头应该只包含主机而不包含子页。
所以当你在页面上时http://example.com/about-us,浏览器将发送如下请求,以从http://cdn.net/myfont.otf
:
GET /myfont.otf HTTP/1.1
Host: http://cdn.net
Origin: http://example.com
在那里,服务器将在原始标头上进行模式匹配,并返回:
Access-Control-Allow-Origin: http://example.com
问题内容: 将web.xml移植到Java配置后出现以下问题 根据一些Spring参考,尝试了以下尝试: 所选择的值来自有效的web.xml过滤器: 有什么想法为什么Spring java config方法不能像web.xml文件那样工作? 问题答案: 将CorsMapping从更改方法。 为整个应用程序启用CORS很简单: 你可以轻松更改任何属性,以及仅将此CORS配置应用于特定的路径模式: 控
Response.AddHeader(“Access-Control-Allow-Origin”,“*”)是如何实现的;行设置多个标题时,包括,但没有当我删除它?
问题内容: 我需要通过JavaScript 将数据发送到Python服务器。因为我使用的是localhost,所以我需要使用CORS。我正在使用Flask框架及其模块。 作为JavaScript,我有这个: 和Python代码: 但是当我执行它时,我收到以下消息: 我该如何解决?我知道我需要使用一些“ Access-Control-Allow-Origin”标头,但我不知道如何在此代码中实现它。顺
我从ASP.NET表单中调用这个函数,在调用Ajax时在firebug控制台中得到以下错误。 跨源请求被阻止:同一源策略不允许读取http://anotherdomain/test.json上的远程资源。(原因:CORS标头“Access-Control-Allow-Origin”丢失)。 我做了其他的方法,但仍然找不到解决办法。 注意:我没有服务器权限进行服务器端(API/URL)更改。
问题内容: 我想访问来自同一域但端口号不同的信息,为此,我添加了响应头。 Servlet代码:( 显示在www.example.com:PORT_NUMBER上) jQuery代码:( 显示在www.example.com上) 几次我收到此错误(在控制台中): 该错误通常在执行时首次发生。第二次允许。 我的问题是代码中或代码中缺少什么? 任何建议将不胜感激。 更新1 我变了: 至: 然后我在控制台