This post was originally published on this site
Recently I had a problem while serving dynamic content in a Spring MVC application; (more details here) when attempting to open some of the dynamic content with Chrome I was having a weird error message :
Duplicate headers received from server The response from the server contained duplicate headers. This problem is generally the result of a misconfigured website or proxy. Only the website or proxy administrator can fix this issue. Error 349 (net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION): Multiple distinct Content-Disposition headers received. This is disallowed to protect against HTTP response splitting attacks.
I wasn’t sure why I was having this problem, since some dynamic content was working properly and I was setting only once the Content-Disposition header on my code
So after searching around a bit I stumbled upon the HTTP specs it turns out the Content-Disposition header should not contain a coma since it will be treated as a header separator
Multiple message-header fields with the same field-name MAY be present in a message if and only if the entire field-value for that header field is defined as a comma-separated list [i.e., #(values)]. It MUST be possible to combine the multiple header fields into one “field-name: field-value” pair, without changing the semantics of the message, by appending each subsequent field-value to the first, each separated by a comma.
Personally I decided to create slugs for all my file names using the Slugify library :
com.github.slugify
slugify
2.1.3
public String slugify(String originalFileName){
String extension = FilenameUtils.getExtension(originalFileName);
return new Slugify(true).slugify(FilenameUtils.removeExtension(originalFileName)) +"."+extension;;
}