不幸的是,即使我在后端配置了所有的访问控制头(在AWS Api网关中),我仍然得到错误
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://example.com/internal/role. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
现在,我遇到的问题是,当用Postman对我的一个资源调用OPTIONS调用时(不是作为一个预先调用,而是作为一个“独立”调用),我收到了正确的访问控制头。但是,当用Axios发出相同的请求时,我似乎没有收到那些头,这使我认为这可能是Axios的问题。
以下是我在拨打OPTIONS电话时收到的邮递员邮件头:
- Date: Fri, 26 Jun 2020 12:01:18 GMT
- Content-Type: application/json
- Content-Length: 0
- Connection: keep-alive
- x-amzn-RequestId: <some ID>
- Access-Control-Allow-Origin: https://example-gui.com
- Access-Control-Allow-Headers: Origin,Accept,Content-Type,X-Amz-Date,Authorization,X-Api-Key,x-requested-with
- x-amz-apigw-id: <some ID>
- Cache-Control: max-age=600, s-maxage=600, proxy-revalidate
- Access-Control-Allow-Methods: OPTIONS,POST
- Access-Control-Allow-Credentials: true
- cache-control: max-age=600, s-maxage=600, proxy-revalidate
- content-length: 0
- content-type: application/json
不幸的是,我没有关于实际POST调用返回的数据的信息,因为它只是抛出提到的异常。
Postman调用只是对相应URL的一个基本调用,使用OPTIONS方法,它只有一个额外的头(授权),所以我不打算进一步讨论。
Axios调用源自URL https://example-gui.com/#/,如下所示:
const fullResponse = (response: AxiosResponse) => response;
const backendRequests = {
...
options: (url: string, header: {}) =>
axios.options(url, header).then(fullResponse),
...
};
const loginRequests = {
getUserRole: (accesstoken: string) =>
backendRequests.options(
"https://example.com/internal/role",
{ Authorization: `Bearer ${accesstoken}` }
),
};
try {
await agent.loginRequests
.getUserRole(this.accessToken)
.then((response) => {
console.log(response); // <-- Printing the results
<...>
});
} catch (error) {
console.log(error);
}
我怎样才能在考虑到所有这些信息的情况下设法通过同源政策呢?
是否检查了是否正在从Axios发送access-control-allow-headers
header下从后端服务请求的所有头。可以将头的数量限制为access-control-allow-headers:Accept,content-type
并检查CORS是否工作。
如果Access-Control-Allow-Origin使用*,则不能使用凭据。您必须指定协议+域+端口。
Access-Control-Allow-Origin通配符子域、端口和协议与凭据的源资源共享使用*太开放,会妨碍凭据的使用。因此进一步将http://domain:port设置为允许起源头。
HTML: 当我打开localhost:8080/races时,我可以完全看到JSON:
Access-Control-Request-Method发出请求时报头用于预检请求让服务器知道哪些 HTTP 方法的实际请求时将被使用。这个头是必要的,因为预检请求始终是一个OPTIONS,并且不使用与实际请求相同的方法。 Header type Request header Forbidden header name yes 语法 Access-Control-Request-Method:
Access-Control-Request-Headers发出请求时报头用于预检请求让服务器知道哪些 HTTP 头的实际请求时将被使用。 Header type Request header Forbidden header name yes 语法 Access-Control-Request-Headers: <header-name>, <header-name>, ... 指令 <head
问题内容: 我正在本地虚拟主机(http://foo.app:8000)上运行有角度的应用程序。它使用发出了对另一个本地VirtualHost(http://bar.app:8000)的请求。 当然,在Chrome开发者工具的网络标签中,我看到了OPTIONS请求,响应中包含标题: 但是,POST请求被取消,并出现以下错误: 所请求的资源上没有“ Access-Control-Allow-Orig
我正在本地虚拟主机(http://foo.app:8000)上运行一个angular应用程序。它正在使用向另一个本地虚拟主机(http://bar.app:8000)发出请求。 在Chrome Developer Tools的Network选项卡中,我当然会看到选项请求,响应包括标题: 也设置为。
问题内容: 将web.xml移植到Java配置后出现以下问题 根据一些Spring参考,尝试了以下尝试: 所选择的值来自有效的web.xml过滤器: 有什么想法为什么Spring java config方法不能像web.xml文件那样工作? 问题答案: 将CorsMapping从更改方法。 为整个应用程序启用CORS很简单: 你可以轻松更改任何属性,以及仅将此CORS配置应用于特定的路径模式: 控