显然,我完全误解了它的语义.我想到了这样的事情:
好吧,我错了.它根本不起作用.所以,我已经阅读了跨源资源共享,并尝试在w3c推荐中阅读跨源资源共享
有一件事是肯定的 - 我仍然不明白我应该如何使用这个标题.
我完全控制了站点A和站点B.如何启用从站点A下载的javascript代码以使用此标头访问站点B上的资源?
PS
我不想使用JSONP.
我正在研究使用在WebApi 5.2.4上运行的后端服务器的javascript Web应用程序进行的selenium测试(使用chrome webdriver用C#编写).它是CORS启用非常宽松的设置:
namespace SealingService
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
// etc...
}
}
}
Run Code Online (Sandbox Code Playgroud)
通常一切都按预期工作.但是在某些机器上,当测试脚本启动服务器时,客户端会在每次请求时遇到CORS错误.chrome dev控制台显示标准Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.消息.服务器日志显示OPTION请求正在到达它,并且它正在发送响应.
当我尝试手动访问任何API路由时,服务器返回通用的ASP.NET 404页面.这让我觉得我们的CORS配置实际上可以正常工作,但是我们的测试脚本没有正确启动/配置服务器,因此路由没有被注册.因此,所有API路由都返回404页面,这显然不是CORS启用的.
这是IIS在测试期间使用的applicationhost.config. 这是测试脚本启动服务器的方式:
public static Process StartIIS(string siteName)
{
return Process.Start(@"C:\Program Files (x86)\IIS Express\iisexpress.exe", $"/site:{siteName} /config:{_applicationHostConfigFilePath}");
}
Run Code Online (Sandbox Code Playgroud)
这些错误只发生在某些机器上,我们无法弄清楚它们之间的配置有何不同.我尝试过使用Chrome的--disable-web-security旗帜,但似乎没有任何区别.
我在后端使用node,express,在客户端使用angular4,这给了我以下错误:
XMLHttpRequest无法加载http:// localhost:4876/login/check.对预检请求的响应未通过访问控制检查:当请求的凭据模式为"包含"时,响应中"访问控制 - 允许 - 凭证"标头的值为"必须为'真'.因此不允许来源' http:// localhost:4200 '访问.XMLHttpRequest发起的请求的凭据模式由withCredentials属性控制.
登录/检查的Api如下所示:
router.get('/login/check', (req: any, res: any) => {
let api = new ApiConnection(req, res);
let accessCard: IAccessCard = api.getContent(Auth.ACCESS_CARD_KEY);
if(!Auth.isValid(accessCard))
return api.response.error();
ChatBox.auth.isExpired(accessCard, function (err:any, isExpired: boolean) {
if (err) return api.response.error();
if(!isExpired) {
api.cookie("AccessCard", accessCard);
api.response.success(accessCard);
}
else {
api.response.error();
}
})
});
Run Code Online (Sandbox Code Playgroud)
路由器定义的位置 const router = require('express').Router()
为header和cors设置中间件如下:
export class Application {
private app:any = express();
constructor() {
this.setCors();
this.setHeaders();
}
public getApp():any {
return this.app; …Run Code Online (Sandbox Code Playgroud) 当我尝试在angular 7 Web应用程序中执行PATCH请求时遇到问题。在我的后端,我有:
app.use((req, res, next) => {
res.set({
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "*",
"Access-Control-Allow-Headers": "'Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token'",
});
next();
});
Run Code Online (Sandbox Code Playgroud)
在前端服务中,我已经:
patchEntity(ent: any, id) {
let headers = new Headers({ 'Content-Type': '*' });
let options = new RequestOptions({ headers: headers });
return this.http.patch('my_url', ent).map((res: Response) => res.json());
};
Run Code Online (Sandbox Code Playgroud)
错误是:
Access to XMLHttpRequest at 'my_url' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status. …Run Code Online (Sandbox Code Playgroud) 我知道有些人会发表评论,比如这篇文章重复了这么多问题,但我已经尝试了很多方法来在linkedin Oauth 中实现访问令牌。解释我的尝试。
1) 我正在关注它的官方文档Linkedin Oauth2
2) 我成功地从第 2 步获得授权代码并将该代码传递给第 3 步以交换用于获取访问令牌的授权代码。但我收到以下错误 {"error_description":"缺少必需的参数,包含无效的参数值,参数不止一次。:无法检索访问令牌:appId 或重定向 uri 与授权代码或授权代码不匹配或授权代码已过期”, “错误”:“invalid_request”}
3)根据一些链接,我需要在标题中设置内容类型。缺少告诉设置内容类型的链接
4)然后我尝试调用https://www.linkedin.com/uas/oauth2/accessToken此服务而不是POStto GET。并将数据作为 queryParams 传递。
5) 一些链接说 oauth 代码在 20 秒后过期,所以我已经检查过,我在不到 1 秒的时间内调用访问令牌。
6)如果我像下面这样在 Body params 中传递数据并使用 url 作为 https://www.linkedin.com/uas/oauth2/accessToken
var postData = {
grant_type: "authorization_code",
code: authCode,
redirect_uri: 'https%3A%2F%2Foauthtest-mydeployed-app-url',
client_id: 'my_client_id',
client_secret: 'secret_key'
};
Run Code Online (Sandbox Code Playgroud)
7)Get我试过打电话给我的网址
https://www.linkedin.com/uas/oauth2/accessToken?grant_type=authorization_code&code='+authCode+'&redirect_uri=https%3A%2F%2Foauthtest-mydeployed-app-url&client_id=my_client_id&client_secret=secret_key
即使状态代码为 200,我仍然收到错误,我收到该错误(使用GETapi),如果POSt通过传入postData正文,我收到错误的请求400状态代码
不明白为什么我没有获得访问代码。我已经阅读了很多解决方案。根据要求共享代码。
var postData = { …Run Code Online (Sandbox Code Playgroud)我的前端代码:
<form action="" onSubmit={this.search}>
<input type="search" ref={(input) => { this.searchInput = input; }}/>
<button type="submit">??</button>
</form>
// search method:
const baseUrl = 'http://localhost:8000/'; // where the Express server runs
search(e) {
e.preventDefault();
let keyword = this.searchInput.value;
if (keyword !== this.state.lastKeyword) {
this.setState({
lastKeyword: keyword
});
fetch(`${baseUrl}search`, {
method: 'POST',
// mode: 'no-cors',
headers: new Headers({
'Content-Type': 'application/json'
}),
// credentials: 'include',
body: JSON.stringify({keyword})
})
}
}
Run Code Online (Sandbox Code Playgroud)
和我的Express.js服务器代码:
app.all('*', (req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS');
res.header('Access-Control-Allow-Headers', …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个要在 Excel 工作表中更新的应用程序。我遇到了https://github.com/dwyl/html-form-send-email-via-google-script-without-server,它显然不适用于 angular。将 ajax 调用替换为
onsubmitForm() {
let headers = new Headers();
headers.append('Access-Control-Allow-Origin','*');
let options = new RequestOptions({ headers: headers });
let body = {
name:"lala",
message:"ssss",
email:"a@k.com",
color:"red"
}
return this.http.put('https://script.google.com/macros/s/AKfycbxJKxvzl8Go5ZihUc95su-HFvFeoTtnMyA3qq5YiBxcDYalDdOb/exec', body).toPromise(); }
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息,“对预检请求的响应未通过访问控制检查:没有‘Access-Control-Allow-Origin’”。有办法解决吗?或者可能是使用 angular 2 将数据添加到 Excel 工作表的另一种方法?
我遇到过一种情况,我从 Angular 6 应用程序调用 Spring Boot 应用程序。当我以与在不同端口上运行的应用程序的角度调用 HTTP post 方法时,它会引发异常。
从源“ http://localhost: 4200 ”访问位于“http://localhost:8080/api”的XMLHttpRequest已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP好的状态。
我的 Angular 应用程序在“ http://localhost:4200 ”上运行,端口号:4200 我的 Spring Boot 应用程序在“ http://localhost:8080/api ”上运行:端口号:8080。
没有直接的答案可以解决这个问题。有一些技巧可以禁用 Chrome 中的安全性,使用 NGINX 可以解决此问题。
我有一个在服务器上运行的API和一个连接到它的前端客户端来检索数据.我做了一些关于跨域问题的研究并且有效.但是我不确定发生了什么变化.我现在在控制台中收到此错误:
XMLHttpRequest无法加载https://api.mydomain/api/status.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此,不允许来源" http://beta.mydomain.com "访问.响应具有HTTP状态代码502.
我有以下路由文件:
var express = require('express');
var router = express.Router();
var Assessment = require('../app/models/assessment');
router.all('*', function (req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type');
next();
});
router.post('/api/status', function (req, res, next) {
getStatus.getStatus(req, res, Assessment);
});
module.exports = router;
Run Code Online (Sandbox Code Playgroud)
以下JavaScript对该路由进行Ajax调用:
var user = {
'uid' : '12345'
};
$.ajax({
data: user,
method: 'POST',
url: 'https://api.mydomain/api/status',
crossDomain: true,
done: function () {
},
success: function (data) {
console.log(JSON.stringify(data));
},
error: …Run Code Online (Sandbox Code Playgroud) 非常感谢任何人的帮助。我对 React 开发还比较陌生,使用 Mac OSX 和 Chrome 作为浏览器。我有一个小型应用程序,尝试使用“isomorphic-fetch”从 Yelp Fusion 的 API 发出异步 GET 请求,但收到以下错误:
Fetch API 无法加载https://api.yelp.com/v3/businesses/search?[剩余 URL]对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问来源“ http://localhost:3000 ”。响应的 HTTP 状态代码为 500。如果不透明响应满足您的需求,请将请求的模式设置为“no-cors”以在禁用 CORS 的情况下获取资源。
我做了很多搜索,看看已经存在对相同问题的回应,但我对如何用我对这种开发环境相对较新的知识来解决我的问题感到更加困惑。(似乎特别有用的答案是:对预检请求的响应未通过访问控制检查和在 componentDidMount 内部使用 HTTP 授权标头的 API 请求,但我并不真正了解如何在我的环境中实际实现这些解决方案。我所做的任何尝试看起来不正确并且不会导致更改。)。
附带说明:我已经在 Chrome 浏览器上安装了 Allow-Control-Allow-Origin: * 扩展程序,但我收到了相同的错误 - 只是对其进行了简短、不太详细的描述:
Fetch API 无法加载https://api.yelp.com/v3/businesses/search?[剩余网址]。预检响应具有无效的 HTTP 状态代码 500
以下是我在代码中调用 fetch 的方式:
var options = (
method: 'get',
headers: new Headers({
'Access-Control-Allow-Origin': '*',
'Authorization': [my token]
'Content-Type': 'application/json'
}) …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的 javascript 代码中使用 fetch 调用一些 API。我正在我的机器上使用 ReactJs 进行开发,并在同一网络中进行另一项开发,在另一台机器上使用 .net 开发 API。使用邮递员,我可以调用 API,但不能使用 fetch。我尝试在其他服务器中调用另一个 API,结果成功。
我正在使用 fetch 并尝试使用 axios。我在堆栈溢出的其他问题中发现了这个 API:https : //gturnquist-quoters.cfapps.io/api/random。答案说尝试获取它们,我尝试但再次抛出相同的错误。
我获取 gturnquist API 的代码:
const myHeader = new Headers();
myHeader.append('Content-Type', 'application/json');
fetch('http://gturnquist-quoters.cfapps.io/api/random', {
method: 'GET', headers: myHeader,
})
.then((res) => {
console.log(res);
return {};
})
.then(res => console.log(res));
Run Code Online (Sandbox Code Playgroud)
和我的代码来获取我需要的 API:
const myHeader = new Headers();
const token = 'mytoken';
myHeader.append('id-tenant', token);
myHeader.append('Content-Type', 'application/json');
const id = 'myid';
const url = 'myurl';
fetch(`http://10.1.1.35/${url}/${id}`, {
method: 'GET',
headers: myHeader, …Run Code Online (Sandbox Code Playgroud) cors ×7
javascript ×6
angular ×4
ajax ×2
cross-domain ×2
fetch-api ×2
node.js ×2
reactjs ×2
angular-cli ×1
angular6 ×1
angular7 ×1
api ×1
c# ×1
ecmascript-6 ×1
express ×1
http ×1
linkedin ×1
post ×1
preflight ×1
redux ×1
sapui5 ×1
selenium ×1
spring-boot ×1