【问题标题】:HTTP not being redirected to HTTPS for certain Routes某些路由的 HTTP 未重定向到 HTTPS
【发布时间】:2016-05-26 15:44:46
【问题描述】:

我最近切换到在我的服务器上使用 HTTPS,我在网上找到了一些代码,强制所有传入服务器的请求都使用 HTTPS:

<?php namespace App\Http\Auth\Middleware;

use Closure;

class HttpsProtocol {

    public function handle($request, Closure $next)
    {
        if (!$request->secure() && env('APP_ENV') === 'production') {
            return redirect()->secure($request->getRequestUri());
        }

        return $next($request);
    }

}

并将\App\Http\Auth\Middleware\HttpsProtocol::class 添加到我的中间件中。

但是现在我有以下路线:

Route::controller('test', 'TestController');

还有以下控制器:

<?php namespace App\Http\FrontEnd\Controllers;

use App\Http\FrontEnd\Requests;
use App\Http\FrontEnd\Controllers\Controller;

use Illuminate\Http\Request;
use App\Http\FrontEnd\Requests\TestRequest;

use App\Commands\SendEmail, App\Commands\SendSMS;

use Auth, Input, DB, Session, Queue, Crypt;

class TestController extends Controller {

    public function postCheck()
    {
        //
    }

    public function postConfirm()
    {
        //
    }

}

现在,如果我尝试发布到以下 URL,则该特定路线将不起作用:

/test/confirm

它仅在我使用 https 并且我不明白为什么或如何解决该问题时才有效。

【问题讨论】:

  • 你的意思是Route::controller('test', 'TestController');还是Route::resources('test', 'TestController');
  • 是的,我的意思是 route::controller
  • 我不认为你可以定义这样的路线。
  • 什么意思?这就是我一直在使用的,查看 laravel 文档。
  • 对不起,我的错。没看到。

标签: laravel laravel-5 routes http-status-code-301


【解决方案1】:

您可能想查看这个问题/答案:Laravel 5 - htaccess HTTPS redirect on post routes doesn't work.

虽然该问题涉及 htaccess 重定向,但原理是相同的。

基本上,当客户端访问 URL 的 http 版本时,您的代码会以 302 重定向响应客户端,告诉它使用 https URL。然后客户端向https URL 发出新请求,但它错误地使用了 GET 请求并且还丢弃了原始 POST 数据。

为了解决客户端错误地更改重定向请求方法的问题,他们提出了一个新的重定向状态代码 307,该代码在实施时专门用于在不修改请求方法的情况下进行重定向。您可以尝试通过响应 307 来解决此问题,但由于它是在 HTTP/1.1 中引入的,因此无法保证客户端会理解如何处理它。

在您的代码中使用 307 重定向响应:

return redirect()->secure($request->getRequestUri(), 307);

但是,任何解决方法实际上都只是违背了在任何地方都需要 HTTPS 的目的。如果客户端 POST 到非安全 URL,则发布数据可能已经被泄露。您最好的选择是实际上只是拒绝对非安全 URL 的 POST 请求,以确保人们不认为可以向您的非安全 URL 进行 POST。

【讨论】:

  • 哇,这解释了很多!学到了新东西!非常感谢您的时间。 :)
猜你喜欢
  • 1970-01-01
  • 2014-03-19
  • 1970-01-01
  • 2011-04-28
  • 2013-04-10
  • 2016-05-01
  • 2014-12-27
  • 2020-10-27
  • 2015-04-05
相关资源
最近更新 更多