كيفية ضبط الوصول إلى السيطرة على الأصل في Webrick تحت القضبان؟

StackOverflow https://stackoverflow.com/questions/2535454

سؤال

لقد كتبت تطبيق Rails صغير لتقديم محتوى إلى موقع آخر عبر XMLHTTPrequests التي ستعمل من مجال آخر (لن يكون من الممكن تشغيلها على نفس الخادم). أفهم أنني سأحتاج إلى ضبط الوصول إلى السيطرة على الأصل على خادم Rails الخاص بي للسماح لصفحة الويب الطالبة بالوصول إلى هذه المادة.

يبدو موثقًا جيدًا إلى حد ما كيفية القيام بذلك مع Apache ، وربما يكون هذا هو الخادم الذي سأستخدمه بمجرد نشر الموقع. بينما أتطور على الرغم من أنني آمل فقط استخدام Webrick كما اعتدت على فعله مع القضبان. هل هناك طريقة لتكوين Webrick لتوفير رأس HTTP المناسب داخل القضبان؟

هل كانت مفيدة؟

المحلول

إذا كنت على Rails 2 ، فما عليك سوى إضافة هذا إلى تطبيقك.

before_filter :set_access

def set_access
  @response.headers["Access-Control-Allow-Origin"] = "*"
end

من الواضح أن التغيير "*" لشيء أقل انفتاحا قليلا سيكون فكرة جيدة.

نصائح أخرى

القضبان 4 (http://edgeguides.rubyonrails.org/security.html#default-headers)

في config/application.rb:

config.action_dispatch.default_headers.merge!({
  'Access-Control-Allow-Origin' => '*',
  'Access-Control-Request-Method' => '*'
})

القضبان 3.1

class ApplicationController < ActionController::Base
  protect_from_forgery
  after_filter :set_access_control_headers

  def set_access_control_headers
    headers['Access-Control-Allow-Origin'] = '*'
    headers['Access-Control-Request-Method'] = '*'
  end
end

Rails 3.1 - استخدام وحدة تحكم After_filter لم ينجح بالنسبة لي ، لذا أضفت وسيطًا مخصصًا بدلاً من ذلك:

في التطبيق/الوسيطة/cors_middleware.rb:

# For icons to work in Firefox with CDN
class CorsMiddleware
  def initialize(app)
    @app = app
  end

  def call(env)
    status, headers, body = @app.call(env)
    cors_headers = headers.merge({
      'Access-Control-Allow-Origin' => '*',
      'Access-Control-Request-Method' => '*'        
    })
    [status, cors_headers, body]
  end  
end

في config/application.rb:

require File.join(Rails.root, "app", "middleware", "cors_middleware")
config.middleware.insert_before ActionDispatch::Static, CorsMiddleware # Need it early in the chain to work for assets

القضبان 2.3.8

before_filter :allow_cross_domain_access
def allow_cross_domain_access
  response.headers["Access-Control-Allow-Origin"] = "*"
  response.headers["Access-Control-Allow-Methods"] = "*"
end

في حال كنت تريد الحل كجوهرة الوسيطة على الرف:https://github.com/cyu/rack-cors

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top