仅当查询字符串不同时,为啥会出现 CORS 错误
Posted
技术标签:
【中文标题】仅当查询字符串不同时,为啥会出现 CORS 错误【英文标题】:Why do I get CORS error when query string is different only仅当查询字符串不同时,为什么会出现 CORS 错误 【发布时间】:2021-10-20 05:14:18 【问题描述】:我在调用 API 时遇到 CORS 错误,只有查询字符串不同。其余的运行良好。 (获取、发布、更新、删除)
但我无法理解这两个 URL 在 CORS 政策方面的区别:
[它不起作用] https://api.test-site.com/api/XYZ/query?type=Cat&startDate&startDate=01/06/2021&endDate=18/08/2021
和
[有效] https://api.test-site.com/api/ABC/query?startDate=&EndDate=&xstartDate=02/08/2021&xendDate=16/09/2021&dueStartDate=&dueEndDate=&lNumber=&es=[]&aUserIds=[]&pics=[]&kLevels=[]&rIds=[]
下面出现错误的第一个 URL;
访问 XMLHttpRequest 在 'https://api.test-site.com/api/XYZ/query?type=Cat&startDate&startDate=01/06/2021&endDate=18/08/2021' 来自原点“https://test-site.com”已被 CORS 政策阻止: 请求中不存在“Access-Control-Allow-Origin”标头 资源。
如果不是,XYZ 和 ABC 会导致这个错误吗?这个错误的原因是什么?
客户端代码:
return axios
.get(this.apiBaseURL() + url,
headers:
'Access-Control-Allow-Origin': this.baseURL(),
'Content-Type': 'application/json',
,
withCredentials: true,
)
服务器端代码
app.UseCors(options => options.WithOrigins(new["https://api.test-site.com","https://api.test-site.com/api","https://test-site.com"] ).AllowAnyHeader().AllowAnyMethod().AllowCredentials());
【问题讨论】:
你能显示你的 ABC 和 XYZ 动作标题吗? 我已经 [HttpGet("query")] 仅在两个控制器(操作)上。 【参考方案1】:尝试使用这种语法
public void ConfigureServices(IServiceCollection services)
services.AddCors(o => o.AddPolicy("AllowAnyOrigin",
builder =>
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
));
.....
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
.....
app.UseRouting();
app.UseCors("AllowAnyOrigin");
app.UseAuthorization();
....
如果它有效,那么您可以将 builder.AllowAnyOrigin 替换为
builder.WithOrigins("https://api.test-site.com")
并删除
'Access-Control-Allow-Origin': this.baseURL(),
没有意义
【讨论】:
我试过了,但我收到了这样的错误--> 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:'Access-Control-Allow- 的值当请求的凭据模式为“包含”时,响应中的 Origin 标头不能是通配符“*”。 XMLHttpRequest 发起的请求的凭证模式由 withCredentials 属性控制。 @mocco 尝试添加 .AllowCredentials() 但我认为这不会有帮助。请告诉我 没错,它给出了这个错误; 'CORS 协议不允许同时指定通配符(任何)来源和凭据。如果需要支持凭据,则通过列出各个来源来配置 CORS 策略 尝试将 allorigins 替换为 builder.WithOrigins("api.test-site.com") 又是这个错误; “来自原点 'test-site.com' 已被 CORS 策略阻止:请求的资源上不存在 'Access-Control-Allow-Origin' 标头。”以上是关于仅当查询字符串不同时,为啥会出现 CORS 错误的主要内容,如果未能解决你的问题,请参考以下文章
为啥只有 Angular 才会出现 CORS 错误? [复制]
为啥我的 axios 删除函数会出现 CORS 错误? [关闭]
当我根据 DynDNS url 名称而不是 IP 发出 axios 请求时,为啥会出现 CORS 错误?