I understand that the Accept HTTP header defines a data type expected in a response sent from the server, so it's used as a response header.
My question is regarding the Content-Type, it's used by a client to define the body format of a request sent. I always used it as part of a client request, so I have a client request where I set the headers with Accept and Content-Type. And recently, I came across a project where the Content-Type is defined in the response headers (so sent by the server).
So my question is: Content-Type need to be set as part of the client request header or as part of the server response header or can it be set to both?
The difference can be found in the specifications, in this case RFC 7231:
The "Accept" header field can be used by user agents to specify response media types that are acceptable.
The "Content-Type" header field indicates the media type of the associated representation
The Accept header always indicates what kind of response from the server a client can accept. Content-Type is about the content of the current request or response, depending on which kind of HTTP message it is applied.
So if a request has no payload, you don't have to send a Content-Type request header, and the same goes for your response: no body — no header necessary.
Some servers may require you to provide a Content-Type in a request even if the request has no payload; the server should return a 415 Unsupported Media Type response if you omit it.