我正在尝试用php后端和React JS前端构建一个简单的API。为此,我使用了两个单独的docker容器(api.dev.de和react.dev.de,因为这是一个要求。我使用的是一个稍微经过调整的nginx代理版本。然而,当我将每个react fetch()的请求发送到服务器时,我得到了错误:
CORS策略已阻止从源https://react.dev.de获取https://api.dev.de/index.php?read=users的访问:对预检请求的响应未通过改造权限检查:请求的资源上不存在“Access-Control-Allo-Origin”标头。如果不透明响应满足您的需求,请将请求的模式设置为“no-cors”以在禁用CORS的情况下获取资源。
下面您可以看到我正在尝试提出的请求和. htAccess文件。
我已经查找了一些适用于其他人的解决方案,包括我也写入Dockerfile的这个解决方案(并首先在我的docker-compose.yml中启用此映像的扩展名)。
此外,我仔细阅读了这个答案,并浏览了其他文章的链接,以积累一些知识,但仍然没有成功。。。
这是我的代码片段。
人.js:
...
fetch('https://api.dev.de/index.php?read=users', {
method: 'POST',
headers: {
'Authorization': 'Basic ' + btoa("<secretName>:<secretPass>"),
'Accept': 'application/json',
'Content-Type': 'application/json',
}
})
...
. htAccess:
Authtype Basic
AuthName "Protected section. Only for developers."
AuthUserFile /var/www/html/App/.htpasswd
Require valid-user
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Credentials "true"
Dockerfile中的配置:
FROM thecodingmachine/php:7.3-v2-apache
...
RUN a2enmod headers
...
执行该函数时,我获取了这些控制台日志:
CORS 策略已阻止从源“https:// react.dev.de”获取“https:// api.dev.de/index.php?read=users”的访问:对预检请求的响应未通过访问控制检查:请求的资源上不存在“访问控制-允许源”标头。如果不透明响应满足您的需求,请将请求的模式设置为“no-cors”,以便在禁用 CORS 的情况下获取资源。
VM2133:1 发布 https://api.dev.de/index.php?read=users 网::ERR_FAILED
但是,当我删除.htaccess文件中的所有身份验证配置以及从Persons中删除Authorization
和Content-Type
部分时。js文件,我得到一个有效的响应。但我不能仅仅从页面中排除我的授权。
当我构建React应用程序并将其粘贴到与API相同的docker容器中,然后调用它时,一切都正常。所以我假设它是docker容器的配置(如果我错了,请纠正我)。
从昨天开始,我尝试了不同的方法,并提出了最后一个问题。
我的fetch()函数现在看起来如下:
fetch('https://api.dev.de/index.php?read=users&pass=<password>', {
method: 'GET',
headers: {
'Content-Type': 'multipart/form-data',
'Accept': 'application/json'
},
})
我也改变了我的。htaccess文件:
# Enabled in the Dockerfile but still checking if it is enabled.
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Content-Type "*"
Header set Access-Control-Accept "*"
# This should enable the authentication header
Header set Access-Control-Allow-Credentials "true"
</IfModule>
现在请求起作用了,但是当我更改读取()函数以发送授权标头时('授权':'基本:'btoa('
Authtype Basic
AuthName "Protected section. Only for developers."
AuthUserFile /var/www/html/App/.htpasswd
Require valid-user
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Content-Type "*"
Header set Access-Control-Accept "*"
# This should enable the authentication header
Header set Access-Control-Allow-Credentials "true"
</IfModule>
我仍然得到错误:
访问在 'https://api.dev.de/index.php?read=users 处获取
< s >这是因为我的订单。htaccess还是我需要修改别的东西?
在我的研究中,我找到了一个类似问题的答案:“飞行前请求(OPTIONS),这是我遇到401未经授权的地方。我想这是因为我读过OPTIONS去掉了一些标头,包括身份验证标头,所以没有它,它无法进行身份验证”。
来源: https://github.com/axios/axios/issues/2076
检查 developer.mozilla.org 指南 (https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#Sending_a_request_with_credentials_included) 我想始终发送凭据(以使预检请求成功)。
然而,这不起作用。。。
有人知道为什么没有吗?
更新的get ch()函数:
fetch('https://api.dev.de/index.php?read=users&pass=<password>', {
method: 'POST',
credentials: 'include',
headers: {
'Authorization': 'Basic: ' + btoa('<secretName>:<secretPass>'),
'Content-Type': 'multipart/form-data',
'Accept': 'application/json'
},
})
我仍然得到同样的错误:
访问在 'https://api.dev.de/index.php?read=users 处获取
预检请求与Docker无关,它们是与浏览器相关的策略。您正在使用触发预检机制的HTTP标头,在您的情况下是“授权”标头,并从您网站的域到api.dev.de
域进行跨域调用。
您可以阅读这篇关于避免预检的文章。
我倾向于在api服务器中添加一个endpoint,用适当的CORS相关头(例如< code > Access-Control-Allow-Origin )来响应所有< code>OPTIONS请求
问题内容: 我在使用ngResource调用Amazon Web Services上的REST API时遇到此错误: XMLHttpRequest无法加载 http://server.apiurl.com:8000/s/login?login=facebook。对预检请求的响应未通过访问控制检查:在所请求的资源上不存在“ Access-Control-Allow-Origin”标头。因此,不允许访
我正在尝试将Laravel社交名流集成到我的项目中,我遇到了以下错误 在'访问XMLHttpRequesthttps://github.com/login/oauth/authorize?client_id=6b87b76a942a90caec24 问题是当我按使用 github 按钮登录时,出现上述错误 错误图片 科尔斯.php文件 am使用水果蛋糕/laravel-cors包 我哪里做错了?
问题内容: 我在使用ngResource调用Amazon Web Services上的REST API时遇到此错误: XMLHttpRequest无法加载http://server.apiurl.com:8000/s/login?login=facebook。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问源“h
一、 am在angular 6和asp.net内核上使用信号器功能。但对飞行前请求继续获取此错误响应未通过访问控制检查:响应中“访问控制允许凭据”标头的值为“”,当请求的凭据模式为“包括”时,该值必须为“真”。 做了一些研究,发现这是服务器端的CORS问题。所以修改了服务器代码。 startup.cs 角度应用程序 参考资料 访问控制允许原点-角度5 响应中的访问-控制-允许-凭据标题为"这必须是
无法加载XMLHttpRequesthttp://xxx.xxx.对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“access control Allow Origin”标头。因此,不允许访问源“null”。响应的HTTP状态代码为500。 我试图用ajax发送一个xml肥皂,但给了我那个错误。我尝试了很多选项,但似乎都不起作用,这是代码: 我做错了什么?我发送了一个POST操作,但它将
我正在使用reactjs前端,在后端使用Spring Boot。我尝试从前端调用endpoint,如下所示: 当我发出请求时,我得到以下错误:- 访问位于“”的XMLHttpRequesthttp://localhost:8000/ckcapp/api/posttest“起源”http://localhost:3000'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在