从 feedburner 获取(或 AJAX 获取)returns html 但 Postman returns xml

fetch (or AJAX Get) returns html but Postman returns xml from feedburner

我正在尝试在我的应用程序中检索 xml 播客提要。我遇到了一个问题,其中一个 fetch 请求我正在 returns 一个 html 文档而不是 xml 提要。奇怪的是,如果我使用 Postman 将 /GET 发送到同一个 url,它会 returns 我的 rss 提要。它似乎也适用于 SO 上的代码片段(下面的示例)。

可以在 this fiddle 看到它返回 html 文档的示例,它与下面的代码片段具有完全相同的代码。

有人能帮我理解为什么会这样吗?我觉得它可以通过设置某种请求来解决 header,也许?

更新 奇怪的是,似乎链接的 fiddle 有时会获取 xml;我认为是因为它缓存了调用。如果您在新的隐身模式 window 中打开它,它会再次获取 html。

$('#fetchXML').click(function(){
   $('#xmlContent').text('Loading ...');

 const feedUrl = 'https://cors-anywhere.herokuapp.com/http://feeds.wnyc.org/dearhankandjohn';
  const headers = new Headers({
   'X-Requested-With':'XMLHttpRequest'
  });
  
  
  fetch(feedUrl, headers)
  .then(function(response) {
    return response.text();
  })
  .then(function(xmlText) {
   $('#xmlContent').text(xmlText);
  })
  .catch(function(err){
   $('#xmlContent').text(err);
  });
 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr>
  <td><button id="fetchXML">
  Fetch Feed
  </button></td>
</tr>
<tr>
  <td id="xmlContent"></td>
</tr>
</table>

好的,所以我终于能够通过在 fetch() 调用中将 ReferrerPolicy 设置为 no-referrer 来解决这个问题。我不是 100% 确定为什么这有效,除了这是一个 feeburner 特定的东西,他们有一个基于引荐来源类型的条件 return 政策。

TL;DR:将format作为参数传递给URL。

https://feeds.feedburner.com/codinghorror?format=html


Feedburner returns 原始 XML 默认情况下:

HTTP/1.1 200 OK
Alt-Svc: quic=":443"; ma=2592000; v="46,43,39"
Cache-Control: private, max-age=0
Content-Encoding: gzip
Content-Type: text/xml; charset=UTF-8

但它还会发送一个样式表,以便浏览器可以为标记应用样式(查看源代码)。

以前使用过时的 fmt 参数,现在使用 format 您可以请求 htmlxml

https://feeds.feedburner.com/codinghorror?format=html

HTTP/1.1 200 OK
Alt-Svc: quic=":443"; ma=2592000; v="46,43,39"
Cache-Control: private, max-age=0
Content-Encoding: gzip
Content-Type: text/html; charset=UTF-8