Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Belirti
Entegre geliştirici portalından yapılan API çağrısı, Unknown Error ile başarısız oluyor veya Try this API (Bu API'yi deneyin) panelinde boş bir yanıt veriliyor.
Hata mesajları
Entegre portalda API istekleriyle ilgili olarak boş bir yanıt veya aşağıdaki hata mesajını görebilirsiniz:
Unknown Error
Geliştirici Araçları > Konsol sekmesinde şu hatayı görürsünüz:
Access to XMLHTTPRequest at 'API_URL' from origin 'URL_of_Integrated_DevPortal' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Geliştirici Araçları > Konsol sekmesinde görülen genel hata mesajı şöyledir:
Olası nedenler
| Neden | Açıklama | Aşağıdaki ürünler için geçerli sorun giderme talimatları |
|---|---|---|
| İşlenmemiş politika hatası | API isteğinin çalışma zamanı akışında herhangi bir politika başarısız olduğunda varsayılan hata yanıtı, CORS başlıkları olmadan gönderilir. | Edge Public Cloud kullanıcıları |
| Access-Control-Allow-Origin için Birden Fazla Değer | İleti politikası atarken Set yerine Add kullanma. | Edge Public Cloud kullanıcıları |
Neden: İşlenmemiş politika hatası
Teşhis
- Sorunun yalnızca
2XXolmayan bir yanıt beklendiğinde oluştuğunu doğrulayın. - Başarısız olan istekler için proxy akışında politikalar olduğunu doğrulayın.
-
İsteği izleyin ve
continueOnError="false"ile ilgili bir politikanın başarısız olup hata verip vermediğini kontrol edin. - Evetse hata yanıtı akışında AssignMessage CORS politikasının yürütülüp yürütülmediğini doğrulayın.
- Değilse bu sorunun nedeni budur.
Bunun nedeni,continueOnError="false"öğesini içeren herhangi bir politika başarısız olduğunda isteğin hata yanıtı akışına girmesidir. Hata yanıtı akışında açık bir hata yönetimi yoksa politikaya karşılık gelen varsayılan hata yanıtı geri gönderilir. Bu hata yanıtında CORS başlığı yok. Sonuç olarak, entegre geliştirici portalından yapılan API çağrısıUnknown errorile başarısız olur.
Aşağıdaki ekran görüntülerinde örnek bir hata mesajı ve örnek bir başarı mesajı gösterilmektedir.
Entegre portalın Try this API (Bu API'yi deneyin) panelindeki ve proxy'nin Trace (İzleme) penceresindeki örnek hata mesajı:
Entegre portal Try this API panelindeki ve proxy Trace penceresindeki örnek başarı mesajı:
Çözünürlük
- Varsayılan hata mesajına güvenmek yerine, hata yanıtını işlemek için bir hata kuralı uygulanmalıdır. Uygun başlıkları içeren bir AssignMessage CORS politikası ekleyin ve bunu FaultRule'da çağırın.
- Bazen her hata için bir hata kuralı tanımlamak mümkün olmayabilir. Bu nedenle, AssignMessage CORS politikasını yürütmek için varsayılan bir hata kuralı uygulanabilir:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="proxy-endpoint-name">
<Description/>
<!-- Add a default fault rule to add CORS -->
<DefaultFaultRule name="fault-rule">
<Step>
<Name>add-cors</Name>
</Step>
</DefaultFaultRule>
<FaultRules/>
<!--
<Flows />
Rest of the proxy definition
-->
</ProxyEndpoint>Neden: Access-Control-Allow-Origin için birden fazla değer
Teşhis
- İzleme oturumunda Access-Control-Allow-Origin başlığının değerini kontrol edin.
- Access-Control-Allow-Origin başlığı yalnızca tek bir değerin ayarlanmasına izin verir. Birden fazla değer ayarlamak CORS sorununa neden olabilir ve geliştirici portalı yanıtları oluşturamaz.
- İzleme işlemindeki Access-Control-Allow-Origin başlığının değeri şu şekilde görünüyorsa:
*,*bu, hem hedef sunucunun hem de AssignMessage CORS politikasının değerini ayarladığı anlamına gelir. - Bu durum, bir kullanıcı politikada Access-Control-Allow-Origin için
<Add> elementkullandığında veya arka uç kendisi birden fazla değer ayarladığında meydana gelebilir.
*,* değerine eşit olan Access-Control-Allow-Origin örneği:
* değerine eşit olan Access-Control-Allow-Origin örneği:
<Add> kullanılarak oluşturulan örnek:
<Set> kullanılarak oluşturulan örnek:
Çözünürlük
- Yalnızca tek bir değere izin verildiğinden Access-Control-Allow-Origin için
<Add> elementyerine<Set> elementkullanılması önerilir. - Alternatif olarak, Access-Control-Allow-Origin üst bilgisini yalnızca tek bir yerde ayarlayın: AssignMessage CORS politikası veya hedef sunucu.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AssignMessage async="false" continueOnError="false" enabled="true" name="set-cors"> <DisplayName>Set CORS</DisplayName> <FaultRules/> <Properties/> <Set> <Headers> <Header name="Access-Control-Allow-Origin">*</Header> </Headers> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
Apigee Destek Ekibi'nden hâlâ yardıma ihtiyacınız varsa Toplanması gereken teşhis bilgileri başlıklı makaleyi inceleyin.
Teşhis bilgilerini toplamalıdır
Aşağıdaki teşhis bilgilerini toplayın ve ardından Apigee Edge Destek Ekibi ile iletişime geçin:
- Kuruluş adı
- Ortam adı
- API proxy'si adı
- Hatayı yeniden oluşturmak için kullanılan tam curl komutu
- API istekleri için izleme dosyası
- Hedef/arka uç sunucudan gelen yanıtın tam çıktısı ve yükün boyutu