共享主机使用相同的域和端口触发CORS

问题描述 投票:0回答:1

A在过去几天里一直在使用CORS,特别是非CORS设置中的预检请求。我正在通过axios(domain.com:80)向SPA应用程序发送请求到其他API(domain.com:80/api)并将其归类为CORS请求。在本地,使用相同的设置,请求很好,不会触发预检。

在我的研究中,同一原产地要求必须具备:

  • 相同的域名
  • 相同的子域名
  • 同一个港口
  • 相同的协议

我认为我的生产环境检查了上述所有内容,但事情恰恰相反。

我的环境托管在共享主机提供程序中,具体如下:

SPA(Vue) - http:/ domain:80 / company-name / API(Laravel) - http:/ domain:80 / company-name / api

我已经尝试过了:

  • 在本地克隆环境(工作正常 - 不发送预检请求)
  • 启用/禁用Access-Control-Allow-Headers
  • 说实话,我甚至不知道接下来要尝试什么:|

解决这个问题将使我的应用程序快100%,这对我来说是一件大事。但它根本没有意义。也许我错过了一些明显的东西。

也许可能是我的共享托管服务提供商正在做的一些代理相关的事情。但即便比我不知道如何检查。

预检请求示例(来自Dev Tools中的网络选项卡):

一般 请求网址:http:/ domain / company-name / api / perfil / 3 请求方法:选项 状态代码:200 OK 远程地址:185.200.153.100:80 推荐人政策:no-referrer-when-downgrade

响应标题 Access-Control-Allow-Headers:AUTHORIZATION 访问控制允许方法:GET Access-Control-Allow-Origin:http:/ domain Access-Control-Max-Age:25200 缓存控制:无缓存,私有 连接:关闭 内容长度:0 内容类型:text / html;字符集= UTF-8 日期:星期六,2019年4月27日18:28:40 GMT 服务器:Apache

请求标题 显示临时标题 访问控制请求标头:授权 访问控制请求方法:GET 来源:http:/ domain 推荐人:http:/ domain / company-name / perfis User-Agent:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,类似Gecko)Chrome / 73.0.3683.103 Safari / 537.36

请求示例(在预检响应之后):

一般 请求网址:http:/ domain / company-name / api / perfil / 3 请求方法:GET 状态代码:200 OK 远程地址:185.200.153.100:80 推荐人政策:no-referrer-when-downgrade

响应标题 Accept-Ranges:字节 Access-Control-Allow-Origin:http:/ domain 访问控制 - 暴露 - 标题:* 年龄:0 缓存控制:无缓存,私有 连接:保持活力 Content-Type:application / json 日期:星期六,2019年4月27日18:28:41 GMT 服务器:Apache 转移编码:分块 变化:起源,授权 通过:1.1 varnish-v4 X-RateLimit-Limit:60 X-RateLimit-Remaining:58 X-Varnish:46418125

请求标题 接受:application / json,text / plain,/ 授权:承载{token} 来源:http:/ domain 推荐人:http:/ domain / company-name / perfis User-Agent:Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36 (KHTML,与Gecko一样)Chrome / 73.0.3683.103 Safari / 537.36

域/的.htaccess

<IfModule mod_rewrite.c>

  RewriteEngine On
  RewriteBase /
  RewriteRule ^(api)($|/) - [L]
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.html [L]
</IfModule>

<IfModule mod_headers.c>
  <FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css|css|woff2)$">
    Header set Access-Control-Allow-Origin "*"
  </FilesMatch>
</IfModule>

域/ API / htaccess的

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

如果需要任何其他数据,请随时询问。

laravel apache cors shared-hosting preflight
1个回答
0
投票

也许我错过了一些明显的东西。

是的。

在SPA中,当qazxsw poi确实是正确的时候,我拿到了qazxsw poi。使原始URL与请求URL匹配,如@sideshowbarker所述

就检查URL而言,“域”部分必须完全相同。例如,'api.domain.com'和'www.domain.com'是两个不同的起源。您从“网络”选项卡复制的标题显示“Origin:http:/ domain”和“http:/ domain / company-name / api / perfil / 3”。所以我告诉你的是,真正的'http:/ domain / company-name / api / perfil / 3'URL实际上是什么的起源并不完全匹配'Origin:http:/ domain'实际上是什么。 “域名”部分不完全相同,或者它们不是“http”或两者都是“https”,或者您省略了一些端口号。

© www.soinside.com 2019 - 2024. All rights reserved.