ios请求php接口失败,php-Axios CORS / Preflight因Laravel 5.4 API调用而失败

博客作者在Laravel5.4和React应用中遇到一个预检请求失败的问题,错误显示为混合内容。问题源于API端点通过HTTPS被请求,但服务器将请求重定向到了HTTP,导致在安全环境中出现混合内容错误。这不是CORS问题,而是服务器配置导致的混合内容问题。解决方案是确保服务器不将HTTPS请求重定向到HTTP。
摘要由CSDN通过智能技术生成

我在Laravel 5.4和使用Axios来处理请求的React应用程序中遇到问题.

这是我遇到的错误.

wFP0L.png

这是我的预检响应失败的请求标头.

7SNHe.png

这是预检后失败的请求:

q9qUe.png

这是我的Axios请求配置:

let req = axios({

method: "GET",

url: https://api.vendorgraphs.com/{queryStringHere}

headers: {

'Accept': 'application/json',

'Content-Type': 'application/json',

'Authorization': 'Bearer ' + accessToken

}

});

需要注意的一件事是它正在使用HTTPS协议指定端点.我的应用程序上的类似请求正在按预期的方式工作,但这是唯一失败的请求.是因为使用了查询字符串吗?

该请求正在作为GET请求到达API端点.我正在使用Laravel和laravel-cors软件包来处理我的cors请求.

这是我对CORS的配置:

这是在我的Kernel.php中

protected $middleware = [

\Barryvdh\Cors\HandleCors::class,

\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,

\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,

\App\Http\Middleware\TrimStrings::class,

\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,

];

和我的cors.php在配置文件夹中

return [

'supportsCredentials' => false,

'allowedOrigins' => ['*'],

'allowedHeaders' => ['*'],

'allowedMethods' => ["GET", "OPTIONS", "POST", "PUT", "PATCH", "DELETE"],

'exposedHeaders' => [],

'maxAge' => 0,

];

我显然可以在“网络”选项卡中看到预检失败.我不明白的是为什么我收到混合内容错误,而不是405或其他一些HTTP状态代码.似乎很奇怪,当我使用HTTPS显式设置URL时,我正在请求使用HTTP协议的终结点.

我已经在此问题上停留了一段时间,可以对这个问题使用一些见识.

似乎很多人在OPTIONS飞行前都遇到过“类似”问题.我做过类似创建中间件的事情,如果请求的方法是OPTIONS,则该中间件仅返回200 HTTP状态代码.但这也不起作用.将对Axios的请求更改为OPTIONS,并将Laravel上的路线更改为以下内容:

Route::options("/api/endpoint", controller@method);

也不起作用.我只是不明白为什么它似乎重定向到HTTP协议并返回混合内容错误,而这似乎与CORS无关,但是预检请求失败了,这表明这是CORS问题.任何见解都值得赞赏.

Options -MultiViews

RewriteEngine On

# Redirect Trailing Slashes If Not A Folder...

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)/$/$1 [L,R=301]

# Handle Front Controller...

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^ index.php [L]

# Handle Authorization Header

RewriteCond %{HTTP:Authorization} .

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

RewriteCond %{HTTPS} !=on

RewriteCond %{HTTP:X-Forwarded-Proto} ^http$

RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

解决方法:

您看到的问题的原因是,服务器本身将https URL重定向到http:

$curl -I 'https://api.vendorgraphs.com/api/dealershipvendorleads/?id=3,4&startDate=2017-4&endDate=2017-8'

HTTP/1.1 301 Moved Permanently

Content-Type: text/html; charset=iso-8859-1

Date: Wed, 20 Sep 2017 15:33:50 GMT

Location: http://api.vendorgraphs.com/api/dealershipvendorleads?id=3,4&startDate=2017-4&endDate=2017-8

Server: Apache

Connection: keep-alive

注意301状态代码,以及带有http://api.vendorgraphs.com/…的Location标头.

因此,这意味着,在没有浏览器将其作为混合内容阻止的情况下(如您所见),您无法从安全上下文(https页面)向该API端点发出跨域请求.

因此,这并不是真正的CORS问题,而是纯粹的混合内容问题.

标签:laravel-5-4,axios,cors,mixed-content,php

来源: https://codeday.me/bug/20191025/1930472.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值