No, it’s not mandatory. Per the HTTP 1.1 specification:
Any HTTP/1.1 message containing an entity-body SHOULD include a Content-Type header field defining the media type of that body. If and only if the media type is not given by a Content-Type field, the recipient MAY attempt to guess the media type via inspection of its content and/or the name extension(s) of the URI used to identify the resource. If the media type remains unknown, the recipient SHOULD treat it as type “application/octet-stream”.
That said, it’s obviously going to be hard for the server to accurately interpret the data you’re sending if you omit the Content-Type header, so it’s not recommended to do so.