当前位置: 首页 > 知识库问答 >
问题:

无法从获取请求中获取“访问-控制-允许-起源”标头

荣俊
2023-03-14
    fetch('https://www.myapp.com/api/post_comment/test', {
     method: 'get',
     headers: {'Content-Type':'application/json'}
    });

以下是我在js控制台中不断出现的错误:

CORS策略阻止从来源“http://localhost:3000”在“https://www.myapp.com/api/test”获取:对飞行前请求的响应未通过访问控制检查:请求的资源上没有“Access-Control-Allow-Origin”标头。如果一个不透明的响应满足您的需要,请将请求的模式设置为“no-cors”,以便在禁用CORS的情况下获取资源。

“https://www.myapp.com/api/test”的FetchEvent导致了一个网络错误响应:一个不是响应的对象被传递给respondWith()。

#Gemfile:

gem 'rack-cors'

#config/initializers/cors.rb:

Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins '*'
    resource '/api/*', headers: :any, methods: [:get, :post, :patch, :put]
  end
end
before_action :cors_preflight_check
after_action :cors_set_access_control_headers


def cors_set_access_control_headers
    headers['Access-Control-Allow-Origin'] = '*'
    headers['Access-Control-Allow-Methods'] = 'POST, PUT, DELETE, GET, OPTIONS'
    headers['Access-Control-Request-Method'] = '*'
    headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization'
end

# If this is a preflight OPTIONS request, then short-circuit the
# request, return only the necessary headers and return an empty
# text/plain.

def cors_preflight_check
    headers['Access-Control-Allow-Origin'] = '*'
    headers['Access-Control-Allow-Methods'] = 'POST, PUT, DELETE, GET, OPTIONS'
    headers['Access-Control-Request-Method'] = '*'
    headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization'
    render :text => '', :content_type => 'text/plain'
end

但我还是犯了错误。有人知道我怎么解决这个吗?

如果将模式:'no-cors'和添加到获取代码中,我可以发布数据,但不能检索数据。

共有1个答案

邹嘉荣
2023-03-14

将配置从config/cors.rb移动到config/initializers/cors.rb

config/initializers/中的所有文件都将在rails启动时加载。

此外,也可以通过Rails6的新特性来阻止不需要的主机。

  config.hosts.clear
 类似资料:
  • 我将JSON对象存储在Amazon S3中,我想从Javascript直接从S3加载数据。我的GET看起来很普通: 我得到以下错误: 我可以使用curl从S3获取URL,或者直接从浏览器导航到S3。我真的要通过自己的服务器代理所有这些请求吗?

  • 在我的应用程序中,我尝试使用fetch API从AWS S3存储桶中获取文件: 我得到以下错误: 在'https://my-bucket.s3.amazonaws.com/uploads/044_IMH7kfc.m4a?AWSAccessKeyId=AKIAZB4Y4NZS 这是我的AWS桶中的CORS配置文件: 获取API在我的应用程序说没有'访问-控制-允许-起源'标头存在于请求的资源,但"访

  • 我犯了这个错误 无法加载XMLHttpRequesthttp://domain.com/canvas/include/rs-plugin/js/extensions/revolution.extension.video.min.js.飞行前响应中的访问控制允许标头不允许请求标头字段X-Requested-With。 我的php页面顶部有这两行代码,用于加载这个js文件。 但是问题依然存在,我该怎么

  • 我有这个错误,我不知道为什么在我的后端节点js我使用cors 我的方法前端: 错误: CORS策略阻止了从来源http://localhost:3000获取http://localhost:8080/login的访问:对起飞前请求的响应不通过权限改造检查:请求的资源上没有访问控制允许来源标头。如果不透明的响应满足您的需求,请将请求的模式设置为no-cors,以在禁用CORS的情况下获取资源。

  • 我试着把数据从React.jslocalhostinsert.php文件。当我提交的形式从reactjs它给我错误的控制台错误是: 访问位于“”的XMLHttpRequesthttp://localhost/reactphpdemo/connect.php“起源”http://localhost:3000'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在'access

  • 当我试图从另一个域访问rest服务时,我得到了以下错误 无法加载对飞行前请求的响应没有通过访问控制检查:请求的资源上没有“访问-控制-允许-起源”标头。因此,不允许访问源'http://localhost:8080'。 我将服务器端配置为响应跨域调用,这可以用于GET调用,但POST调用会产生错误 谢谢