Nội dung

    Phản hồi máy chủ 415 Unsupported Media Type

    Mã trạng thái HTTP 415 (Unsupported Media Type)

    Mã trạng thái HTTP 415 xảy ra khi máy chủ từ chối xử lý yêu cầu do loại phương tiện không được hỗ trợ. Điều này thường xảy ra khi khách hàng cố gắng gửi dữ liệu ở định dạng mà máy chủ không thể xử lý. Dưới đây là những nguyên nhân, ví dụ và cách khắc phục lỗi này.

    415 - Unsupported Media Type

    Nguyên nhân phát sinh mã trạng thái 415

    • Tiêu đề Content-Type không đúng

      Các API khác nhau hỗ trợ các định dạng dữ liệu khác nhau, và nếu tiêu đề Content-Type gửi đi không khớp với định dạng mong đợi, máy chủ sẽ trả về mã trạng thái 415.

    • Thiếu hỗ trợ định dạng

      Máy chủ có thể đơn giản là không hỗ trợ định dạng dữ liệu đã được gửi. Ví dụ, nếu API mong đợi JSON nhưng khách hàng gửi XML.

    • Lỗi trong mã hóa dữ liệu

      Mã hóa dữ liệu sai hoặc cấu trúc yêu cầu không đúng cũng có thể dẫn đến lỗi 415.

    Ví dụ thực tiễn

    1. Định dạng JSON

      Ví dụ: Khách hàng gửi JSON nhưng thiết lập tiêu đề Content-Type thành text/plain. Máy chủ sẽ không thể xử lý yêu cầu này và trả về mã 415.

    2. Định dạng XML

      Ví dụ: Khách hàng cố gắng gửi dữ liệu ở định dạng XML nhưng máy chủ mong đợi dữ liệu ở định dạng JSON. Trong trường hợp này, mã 415 cũng sẽ được trả về.

    3. Tệp không hợp lệ

      Ví dụ: Nếu API mong đợi hình ảnh ở định dạng JPEG, nhưng khách hàng gửi tệp PNG với tiêu đề không đúng, máy chủ sẽ trả về mã 415.

    Cách khắc phục lỗi 415 trên các ngôn ngữ lập trình khác nhau

    Ngôn ngữ Ví dụ mã
    JavaScript (Node.js)
    
    const axios = require('axios');
    
    axios.post('https://example.com/api', data, {
        headers: {
            'Content-Type': 'application/json'
        }
    })
    .then(response => {
        console.log(response.data);
    })
    .catch(error => {
        if (error.response && error.response.status === 415) {
            console.error('Unsupported Media Type: Проверьте заголовок Content-Type');
        }
    });
                    
    Python (Requests)
    
    import requests
    
    headers = {
        'Content-Type': 'application/json'
    }
    response = requests.post('https://example.com/api', json=data, headers=headers)
    
    if response.status_code == 415:
        print('Unsupported Media Type: Проверьте заголовок Content-Type')
                    
    Java (HttpURLConnection)
    
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class HttpClient {
        public static void main(String[] args) {
            try {
                URL url = new URL("https://example.com/api");
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("POST");
                connection.setRequestProperty("Content-Type", "application/json");
                connection.setDoOutput(true);
    
                OutputStream os = connection.getOutputStream();
                os.write(data.getBytes());
                os.flush();
                os.close();
    
                if (connection.getResponseCode() == 415) {
                    System.out.println("Unsupported Media Type: Проверьте заголовок Content-Type");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }