Làm thế nào để bạn vượt qua CORS trong tiêu đề?

Giao thức truyền siêu văn bản [HTTP] là một giao thức truyền thông mạng cho phép giao tiếp giữa các máy khách HTTP [trình duyệt hoặc ứng dụng di động] và máy chủ. HTTP dựa trên kiến ​​trúc yêu cầu/phản hồi giữa máy khách và máy chủ. Ứng dụng khách gửi yêu cầu đến máy chủ và máy chủ xử lý yêu cầu của máy khách và gửi phản hồi lại cho máy khách. Mỗi thông báo HTTP bao gồm một chuỗi yêu cầu [dòng trạng thái để phản hồi], tiêu đề HTTP và nội dung thư

Yêu cầu NHẬN là gì?

Phương thức yêu cầu GET được sử dụng để truy xuất dữ liệu từ một URL được chỉ định. Phương thức HTTP GET là một trong chín phương thức yêu cầu Giao thức truyền siêu văn bản [HTTP] tiêu chuẩn. Yêu cầu GET chỉ nên nhận dữ liệu và không ảnh hưởng đến trạng thái của máy chủ

CORS là gì?

Chia sẻ tài nguyên nguồn gốc chéo [CORS] là một cơ chế bảo mật dựa trên các tiêu đề HTTP. CORS cho phép giao tiếp an toàn giữa các trình duyệt và máy chủ từ các nguồn khác nhau. CORS được tạo do các ràng buộc của chính sách gốc thống nhất, chính sách này hạn chế tài nguyên chỉ tương tác với các tài nguyên nằm trong cùng một miền

Ví dụ tiêu đề gốc

Origin: [URL]


Làm cách nào để thực hiện yêu cầu GET với Tiêu đề CORS?

Để thực hiện yêu cầu GET với các tiêu đề CORS, bạn cần gửi yêu cầu TÙY CHỌN 'preflight' tới máy chủ và kiểm tra xem máy chủ có thể cung cấp các tiêu đề HTTP được yêu cầu hay không. Nếu yêu cầu của bạn được máy chủ chấp nhận, nó sẽ phản hồi bằng mã trạng thái 200, bao gồm tiêu đề Access-Control-Allow-Origin với tên miền của bạn và tiêu đề Access-Control-Allow-Headers chứa các tiêu đề HTTP bắt buộc. Sau đó, bạn có thể gửi yêu cầu GET sau để lấy thông tin cần thiết

TÙY CHỌN Yêu cầu với tiêu đề CORS

OPTIONS /echo/get/json HTTP/1.1
Host: reqbin.com
Origin: //example.reqbin.com
Access-Control-Request-Headers: Content-Type


Phản hồi của máy chủ đối với yêu cầu TÙY CHỌN của chúng tôi thông báo rằng khách hàng có thể gửi yêu cầu GET với các tiêu đề CORS

Phản hồi của máy chủ đối với yêu cầu TÙY CHỌN

HTTP/1.1 200 OK
Access-Control-Allow-Origin: //example.reqbin.com
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Headers: Content-Type


Xem thêm

  • Làm cách nào để yêu cầu JSON từ máy chủ?
  • Làm cách nào để đăng Dữ liệu Biểu mẫu HTML lên Máy chủ?
  • Làm cách nào tôi có thể gửi yêu cầu CORS bằng Curl?
  • Làm cách nào để gửi Yêu cầu NHẬN với Tiêu đề ủy quyền mã thông báo Bearer?

    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ừ

      OPTIONS /echo/get/json HTTP/1.1
      Host: reqbin.com
      Origin: //example.reqbin.com
      Access-Control-Request-Headers: Content-Type
      8 đến
      OPTIONS /echo/get/json HTTP/1.1
      Host: reqbin.com
      Origin: //example.reqbin.com
      Access-Control-Request-Headers: Content-Type
      9]

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

      OPTIONS /echo/get/json HTTP/1.1
      Host: reqbin.com
      Origin: //example.reqbin.com
      Access-Control-Request-Headers: Content-Type
      8 đến
      HTTP/1.1 200 OK
      Access-Control-Allow-Origin: //example.reqbin.com
      Access-Control-Allow-Methods: GET, POST
      Access-Control-Allow-Headers: Content-Type
      1]

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

      OPTIONS /echo/get/json HTTP/1.1
      Host: reqbin.com
      Origin: //example.reqbin.com
      Access-Control-Request-Headers: Content-Type
      8 đến
      HTTP/1.1 200 OK
      Access-Control-Allow-Origin: //example.reqbin.com
      Access-Control-Allow-Methods: GET, POST
      Access-Control-Allow-Headers: Content-Type
      3]

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

      HTTP/1.1 200 OK
      Access-Control-Allow-Origin: //example.reqbin.com
      Access-Control-Allow-Methods: GET, POST
      Access-Control-Allow-Headers: Content-Type
      4 đến
      HTTP/1.1 200 OK
      Access-Control-Allow-Origin: //example.reqbin.com
      Access-Control-Allow-Methods: GET, POST
      Access-Control-Allow-Headers: Content-Type
      5]

    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à 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 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

    Đố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
    OPTIONS /echo/get/json HTTP/1.1
    Host: reqbin.com
    Origin: //example.reqbin.com
    Access-Control-Request-Headers: Content-Type
    80[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, trình duyệt sẽ yêu cầu trình duyệt gửi yêu cầu chạy trước đến 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

      OPTIONS /echo/get/json HTTP/1.1
      Host: reqbin.com
      Origin: //example.reqbin.com
      Access-Control-Request-Headers: Content-Type
      82

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

      • OPTIONS /echo/get/json HTTP/1.1
        Host: reqbin.com
        Origin: //example.reqbin.com
        Access-Control-Request-Headers: Content-Type
        83

      • OPTIONS /echo/get/json HTTP/1.1
        Host: reqbin.com
        Origin: //example.reqbin.com
        Access-Control-Request-Headers: Content-Type
        84

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

    OPTIONS /echo/get/json HTTP/1.1
    Host: reqbin.com
    Origin: //example.reqbin.com
    Access-Control-Request-Headers: Content-Type
    82 có thể đáp ứng yêu cầu chiếu trước của
    OPTIONS /echo/get/json HTTP/1.1
    Host: reqbin.com
    Origin: //example.reqbin.com
    Access-Control-Request-Headers: Content-Type
    82 với ít nhất các tiêu đề phản hồi sau theo tiêu chuẩn Tìm nạp

    • OPTIONS /echo/get/json HTTP/1.1
      Host: reqbin.com
      Origin: //example.reqbin.com
      Access-Control-Request-Headers: Content-Type
      87

    • OPTIONS /echo/get/json HTTP/1.1
      Host: reqbin.com
      Origin: //example.reqbin.com
      Access-Control-Request-Headers: Content-Type
      88

    • 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ả

    Để tích hợp giả, bạn kích hoạt CORS bằng cách tạo một phương thức

    OPTIONS /echo/get/json HTTP/1.1
    Host: reqbin.com
    Origin: //example.reqbin.com
    Access-Control-Request-Headers: Content-Type
    82 để trả về các tiêu đề phản hồi được yêu cầu [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 đề
    OPTIONS /echo/get/json HTTP/1.1
    Host: reqbin.com
    Origin: //example.reqbin.com
    Access-Control-Request-Headers: Content-Type
    91' 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
    OPTIONS /echo/get/json HTTP/1.1
    Host: reqbin.com
    Origin: //example.reqbin.com
    Access-Control-Request-Headers: Content-Type
    80 [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

    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 thức API Gateway. 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

    OPTIONS /echo/get/json HTTP/1.1
    Host: reqbin.com
    Origin: //example.reqbin.com
    Access-Control-Request-Headers: Content-Type
    82 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 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

    OPTIONS /echo/get/json HTTP/1.1
    Host: reqbin.com
    Origin: //example.reqbin.com
    Access-Control-Request-Headers: Content-Type
    82 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à
    OPTIONS /echo/get/json HTTP/1.1
    Host: reqbin.com
    Origin: //example.reqbin.com
    Access-Control-Request-Headers: Content-Type
    88 vì tích hợp proxy không trả về phản hồi tích hợp

    Tiêu đề nào là cần thiết cho CORS?

    Triển khai chia sẻ tài nguyên trên nhiều nguồn gốc đơn giản . Tiêu đề này được máy chủ trả về khi một trang web yêu cầu tài nguyên tên miền chéo, với tiêu đề Gốc do trình duyệt thêm vào. Access-Control-Allow-Origin is the most significant. This header is returned by a server when a website requests a cross-domain resource, with an Origin header added by the browser.

    Tiêu đề phản hồi CORS là gì?

    Tiêu đề phản hồi được liệt kê trong danh sách an toàn CORS là tiêu đề HTTP trong phản hồi CORS được coi là an toàn để hiển thị cho các tập lệnh máy khách . Chỉ các tiêu đề phản hồi được liệt kê trong danh sách an toàn mới được cung cấp cho các trang web. Theo mặc định, danh sách an toàn bao gồm các tiêu đề phản hồi sau. Kiểm soát bộ đệm. Nội dung-Ngôn ngữ.

    Làm cách nào để cho phép CORS trong JavaScript?

    Thêm tiêu đề CORS vào ứng dụng . const express = require["express"]; . env. SERVER_PORT. 3001; . // enable-cors. tổ chức/server_expressjs. ứng dụng html. - see //enable-cors.org/server_expressjs.html app.

    Làm cách nào để đặt tiêu đề gốc trong javascript?

    Tóm lại. bạn không thể . Như được mô tả trên MDN; .

Chủ Đề