An HTTP response looks like this:
HTTP/1.1 200 OK
<headers>
<blank line>
<response body>
The <blank line> generally contains these characters - \r\n, also known as CRLF.
So, when a server sends a response, the client (or browser) can differentiate from the headers and the response body by looking at the <blank line>. So, anything after <blank line> is treated as the response body.
What that means is, there can be at most 1 response body only. So, even if you think you're sending color and file_data separately like you're doing, they're still going in one response and the client will treat them as a single body.
What you can do to get around this?
You'll need a way to know which part of the response body is the color and which is file_data. You can do that by sending a custom header along with the response.
Let's say, your response looks like this:
HTTP/1.1 200 OK
<headers>
<blank line>
<color><file_data>
Now, you can set a custom header on your response which will tell you how many bytes are there of the color variable.
For example, if the value of color is yellow and it's 6 characters, that means it has 6 bytes. So, you can set a custom header that would tell you the total length of color:
HTTP/1.1 200 OK
<headers>
X-Color-Length: 6
<blank line>
<color><file_data>
Then, in your client side, you can get the total bytes from the X-Color-Length header and read that number of bytes from the body to get the value of the color. Example:
response = requests.get(...)
color_len = response.headers['X-Color-Length']
color = response.content[:color_len]
file_data = response.content[color_len:]
UPDATE: Now that I think about it, I've made this a little more complex than it should be. You can just send the color's value directly in a header like X-Color: <color>, instead of the number of bytes it has.