Máy tính api python

Chia sẻ tài nguyên trên nhiều nguồn gốc [CORS] là một tính năng bảo mật của trình duyệt nhằm hạn chế các yêu cầu HTTP trên nhiều nguồn gốc được bắt đầu từ các tập lệnh đang chạy trong trình duyệt. Nếu tài nguyên API REST của bạn nhận được các yêu cầu HTTP có nguồn gốc chéo không đơn giản, bạn cần bật hỗ trợ CORS

Xác định xem có bật hỗ trợ CORS hay không

Yêu cầu HTTP có nguồn gốc chéo là yêu cầu được thực hiện để

  • Một miền khác [ví dụ: từ

    import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    5 đến
    import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    6]

  • Một miền phụ khác [ví dụ: từ

    import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    5 đến
    import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    8]

  • Một cổng khác [ví dụ: từ

    import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    5 đến
    import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    0]

  • Một giao thức khác [ví dụ: từ

    import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    1 đến
    import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    2]

Các yêu cầu HTTP có nguồn gốc chéo có thể được chia thành hai loại. yêu cầu đơn giản và yêu cầu không đơn giản

Yêu cầu HTTP là đơn giản nếu tất cả các điều kiện sau đều đúng

  • Nó được phát hành đối với tài nguyên API chỉ cho phép các yêu cầu

    import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    0,
    import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    1 và
    import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    2

  • Nếu đó là một yêu cầu phương thức

    import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    2, nó phải bao gồm một tiêu đề
    import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    4

  • Loại nội dung tải trọng yêu cầu là

    import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    5,
    import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    6 hoặc
    import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    7

  • Yêu cầu không chứa tiêu đề tùy chỉnh

  • Bất kỳ yêu cầu bổ sung nào được liệt kê trong tài liệu Mozilla CORS cho các yêu cầu đơn giản

Đối với các yêu cầu phương thức

import json

def lambda_handler[event, context]:
    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': 'Content-Type',
            'Access-Control-Allow-Origin': '//www.example.com',
            'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
        },
        'body': json.dumps['Hello from Lambda!']
    }
2 có nguồn gốc chéo đơn giản, phản hồi từ tài nguyên của bạn cần bao gồm tiêu đề
import json

def lambda_handler[event, context]:
    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': 'Content-Type',
            'Access-Control-Allow-Origin': '//www.example.com',
            'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
        },
        'body': json.dumps['Hello from Lambda!']
    }
9, trong đó giá trị của khóa tiêu đề được đặt thành
import json

def lambda_handler[event, context]:
    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': 'Content-Type',
            'Access-Control-Allow-Origin': '//www.example.com',
            'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
        },
        'body': json.dumps['Hello from Lambda!']
    }
50[bất kỳ nguồn gốc nào] hoặc được đặt thành nguồn gốc được phép truy cập vào tài nguyên đó

Tất cả các yêu cầu HTTP có nguồn gốc chéo khác là các yêu cầu không đơn giản. Nếu tài nguyên API của bạn nhận được các yêu cầu không đơn giản, bạn cần bật hỗ trợ CORS

Ý nghĩa của việc kích hoạt hỗ trợ CORS

Khi trình duyệt nhận được yêu cầu HTTP không đơn giản, giao thức CORS yêu cầu trình duyệt gửi yêu cầu chạy trước tới máy chủ và chờ phê duyệt [hoặc yêu cầu thông tin xác thực] từ máy chủ trước khi gửi yêu cầu thực tế. Yêu cầu chiếu trước xuất hiện với API của bạn dưới dạng yêu cầu HTTP

  • Bao gồm một tiêu đề

    import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    4

  • Sử dụng phương pháp

    import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    52

  • Bao gồm các tiêu đề sau

    • import json
      
      def lambda_handler[event, context]:
          return {
              'statusCode': 200,
              'headers': {
                  'Access-Control-Allow-Headers': 'Content-Type',
                  'Access-Control-Allow-Origin': '//www.example.com',
                  'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
              },
              'body': json.dumps['Hello from Lambda!']
          }
      53

    • import json
      
      def lambda_handler[event, context]:
          return {
              'statusCode': 200,
              'headers': {
                  'Access-Control-Allow-Headers': 'Content-Type',
                  'Access-Control-Allow-Origin': '//www.example.com',
                  'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
              },
              'body': json.dumps['Hello from Lambda!']
          }
      54

Do đó, để hỗ trợ CORS, tài nguyên API REST cần triển khai phương pháp

import json

def lambda_handler[event, context]:
    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': 'Content-Type',
            'Access-Control-Allow-Origin': '//www.example.com',
            'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
        },
        'body': json.dumps['Hello from Lambda!']
    }
52 có thể đáp ứng yêu cầu chiếu trước của
import json

def lambda_handler[event, context]:
    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': 'Content-Type',
            'Access-Control-Allow-Origin': '//www.example.com',
            'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
        },
        'body': json.dumps['Hello from Lambda!']
    }
52 với ít nhất các tiêu đề phản hồi sau theo tiêu chuẩn Tìm nạp

  • import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    57

  • import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    58

  • import json
    
    def lambda_handler[event, context]:
        return {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Allow-Origin': '//www.example.com',
                'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
            },
            'body': json.dumps['Hello from Lambda!']
        }
    9

Cách bạn bật hỗ trợ CORS tùy thuộc vào loại tích hợp API của bạn

Kích hoạt hỗ trợ CORS cho tích hợp giả

Đối với tích hợp mô phỏng, bạn kích hoạt CORS bằng cách tạo một phương thức

import json

def lambda_handler[event, context]:
    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': 'Content-Type',
            'Access-Control-Allow-Origin': '//www.example.com',
            'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
        },
        'body': json.dumps['Hello from Lambda!']
    }
52 để trả về các tiêu đề phản hồi bắt buộc [với các giá trị tĩnh thích hợp] làm tiêu đề phản hồi của phương thức. Ngoài ra, mỗi phương thức kích hoạt CORS thực tế cũng phải trả về tiêu đề
import json

def lambda_handler[event, context]:
    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': 'Content-Type',
            'Access-Control-Allow-Origin': '//www.example.com',
            'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
        },
        'body': json.dumps['Hello from Lambda!']
    }
61' trong ít nhất 200 phản hồi của nó, trong đó giá trị của khóa tiêu đề được đặt thành
import json

def lambda_handler[event, context]:
    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': 'Content-Type',
            'Access-Control-Allow-Origin': '//www.example.com',
            'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
        },
        'body': json.dumps['Hello from Lambda!']
    }
50 [bất kỳ nguồn gốc nào] hoặc được đặt thành nguồn gốc được phép truy cập

Kích hoạt hỗ trợ CORS cho tích hợp không có proxy của Lambda hoặc HTTP và tích hợp dịch vụ AWS

Đối với tích hợp tùy chỉnh Lambda [không phải proxy], tích hợp tùy chỉnh HTTP [không phải proxy] hoặc tích hợp dịch vụ AWS, bạn có thể thiết lập các tiêu đề bắt buộc bằng cách sử dụng cài đặt phản hồi tích hợp và phản hồi của phương pháp Cổng API. Khi bạn bật CORS bằng cách sử dụng Bảng điều khiển quản lý AWS, API Gateway sẽ tạo một phương thức

import json

def lambda_handler[event, context]:
    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': 'Content-Type',
            'Access-Control-Allow-Origin': '//www.example.com',
            'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
        },
        'body': json.dumps['Hello from Lambda!']
    }
52 và cố gắng thêm tiêu đề
import json

def lambda_handler[event, context]:
    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': 'Content-Type',
            'Access-Control-Allow-Origin': '//www.example.com',
            'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
        },
        'body': json.dumps['Hello from Lambda!']
    }
9 vào các phản hồi tích hợp phương thức hiện có của bạn. Điều này không phải lúc nào cũng hoạt động và đôi khi bạn cần sửa đổi phản hồi tích hợp theo cách thủ công để kích hoạt CORS đúng cách. Thông thường, điều này chỉ có nghĩa là sửa đổi phản hồi tích hợp theo cách thủ công để trả về tiêu đề
import json

def lambda_handler[event, context]:
    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': 'Content-Type',
            'Access-Control-Allow-Origin': '//www.example.com',
            'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
        },
        'body': json.dumps['Hello from Lambda!']
    }
9

Bật hỗ trợ CORS cho tích hợp proxy Lambda hoặc HTTP

Đối với tích hợp proxy Lambda hoặc tích hợp proxy HTTP, bạn vẫn có thể thiết lập tiêu đề phản hồi

import json

def lambda_handler[event, context]:
    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': 'Content-Type',
            'Access-Control-Allow-Origin': '//www.example.com',
            'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
        },
        'body': json.dumps['Hello from Lambda!']
    }
52 bắt buộc trong Cổng API. Tuy nhiên, chương trình phụ trợ của bạn chịu trách nhiệm trả về các tiêu đề
import json

def lambda_handler[event, context]:
    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': 'Content-Type',
            'Access-Control-Allow-Origin': '//www.example.com',
            'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
        },
        'body': json.dumps['Hello from Lambda!']
    }
9 và
import json

def lambda_handler[event, context]:
    return {
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Headers': 'Content-Type',
            'Access-Control-Allow-Origin': '//www.example.com',
            'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
        },
        'body': json.dumps['Hello from Lambda!']
    }
58 vì tích hợp proxy không trả về phản hồi tích hợp

Chủ Đề