electrobayan / magento-2-cors-requests
从配置的源域启用跨源资源共享(CORS)请求到 Magento 2 API
100.0.7
2022-05-19 14:30 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 require electrobayan/magento-2-cors-requests
或者
编辑 composer.json
{
"require": {
"splashlab/magento-2-cors-requests": "100.0.7"
}
}
composer install/update
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 - 这是允许跨域请求的域名
- 此域名被添加到
Access-Control-Allow-Origin
响应 HTTP 头 - 可选地,您还可以启用
Access-Control-Allow-Credentials
头,以启用传递 cookies
对于非 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