如果资源不允许 CORS,如何发出 "simple" GET 请求?
How to make a "simple" GET request if the resource doesn't allow CORS?
我正在尝试在 Chrome 新标签扩展中使用 W3C 的 CSS 验证程序 Web 服务 API。 The docs 声称请求是 对 URI 的简单 HTTP GET 调用,所以我认为这应该可行:
fetch('http://jigsaw.w3.org/css-validator/validator?uri=http%3A%2F%2Fwww.w3.org%2F&profile=css3&output=json')
.then((response) => {
// do stuff with response
});
不幸的是,承诺失败了,我收到如下消息:
Failed to load. No 'Access-Control-Allow-Origin' header is present on
the requested resource. Origin is therefore not allowed access.
如果资源不允许 CORS
,我该如何发出 "simple" GET
请求?
谢谢!
您需要 register the allowed origin 扩展的清单:
"permissions": [
"http://jigsaw.w3.org/"
],
您可能还需要 set the origin mode 获取功能:
fetch(
'http://jigsaw.w3.org/css-validator/validator?uri=http%3A%2F%2Fwww.w3.org%2F&profile=css3&output=json',
{mode: 'no-cors'})
.then((response) => {
// do stuff with response
});
2017-10-22 更新: change for adding CORS support to the CSS Validator 已合并并推送到生产环境,因此以下内容现在有效 as-is:
const validatorURL = 'https://jigsaw.w3.org/css-validator/validator' +
'?uri=http%3A%2F%2Fwww.w3.org%2F&profile=css3&output=json';
fetch(validatorURL)
.then(response => response.json())
.then(results => console.log(results))
原回答:
CSS 验证器未发送必要的 CORS 响应 header。为了解决这个问题,我 raised a pull request with a change against the CSS Validator sources 可以让您的代码片段正常工作 as-is。一旦更改被合并并推送到生产环境,我将 post 在这里更新。
同时,您可以通过 CORS 代理发出请求来解决此问题:
const proxyURL = 'https://cors-anywhere.herokuapp.com/';
const validatorURL = 'http://jigsaw.w3.org/css-validator/validator' +
'?uri=http%3A%2F%2Fwww.w3.org%2F&profile=css3&output=json';
fetch(proxyURL + validatorURL)
.then(response => response.json())
.then(results => console.log(results))
有关其工作原理的详细信息,请参阅 如何使用 CORS 代理解决“无 Access-Control-Allow-Origin header”问题 部分在 No 'Access-Control-Allow-Origin' header is present on the requested resource—when trying to get data from a REST API.
回答
您可以从 chrome 网上商店添加 CORS 过滤器扩展。只需在 运行 您的代码之前启用过滤器。
从 here 您可以将过滤器添加到 chrome 浏览器。
我正在尝试在 Chrome 新标签扩展中使用 W3C 的 CSS 验证程序 Web 服务 API。 The docs 声称请求是 对 URI 的简单 HTTP GET 调用,所以我认为这应该可行:
fetch('http://jigsaw.w3.org/css-validator/validator?uri=http%3A%2F%2Fwww.w3.org%2F&profile=css3&output=json')
.then((response) => {
// do stuff with response
});
不幸的是,承诺失败了,我收到如下消息:
Failed to load. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin is therefore not allowed access.
如果资源不允许 CORS
,我该如何发出 "simple" GET
请求?
谢谢!
您需要 register the allowed origin 扩展的清单:
"permissions": [
"http://jigsaw.w3.org/"
],
您可能还需要 set the origin mode 获取功能:
fetch(
'http://jigsaw.w3.org/css-validator/validator?uri=http%3A%2F%2Fwww.w3.org%2F&profile=css3&output=json',
{mode: 'no-cors'})
.then((response) => {
// do stuff with response
});
2017-10-22 更新: change for adding CORS support to the CSS Validator 已合并并推送到生产环境,因此以下内容现在有效 as-is:
const validatorURL = 'https://jigsaw.w3.org/css-validator/validator' +
'?uri=http%3A%2F%2Fwww.w3.org%2F&profile=css3&output=json';
fetch(validatorURL)
.then(response => response.json())
.then(results => console.log(results))
原回答:
CSS 验证器未发送必要的 CORS 响应 header。为了解决这个问题,我 raised a pull request with a change against the CSS Validator sources 可以让您的代码片段正常工作 as-is。一旦更改被合并并推送到生产环境,我将 post 在这里更新。
同时,您可以通过 CORS 代理发出请求来解决此问题:
const proxyURL = 'https://cors-anywhere.herokuapp.com/';
const validatorURL = 'http://jigsaw.w3.org/css-validator/validator' +
'?uri=http%3A%2F%2Fwww.w3.org%2F&profile=css3&output=json';
fetch(proxyURL + validatorURL)
.then(response => response.json())
.then(results => console.log(results))
有关其工作原理的详细信息,请参阅 如何使用 CORS 代理解决“无 Access-Control-Allow-Origin header”问题 部分在 No 'Access-Control-Allow-Origin' header is present on the requested resource—when trying to get data from a REST API.
回答您可以从 chrome 网上商店添加 CORS 过滤器扩展。只需在 运行 您的代码之前启用过滤器。
从 here 您可以将过滤器添加到 chrome 浏览器。