Patch #26709

Use correct http status codes

Added by Pavel Rosický 2 months ago. Updated 11 days ago.

Status:NewStart date:
Priority:NormalDue date:
Assignee:-% Done:

0%

Category:REST API
Target version:4.1.0

Description

1/ redmine ignores accept headers and jquery dataType attribute

The Accept request-header field can be used to specify certain media types which are acceptable for the response.

If no Accept header field is present, then it is assumed that the client accepts all media types. If an Accept header field is present, and if the server cannot send a response which is acceptable according to the combined Accept field value, then the server SHOULD send a 406 (not acceptable) response.

http://api.jquery.com/jQuery.ajax/

The type of data that you're expecting back from the server. If none is specified, jQuery will try to infer it based on the MIME type of the response (an XML MIME type will yield XML, in 1.4 JSON will yield a JavaScript object, in 1.4 script will execute the script, and anything else will be returned as a string). The available types (and the result passed as the first argument to your success callback)

examples:

curl -v -H http://demo.redmine.org/issues.json
-> 200 + json OK!

but
curl -v -H "Accept: application/json" http://demo.redmine.org/issues
-> 500 no builder for format

expected (with patch)
-> 200 + json output

in some cases html is returned even if json was requested

2/ 406 error raises exception

curl -v http://demo.redmine.org/issues.xxx
-> 406 + exception ActionController::UnknownFormat

expected (with patch)
-> 406 no exception

3/ csrf protection - useful to avoid exceptions because of site-scanner bots

curl -v -H "Accept: text/javascript" http://demo.redmine.org/issues/new
-> 422 + exception ActionController::InvalidCrossOriginRequest: Security warning: an embedded <script> tag on another site requested protected JavaScript.

expected
-> 400 - no exception

builders.rb.patch Magnifier - no builder for format (501 Bytes) Pavel Rosický, 2017-08-17 01:26

application_controller.rb.patch Magnifier - ActionController::UnknownFormat & CSRF (1.11 KB) Pavel Rosický, 2017-08-17 01:26

api_test.rb.patch Magnifier - + spec (1.22 KB) Pavel Rosický, 2017-09-15 22:43

History

#1 Updated by Toshi MARUYAMA about 1 month ago

Could you add tests?
source:trunk/test/integration

#2 Updated by Pavel Rosický about 1 month ago

builders.rb.patch without a patch fails:

Failure:
Redmine::ApiTest::ApiTest#test_accept_header_on_error:
Expected response to be a <422: Unprocessable Entity>, but was a <500: Internal Server Error>.
Expected: 422
  Actual: 500

Failure:
Redmine::ApiTest::ApiTest#test_accept_header_on_show:
Expected response to be a <200: ok>, but was a <500: Internal Server Error>.
Expected: 200
  Actual: 500

application_controller.rb.patch this isn't worth fixing, it affects only logs so I can't detect it in tests anyway

#3 Updated by Toshi MARUYAMA 11 days ago

  • Target version set to 4.1.0

Also available in: Atom PDF