我的bootstrap glyphicons在其他浏览器上显示,但我在google chrome上得到这个错误。
源自 'http://d37p52igaahgm9.cloudfront.net'的 字体已被 被跨源资源共享政策阻止加载。没有 所请求的资源上存在 "访问控制-允许-起源 "头。 资源。因此,原产地 'http://www.anthonygalli.com' 不 允许访问。
尽管尝试过,但错误仍然存在。
application_controller.rb
before_action :set_cors
def set_cors
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Request-Method'] = '*'
application.rb
config.middleware.insert_before 0, "Rack::Cors" do
allow do
origins '*'
resource '*', :headers => :any, :methods => [:get, :post, :options]
config.action_dispatch.default_headers = {
'Access-Control-Allow-Origin' => '*',
'Access-Control-Request-Method' => '*'
CORS配置编辑器
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>https://www.anthonygalli.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Content-*</AllowedHeader>
<AllowedHeader>Host</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>https://anthonygalli.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Content-*</AllowedHeader>
<AllowedHeader>Host</AllowedHeader>
</CORSRule>
</CORSConfiguration>
亚马逊S3 CORS(跨源资源共享)和火狐跨域字体加载
来自原产地的字体被跨原产地资源共享政策阻止了加载。
你不需要(不应该)在每个响应中生成头文件。
在你的案例中,我敢打赌,来自你的浏览器的资产请求被 "预检 "为一个OPTIONS请求,但CDN在传递请求时 没有传递Access-Control请求标头 。因此,CDN(正确地)没有收到来自你的Rails应用程序的CORS响应头,所以浏览器甚至没有尝试GET请求,并以跨源错误失败。
"预检 "请求首先通过OPTIONS方法向另一域的资源发送一个HTTP请求,以确定实际请求是否可以安全发送
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests
你的CDN需要被设置为将正确的请求头信息转发给你的应用服务器,这样它就知道要生成CORS头信息。然后,CDN 将把这些 CORS 响应头传递给浏览器。
当你希望OPTIONS响应被缓存时,配置CloudFront以转发以下头信息。Origin、Access-Control-Request-Headers和Access-Control-Request-Method。
http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html#header-caching-web-cors
如果你为这些标头对你的CDN进行了修改,然后使你的资产失效,你的
配置本身应该可以正常工作。
rack-cors
# config/initializers/cors.rb # @note: must be run after initializers/_assets.rb Rails.application.config.middleware.insert_before 0, Rack::Cors do allow do origins '*' # All asset requests should be to rails prefixed assets paths # serverd from the asset pipeline (e.g.: "/assets/*" by default) resource "#{Rails.application.config.assets.prefix}/*", # Allow any request headers to be sent in the asset request # https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Access-Control-Allow-Headers headers: :any, # All asset fetches should be via GET # Support OPTIONS for pre-flight requests # https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests methods: [:get, :options]