splashlab / magento-2-cors-requests
从配置的源域名启用跨源资源共享(CORS)请求到 Magento 2 API
100.0.7
2022-10-18 04:41 UTC
Requires
- php: ~7.1.3||~7.2.0||~7.3.0||~7.4.0||~8.1.0
- magento/framework: *
README
此模块允许您通过添加适当的 HTTP 标头和处理预检 OPTIONS 请求来在 Magento 2 中启用跨源资源共享(CORS)REST API 请求。
这可以用来允许从另一个域名(或子域名)到 Magento 2 REST API 的 AJAX 和其他请求。
如何安装
1. 通过 composer
编辑 composer.json
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/splashlab/magento-2-cors-requests"
}
],
"require": {
"splashlab/magento-2-cors-requests": "dev-master"
}
}
composer install
php bin/magento setup:upgrade
php bin/magento setup:static-content:deploy
2. 复制并粘贴
从 GitHub 下载最新版本
粘贴到 app/code/SplashLab/CorsRequests
目录
php bin/magento setup:upgrade
php bin/magento setup:static-content:deploy
3. 更新源 URL
在 店铺 -> 配置
,转到 常规 -> 网络设置 -> CORS 请求配置
。
然后编辑 CORS 源 URL
字段到您想启用跨域请求的域名。例如: http://example.com
它是如何工作的?
完整的 CORS 跨域 HTTP 请求实现超出了本 README 的范围,但以下是本模块所做的工作
- 允许在管理员配置区域配置源 URL - 这是允许跨域请求的域名
- 此域名被添加到响应 HTTP 标头
Access-Control-Allow-Origin
- 可选地,您还可以启用
Access-Control-Allow-Credentials
标头,以允许传递 Cookie
对于非 GET 和非标准 POST 请求(即 PUT 和 DELETE),由以下处理“预检检查” OPTIONS 请求:
- 带有适当标头的空
/V1/cors/check
API 响应 - 响应标头
Access-Control-Allow-Methods
,它反映了请求标头Access-Control-Request-Method
- 响应标头
Access-Control-Allow-Headers
,它反映了请求标头Access-Control-Request-Headers
替代解决方案
您也可以使用 Apache 和 Nginx 规则来管理这些 CORS 标头,而不是使用此扩展
- https://community.magento.com/t5/Magento-2-Feature-Requests-and-API-CORS-requests-will-fail-without-OPTIONS-reponse/idi-p/60551
- https://stackoverflow.com/questions/35174585/how-to-add-cors-cross-origin-policy-to-all-domains-in-nginx
但我创建此扩展是为了允许您在管理员配置中配置源域名,并避免需要创建和管理特殊服务器配置。
CORS 跨域请求参考
- https://en.wikipedia.org/wiki/Cross-origin_resource_sharing
- https://mdn.org.cn/en-US/docs/Web/HTTP/Access_control_CORS
- https://www.html5rocks.com/en/tutorials/cors/
- https://stackoverflow.com/questions/29954037/how-to-disable-options-request
- https://stackoverflow.com/questions/12320467/jquery-cors-content-type-options
- magento/magento2#8399