POSTMAN ile CORS


95

Bu konu birkaç kez soruldu, ancak hala bir şey anlamıyorum:

Hakkındaki cevapları okuduğumda

'Access-Control-Allow-Origin' başlığı yok

Sorun, bu bir ayar alanlar arası sağlamak için istenen sunucu üzerinde ayarlanması gerekir diyor: add_header 'Access-Control-Allow-Origin' '*';.

Ama lütfen bana neden postacıdan (ki bu bir müşteri) sorduğumda bir cazibe gibi çalışıyor ve talep edilen sunucudan bir yanıt aldım?

teşekkür ederim


25
Postacı SOP ile ilgilenmez, bu bir tarayıcı değil bir geliştirme aracıdır.
Musa

2
@Musa Tamam, öyleyse bu bir tarayıcı (istemci) sorunuysa, neden sunucuda bir şeyi değiştirmem gerekiyor?
IsraGab

8
Tarayıcıya, belirli bir sitenin içeriğine erişmesinin tamam ( CORS ) olup olmadığını söyleyen sunucudur ve tarayıcı bunu onurlandırır
Musa

Ben de tamamen aynı sorum var. Bu durumda elektron üzerinde programatik olarak bunu nasıl yapabiliriz?
mluis

10
Buradaki asıl soru, POSTMAN'ın bir ORIGIN isteğinin ilk gönderildiği tarayıcı davranışını taklit edecek şekilde nasıl yapılandırılacağıdır. Temelde, POSTMAN'in bir tarayıcı gibi davranmasını nasıl sağlayabilirsiniz, çünkü API'lerimizin doğru yapılandırıldığından emin olmak için test etmemiz gerekiyor. Peki ya API POSTMAN'dan çalışıyorsa ve tarayıcıdaki CORS nedeniyle bozulursa? API'nin işe yaramaz olduğu anlamına gelir.
Chris Love

Yanıtlar:


51

@ Musa'nın dediği gibi, bunun sebebi şu:

Postacı SOP'yi umursamıyor, bu bir geliştirme aracı değil, tarayıcı

Bu arada , tarayıcınızda çalışmasını sağlamak için burada bir krom uzantısı var (bu krom içindir, ancak FF veya Safari için bulabilirsiniz).

Cross-Origin ve neden uzantılar için çalıştığı hakkında daha fazla bilgi edinmek istiyorsanız burayı kontrol edin .


6
O halde, API rotalarıma Postman gibi araçlardan erişilmesini nasıl koruyabilirim? Örneğin, captcha doğrulaması gerektiren bir API. Doğrudan Postman'a erişilen Ama eğer, kaptan doğrulama baypas edilir
SadMan muhib Samyo

5
Uzantının bağlantısı kesildi.
jayarjo

Aynı soru, bunun yanında, bir uzantı tek menşe politikasını nasıl bozabilir?
Iván Cortés Romero

chrome-extension bağlantısı kesildi
OhadR

46

Bir web sitesi kullanıyorsanız ve bilgi (örneğin sosyal güvenlik numaranız) göndermek için bir form doldurursanız, bilginin gönderileceğini düşündüğünüz siteye gönderildiğinden emin olmak istersiniz. Bu nedenle tarayıcılar, varsayılan olarak 'Ziyaret edilen etki alanı dışında bir etki alanına bilgi göndermeyin' diyecek şekilde oluşturuldu.

Sonunda bu çok sınırlayıcı hale geldi, ancak varsayılan fikir hala tarayıcılarda kalıyor. Web sayfasının farklı bir etki alanına bilgi göndermesine izin vermeyin. Ancak bunların hepsi tarayıcı kontrolü. Chrome ve firefox, vb. 'Bu isteği göndermeden önce, hedefin ziyaret edilen sayfayla eşleşip eşleşmediğini kontrol edeceğiz' yazan yerleşik bir kod var.

Postacı (veya cmd satırındaki CURL) yerleşik çeklere sahip değildir. Bir siteyle manuel olarak etkileşim kuruyorsunuz, böylece ne gönderdiğiniz üzerinde tam kontrole sahip olursunuz.


2
Daha doğru bir şekilde postacı, kontrol edilecek bir XmlHttp İsteği değil, üst düzey bir ağ çağrısı göndermez (URL'yi yeni bir tarayıcı sekmesinde
açmanız

1
Tarayıcı, sitenizin başka bir etki alanına veri göndermediğini kontrol etmiyor: diğer etki alanı sitesi tüm kaynaklara izin veriyorsa, tarayıcınız buna% 100 uygundur. Bunun tersi, sitenizin yetkilendirilmeden kaynaklarını kullanması durumunda diğer etki alanını korumaktadır.
XouDo

40

CORS(Cross-Origin Resource Sharing) ve SOP(Same-Origin Policy), istemcilerin uygulayıp uygulamamaya karar verdiği sunucu tarafı yapılandırmalarıdır .

Müşterilerle ilgili

  • Çoğu Tarayıcı , saldırı ile ilgili sorunları önlemek için bunu uygularCSRF .
  • Çoğu Geliştirme aracı bunu umursamıyor .

14

Buradaki tüm cevaplar, cors'un ne olduğuna dair gerçekten iyi bir açıklama olsa da, sorunuzun doğrudan cevabı aşağıdaki postacı ve tarayıcı farklılıklarından kaynaklanıyor olabilir.

Tarayıcı: OPTIONSAPI uç noktasına herhangi bir yeni istek göndermeden önce sunucu türünü kontrol etmek ve başlıkları almak için çağrı gönderir . Kontrol ettiği yer Access-Control-Allow-Origin. Bunu hesaba katarsak Access-Control-Allow-Originbaşlık sadece hangi ÇAPRAZ ORİJİNLERE izin verildiğini belirtir, ancak varsayılan olarak tarayıcı yalnızca aynı kökene izin verir.

Postacı: gönderir doğrudan GET, POST, PUT, DELETEve başlık alma ne tür sunucu denetimi olmadan vb isteği Access-Control-Allow-Originkullanarak OPTIONSsunucuya çağrı.


"Sunucu türünü kontrol etmek ve API uç noktasına yeni bir istek göndermeden önce başlıkları almak için OPTIONS çağrısı gönderir" - Bu doğru değil. Bunu yalnızca basit olmayan istekler için yapar.
Quentin

2

Postman genellikle hata ayıklama için kullanılır ve geliştirme aşamasında kullanılır. Ama postacıdan bile engellemek istemeniz durumunda bunu deneyin.

    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();
    });

yönlendiriciyle dosyanıza kodu ekleyin. "Yönlendiriciler" içeren bir dosyanız varsa, kodu dosyanın en üstüne ekleyin. Sahip olduğunuz dosyanın aynısı: const express = required ('express') const app = express (); const cors = required ('cors');
samceena

sunucuyu çalıştırmak için app.jskullanıyorsanız bunu düzenleyin node app.js.
Bharath Pabba

bu, sunucunuzu ddos'tan koruyabilir mi?
SuperUberDuper

-1

Bir web sitesi gibi CORS / SOP'u kontrol etmek için tarayıcı / chrome postman eklentisini kullanın. Bu kontrollerden kaçınmak için bunun yerine masaüstü uygulamasını kullanın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.