【发布时间】:2020-02-06 22:13:36
【问题描述】:
我正在尝试制作一个打开一个位 URL 并获取标题的扩展:
http://bit[dot]ly/30YbIyD
邮递员遵循重定向并为我获取结果文档。
当我尝试使用 Axios 时,我得到了空的响应数据,尽管重定向似乎发生了。
第一个请求收到指向“stackoverflow.com”的 301。在那个请求中,我们得到“200 SUCCESS”但是数据部分是空的。
axios({
'url': 'http://bit[dot]ly/30YbIyD',
method: 'get',
maxRedirects: 5,
headers: {
'Content-Type': 'text/html',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET',
},
withCredentials: true,
})
.then((res) => {
console.log("Response", res)
})
.catch((err) => {
console.log("Error with fetch: ", err)
});
没有错误消息,但我希望看到与 Postman 返回相同的结果;最终文件。
我的浏览器控制台也收到这些警告:
Cross-Origin Read Blocking (CORB) blocked cross-origin response <URL> with MIME type text/html. See <URL> for more details.
和
与http://bit.ly/ 的跨站点资源关联的cookie 设置为没有
SameSite属性。未来版本的 Chrome 将仅通过设置为SameSite=None和Secure的跨站点请求传递 cookie。您可以在开发人员工具中的 Application>Storage>Cookies 下查看 cookie,并在 https://www.chromestatus.com/feature/5088147346030592 和 https://www.chromestatus.com/feature/5633521622188032 上查看更多详细信息。
这是 Postman 发送的标头:https://imgur.com/765Cz30
【问题讨论】:
-
我们可以检查 POSTMAN 发送的请求头或所有请求数据吗?
-
@LearningEveryday 当然,给你:imgur.com/a/OPqfvIX
-
我能想到几件事。您可以尝试使用 POSTMAN 发送的标头吗?如果您不使用 axios 并使用简单的 fetch 方法怎么办?或者当您使用 axios 以外的任何东西时会发生什么?只是一个想法!
-
我认为您所看到的行为的原因只是来自
http://bit.ly[dot]30YbIyD的 301 响应不包含 Access-Control-Allow-Origin 标头。所以浏览器实际上并没有跟随重定向到https://stackoverflow.com/。这就是为什么 Chrome devtools 没有显示https://stackoverflow.com/响应的响应正文的原因——因为浏览器实际上从未向https://stackoverflow.com/发出任何请求。在 Firefox 或 Safari 中尝试相同的代码并查看那里的“网络”窗格,我认为您会更清楚地了解实际发生的情况。 -
尝试进一步排除故障,尝试将
mode: 'no-cors'添加到您的 axios 调用中 - 或者尝试使用fetch('https://bit.ly[dot]30YbIyD', { mode: 'no-cors'})。在这种情况下,Chrome devtools 中的 Network 窗格将显示来自https://stackoverflow.com/的响应的响应正文。这是因为在这种情况下,浏览器实际上会遵循 301 重定向。 (您将无法访问前端 JavaScript 代码的响应,但浏览器仍会收到它。)
标签: javascript get request cors axios