[rack-cors gem更改接受标头从json到html

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[rack-cors gem更改接受标头从json到html相关的知识,希望对你有一定的参考价值。

我有一个Rails 3应用程序。在API开发过程中,由于unexpected OPTIONS requests而使OPTIONS遇到了一些麻烦。因此,我决定使用CORS宝石。

rack-cors

config/initializers/cors.rb

我使用以下jQuery代码发送AJAX请求:

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

[在使用$.ajax({ contentType: "application/json; charset=utf-8", type: 'POST', dataType: 'json', url: url, data: JSON.stringify(data) }).done(success).fail(fail); 之前(在rack-cors场景中,它运作良好)。但是在安装localhost <-> localhost之后,我抓住了rack-cors,并在日志中找到了该行:

500 error

[似乎Rails忽略了Started POST "/api/my_resource/" for 127.0.0.1 at 2015-12-04 20:34:00+0300 Processing by Api::MyResourceController#create as html 内容类型要求。我该怎么做才能解决此问题?

请求标题:

json

响应标题:

POST /api/my_resource/ HTTP/1.1
Host: localhost:3000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:42.0) Gecko/20100101 Firefox/42.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: ru,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Content-Type: application/json; charset=utf-8
Content-Length: 870
Origin: null
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
答案

尝试移至HTTP/1.1 500 Internal Server Error Content-Type: text/html; charset=utf-8 Content-Length: 963 X-Request-Id: e4150020dffb0fcc34cf04e134584b06 X-Runtime: 0.380448 access-control-allow-origin: null Access-Control-Allow-Methods: GET, POST, PUT, OPTIONS Access-Control-Max-Age: 1728000 Access-Control-Allow-Credentials: true Vary: Origin X-Rack-CORS: hit Server: WEBrick/1.3.1 (Ruby/2.1.4/2014-10-27) Date: Fri, 04 Dec 2015 17:30:10 GMT Connection: Keep-Alive

application.rb

以上是关于[rack-cors gem更改接受标头从json到html的主要内容,如果未能解决你的问题,请参考以下文章

406 Spring MVC Json,根据请求“接受”标头不可接受

REST API - 使用“接受:应用程序/json”HTTP 标头

当我想在zf2客户端代码中使用“application / json”时,接受请求标头是“text / html,application / xhtml ...(etc)”

引发异常时如何保留响应标头?

Spring MVC + JSON = 406 不可接受

Twitter Rest API 不接受 Swift 中令牌的标头