CORS với POSTMAN


90

Chủ đề này đã được hỏi một vài lần, nhưng tôi vẫn không hiểu điều gì đó:

Khi tôi đọc câu trả lời về

Không có tiêu đề 'Access-Control-Allow-Origin'

vấn đề, nó nói một khung cảnh nên được đặt trên máy chủ yêu cầu để cho phép tên miền chéo: add_header 'Access-Control-Allow-Origin' '*';.

Tuy nhiên, vui lòng cho tôi biết tại sao khi hỏi từ người đưa thư (là khách hàng), nó hoạt động như một sự quyến rũ và tôi nhận được phản hồi từ máy chủ được yêu cầu?

Cảm ơn bạn


24
Postman không quan tâm đến SOP, nó là một công cụ dành cho nhà phát triển không phải là một trình duyệt.
Musa

2
@Musa Ok, vậy nếu đó là sự cố của trình duyệt (máy khách), tại sao tôi phải sửa đổi một số thứ trên máy chủ?
IsraGab

8
Máy chủ của nó là máy chủ cho trình duyệt biết rằng nó được ( CORS ) hay không cho một trang web nhất định truy cập vào nội dung của nó và trình duyệt tôn trọng nó
Musa

Tôi có cùng một câu hỏi. Làm thế nào người ta có thể làm điều đó theo chương trình, trong trường hợp này là trên điện tử.
mluis

8
Câu hỏi thực sự ở đây là làm thế nào để cấu hình POSTMAN để bắt chước hành vi của trình duyệt nơi một yêu cầu ORIGIN được gửi đầu tiên. Về bản chất, làm thế nào để bạn làm cho POSTMAN hoạt động giống như một trình duyệt vì chúng tôi cần kiểm tra để đảm bảo rằng các API của chúng tôi được định cấu hình chính xác. Vì vậy, điều gì sẽ xảy ra nếu API hoạt động từ POSTMAN và nó bị hỏng do CORS từ trình duyệt. Nó có nghĩa là API vô dụng.
Chris Love

Câu trả lời:


50

Như @Musa nhận xét nó, có vẻ như lý do là:

Postman không quan tâm đến SOP, nó là một công cụ dành cho nhà phát triển không phải là một trình duyệt

Nhân tiện, đây là một tiện ích mở rộng chrome để làm cho nó hoạt động trên trình duyệt của bạn ( tiện ích mở rộng này dành cho chrome, nhưng bạn có thể tìm thấy cho FF hoặc Safari).

Kiểm tra tại đây nếu bạn muốn tìm hiểu thêm về Cross-Origin và tại sao nó hoạt động cho các tiện ích mở rộng.


5
Sau đó, làm cách nào để bảo vệ các tuyến API của tôi được truy cập từ các công cụ như Postman? Ví dụ: một API yêu cầu xác minh captcha. Nhưng nếu được truy cập trực tiếp từ Postman, việc xác minh bằng hình ảnh xác thực sẽ bị bỏ qua
Sadman Muhib Samyo

5
Liên kết đến tiện ích mở rộng bị hỏng.
jayarjo

Câu hỏi tương tự, ngoài vấn đề này, làm thế nào một phần mở rộng có thể phá vỡ chính sách xuất xứ duy nhất?
Iván Cortés Romero

liên kết đến chrome-extension bị hỏng
OhadR

46

Nếu bạn sử dụng một trang web và bạn điền vào biểu mẫu để gửi thông tin (ví dụ: số an sinh xã hội của bạn), bạn muốn chắc chắn rằng thông tin đang được gửi đến trang web mà bạn nghĩ rằng nó đang được gửi đến. Vì vậy, các trình duyệt được xây dựng để nói, theo mặc định, 'Không gửi thông tin đến một miền khác với miền đang được truy cập).

Cuối cùng điều đó đã trở nên quá hạn chế nhưng ý tưởng mặc định vẫn còn trong các trình duyệt. Đừng để trang web gửi thông tin đến một miền khác. Nhưng đây là tất cả kiểm tra trình duyệt. Chrome và firefox, v.v. có mã tích hợp cho biết 'trước khi gửi yêu cầu này, chúng tôi sẽ kiểm tra xem đích đến có khớp với trang đang được truy cập hay không'.

Postman (hoặc CURL trên dòng cmd) không có những séc tích hợp sẵn. Bạn đang tương tác thủ công với một trang web để bạn có toàn quyền kiểm soát những gì bạn đang gửi.


2
Chính xác hơn người đưa thư không gửi một yêu cầu XMLHTTP đó sẽ được kiểm tra nhưng một cuộc gọi mạng cấp cao nhất (như mở của bạn URL trên một tab trình duyệt mới) vì vậy nó không bị đá ngay cả khi trong gia hạn
tgkprog

Trình duyệt không kiểm tra rằng trang web của bạn không gửi dữ liệu đến một miền khác: nếu trang web miền khác cho phép tất cả các nguồn gốc, trình duyệt của bạn hoàn toàn đồng ý với điều đó. Ngược lại, nó bảo vệ miền khác, trong trường hợp trang web của bạn sử dụng tài nguyên của nó mà không được phép.
XouDo

36

CORS(Chia sẻ tài nguyên nhiều nguồn gốc) và SOP(Chính sách cùng nguồn gốc) là các cấu hình phía máy chủ mà máy khách quyết định thực thi hay không .

Liên quan đến khách hàng

  • Hầu hết các Trình duyệt đều thực thi nó để ngăn chặn các vấn đề liên quan đến CSRFtấn công.
  • Hầu hết các công cụ Phát triển không quan tâm đến nó.

11

Mặc dù tất cả các câu trả lời ở đây là một lời giải thích thực sự tốt về cors là gì nhưng câu trả lời trực tiếp cho câu hỏi của bạn sẽ là do sự khác biệt sau đây của người đưa thư và trình duyệt.

Trình duyệt: Gửi OPTIONSlệnh gọi để kiểm tra loại máy chủ và nhận các tiêu đề trước khi gửi bất kỳ yêu cầu mới nào đến điểm cuối API. Nơi nó kiểm tra Access-Control-Allow-Origin. Việc tính đến Access-Control-Allow-Origintiêu đề này chỉ cần chỉ định tất cả NGUỒN GỐC CHÉO được phép, mặc dù theo mặc định trình duyệt sẽ chỉ cho phép cùng một nguồn gốc.

Postman: Gửi trực tiếp GET, POST, PUT, DELETE, vv theo yêu cầu mà không cần kiểm tra những gì loại máy chủ là gì và nhận được tiêu đề Access-Control-Allow-Originbằng cách sử dụng OPTIONScuộc gọi đến máy chủ.


"Gửi lệnh gọi OPTIONS để kiểm tra loại máy chủ và nhận tiêu đề trước khi gửi bất kỳ yêu cầu mới nào đến điểm cuối API" - Điều đó không đúng. Nó chỉ làm điều đó cho các yêu cầu không đơn giản.
Quentin

1

Nói chung, Postman được sử dụng để gỡ lỗi và được sử dụng trong giai đoạn phát triển. Nhưng trong trường hợp bạn muốn chặn nó ngay cả từ người đưa thư, hãy thử điều này.

    const referrer_domain = "[enter-the-domain-name-of-the-referrer]"
    //check for the referrer domain
    app.all('/*', function(req, res, next) {
      if(req.headers.referer.indexOf(referrer_domain) == -1){
        res.send('Invalid Request')
      }

      next();
    });

thêm mã vào tệp của bạn với bộ định tuyến. Nếu bạn có tệp có "bộ định tuyến", hãy thêm mã ở đầu tệp. Cùng một tệp mà bạn có: const express = demand ('express') const app = express (); const cors = demand ('cors');
samceena

chỉnh sửa nó trong app.jsnếu bạn sử dụng node app.jsđể chạy máy chủ.
Bharath Pabba

điều đó có thể bảo vệ máy chủ của bạn khỏi ddos ​​không?
SuperUberDuper

-1

Sử dụng plugin của trình duyệt / chrome postman để kiểm tra CORS / SOP giống như một trang web. Sử dụng ứng dụng máy tính để bàn thay thế để tránh các điều khiển này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.