首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当抛出NotFoundHttpException时,Laravel8.x返回状态代码200而不是404

NotFoundHttpException 是 Laravel 框架中的一个异常,通常在路由无法找到对应资源时抛出。正常情况下,这个异常应该导致服务器返回 HTTP 状态码 404(Not Found),表示请求的资源不存在。如果在 Laravel 8.x 中遇到返回状态代码 200 而不是 404 的情况,可能是由于以下几个原因:

基础概念

  • NotFoundHttpException: 这是一个表示请求的资源未找到的异常。
  • HTTP 状态码: 404 表示客户端能够与服务器通信,但服务器找不到请求的资源。

可能的原因

  1. 异常处理器配置错误: Laravel 使用 App\Exceptions\Handler 类来处理所有异常。如果这个类中的 render 方法被错误地修改,可能会导致 NotFoundHttpException 不按预期返回 404 状态码。
  2. 中间件干预: 某些中间件可能在捕获异常后修改了响应状态码。
  3. 自定义响应: 在控制器中可能手动设置了状态码为 200。

解决方法

检查异常处理器

打开 app/Exceptions/Handler.php 文件,确保 render 方法正确处理 NotFoundHttpException

代码语言:txt
复制
public function render($request, Throwable $exception)
{
    if ($exception instanceof NotFoundHttpException) {
        return response()->view('errors.404', [], 404);
    }

    return parent::render($request, $exception);
}

检查中间件

检查所有应用的中间件,确保没有中间件在捕获 NotFoundHttpException 后修改响应状态码。

检查控制器

如果在控制器中有自定义的异常处理逻辑,确保没有将状态码设置为 200:

代码语言:txt
复制
try {
    // ... 一些可能抛出 NotFoundHttpException 的代码 ...
} catch (NotFoundHttpException $e) {
    return response()->view('errors.404', [], 404);
}

应用场景

这种情况通常出现在需要自定义错误页面或者对异常处理有特殊需求的应用中。通过上述方法,可以确保即使在自定义逻辑中,也能保持正确的 HTTP 状态码。

优势

  • 用户体验: 正确的状态码有助于用户和搜索引擎理解页面不存在,避免混淆。
  • SEO: 搜索引擎爬虫能够正确识别死链,有助于提高网站的整体质量评分。

通过检查和调整上述可能涉及的配置和代码,应该能够解决 Laravel 8.x 中 NotFoundHttpException 返回状态码 200 的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用 Laravel 5.5+ 更好的来实现 404 响应

现在,当抛出 404 异常时,Laravel 会显示一个漂亮的 404.blade.php 视图文件,你可以自定义显示给用户 UI,但在该视图中,你无权访问 session,cookie,身份验证(auth... @stop 当 Laravel 渲染这个回退(fallback)路由时,会运行所有的中间件,因此当你在 web.php 路由文件中定义了回退路由时,所有处在 web 中间件组的中间件都会被执行...; }); 由于 api 中间件组带有 /api 前缀,所有带有 /api 前缀的未定义的路由,都会进入到 api.php 路由文件中的回退路由,而不是 web.php 路由文件中所定义的那个。...使用 abort(404) 和 ModelNotFound 异常 当使用 abort(404) 时会抛出一个 NotFoundHttpException,此时处理器会为我们渲染出 404.blade.php...视图文件,同样的 ModelNotFoundException 异常也会做同样的处理,那么我们应该如何如何处理才能在更好的渲染出回退路由的视图,而不是一个普通的视图呢?

2.2K20

Webman实战教程:Exception异常插件如何解决开发中的异常问题

在PHP中遇到任何自身错误都会触发一个错误,而不是抛出异常。PHP一旦遇到非正常代码,通常都会触发错误,而不是抛出异常。因此,如果想要使用异常处理不可预料的问题,是办不到的。...json格式返回,以上为返回简略的异常信息 所有的异常错误处理器根据配置文件 config/app.php中debug的值来调整错误显示, 当debug值为true (表示在调试模式), 错误处理器会显示异常以及详细的函数调用栈和源代码行数来帮助调试...当debug值为false,只有错误信息会被显示以防止应用的敏感信息泄漏,将返回简略的异常信息。...):NotFoundHttpException 路由地址不存在异常类(HTTP Status 404):RouteNotFoundException 请求限流在异常类(HTTP Status 429):...必须保持顺序是: ① 状态码 ② 错误消息 ③ 响应数据 使用场景 每个项目有标准的统一输出,自定义返回内容 前后端分离:前端要求返回的 HTTP状态码并不是 429,而是 200 或者其他 响应的body

58721
  • Flask 学习-69.捕获异常钩子函数errorhandler

    前言 flask 运行请求出现异常时,会先触发对应的异常钩子,比如出现404时,会根据NotFound 异常类返回404状态码。...2.函数error_404(error) 括号里面必须传一个位置参数接收异常 3.return 返回的时候需带上状态码(404),没带上状态码默认返回200 errorhandler 传异常类示例 从...", "msg": "请求参数不合法" } 处理 在处理请求时,当 Flask 捕捉到一个异常时,它首先根据代码检索。如果该代码没 有注册处理器,它会根据类的继承来查找,确定最合适的注册处理器。...当一个蓝图在处理抛出异常的请求时,在蓝图中注册的出错处理器优先于在应用中全 局注册的出错处理器。 但是,蓝图无法处理 404 路由错误,因为 404 发生的路由级 别还不能检测到蓝图。...自 Flask 1.1.0 开始,总是会传递一个 InternalServerError 实例给这个异常处理器,而不是以前的未处理异常。原始 的异常可以通过 e.original_error 访问。

    1.6K20

    精讲RestTemplate第7篇-自定义请求失败异常处理

    :超时、服务不存在等情况的时候(响应状态非200、而是400、500HTTP状态码),就会抛出如下异常: ?...服务不存在所以抛出404异常。...("HTTP 响应状态:" + statusCode); } 异常抛出之后,程序后面的代码就执行不到了,无法进行后面的代码执行。...实际的业务开发中,有的时候我们更期望的结果是:不管你服务端是超时了还是服务不存在,我们都应该获得最终的请求结果(HTTP请求结果状态400、500),而不是获得一个抛出的异常。...这时再去执行第一小节中的示例代码,就不会抛出异常。而是得到一个HTTP Status 404的结果。我们可以根据这个结果,在程序中继续向下执行代码。 ? 喜欢 (0)or分享 (0)

    3.1K31

    网关修改响应码,拯救业务不规范设计

    后端开发人员对Http基本知识存在欠缺我在进入公司时,调试接口时发现很多的接口响应码都是200,无论处理这个请求时,有没有抛出异常,Http响应码都是200。我在看代码时,很多的处理逻辑和下面差不多。...并且Http响应码是404时,正常处理 } else if (dismiss404 && response.status() == 404 && !...如果响应码没有在200~299范围内(404需要根据条件开启),OpenFeign会抛出异常。...因为游戏客户端的接口,不管请求是否成功,Http响应码都必须是200。而管理后台和第三方应用都能正确处理Http响应码,第三方应用对接口要求严格,比如权限不足就必须返回403。...最终代码java 代码解读复制代码public class XcyeGatewayProperties { /** * 网关会自动将所有返回的响应码转换为200,如果存在不需要转换的请求头

    15310

    RESTful规范

    什么是RESTful 一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。...以 DELETE为例,第一次DELETE返回200表示删除成功,第二次返回404提示资源不存在,这是允许的。 复杂查询 查询可以捎带以下参数: . 示例 备注 过滤条件 ?...§422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。...状态码的完全列表参见这里 URI失效 随着系统发展,总有一些API失效或者迁移,对失效的API,返回404 not found 或 410 gone;对迁移的API,返回 301重定向。...API 可能抛出两类异常:业务异常和非业务异常。 业务异常 由自己的业务代码抛出,表示一个用例的前置条件不满足、业务规则冲突等,比如参数校验不通过、权限校验失败。

    2.1K00

    Swift基础 基础知识

    注意 仅当您特别需要与平台原生单词大小相同的无符号整数类型时,才使用UInt。如果不是这样,最好是Int,即使已知要存储的值是非负值。...在本例中,(404,"NotFound")是描述HTTP状态代码的元组。HTTP状态代码是Web服务器在请求网页时返回的特殊值。如果您请求不存在的网页,则返回404NotFound的状态代码。...当定义元组时,您可以命名元组中的单个元素: let http200Status = (statusCode: 200, description: "OK") 如果您命名元组中的元素,则可以使用元素名称访问这些元素的值...通过返回具有两个不同值的元组,每个值都具有不同的类型,该函数提供了有关其结果的更有用的信息,而不是只能返回单个类型的单个值。有关更多信息,请参阅具有多个返回值的函数。..., or "optional Int" 由于初始化器可能会失败,它返回一个可选的Int,而不是一个Int。可选的Int写成Int?,而不是Int。

    15500

    网关修改响应码,拯救业务不规范设计

    后端开发人员对Http基本知识存在欠缺我在进入公司时,调试接口时发现很多的接口响应码都是200,无论处理这个请求时,有没有抛出异常,Http响应码都是200。我在看代码时,很多的处理逻辑和下面差不多。...并且Http响应码是404时,正常处理 } else if (dismiss404 && response.status() == 404 && !...如果响应码没有在200~299范围内(404需要根据条件开启),OpenFeign会抛出异常。...因为游戏客户端的接口,不管请求是否成功,Http响应码都必须是200。而管理后台和第三方应用都能正确处理Http响应码,第三方应用对接口要求严格,比如权限不足就必须返回403。...最终代码public class XcyeGatewayProperties { /\*\* \* 网关会自动将所有返回的响应码转换为200,如果存在不需要转换的请求头,请在此排除,支持ant

    26910

    SpringBoot系列教程web篇之全局异常处理

    当我们的后端应用出现异常时,通常会将异常状况包装之后再返回给调用方或者前端,在实际的项目中,不可能对每一个地方都做好异常处理,再优雅的代码也可能抛出异常,那么在 Spring 项目中,可以怎样优雅的处理这些异常呢...本文将介绍一种全局异常处理方式,主要包括以下知识点 @ControllerAdvice Controller 增强 @ExceptionHandler 异常捕获 @ResponseStatus 返回状态码...ControllerAdvice配合注解@ExceptionHandler来实现全局异常捕获处理 @ControllerAdvice为所有的 Controller 织入增强方法 @ExceptionHandler标记在方法上,表示当出现对应的异常抛出到上层时...状态码是 200 ?...@ResponseStatus 上面的 case 中捕获的异常返回的状态码是 200,但是在某些 case 中,可能更希望返回更合适的 http 状态码,此时可以使用ResponseStatus来指定

    86120

    星辰云同款超级好看404页面源码

    简介       404 Not Found404页面就是当用户输入了错误的链接时,返回的页面。...404页面的目的是:告诉浏览者其所请求的页面不存在或链接错误,同时引导用户使用网站其他页面而不是关闭窗口离开。       ...正确设置的自定义404错误页面,不仅应当能够正确地显示,同时,应该返回“404”错误代码,而不是 “200”或“302”。...搜索引擎蜘蛛在请求某个URL时得到“404”状态回应时,即知道该URL已经失效,便不再索引该网页,并向数据中心反馈将该URL表示的网页从索引数据库中删除,当然,删除过程有可能需要很长时间;而当搜索引擎得到...“200”状态码时,则会认为该url是有效的,便会去索引,并会将其收录到索引数据库,这样的结果便是这两个不同的url具有完全相同的内容:自定义404错误页面的内容,这会导致出现复制网页问题。

    1.1K20

    Nginx之error_page模块解读

    ,导向指定的路由,然后再由指定的路由处理,如下当错误代码是404时,相当于访问http://localhost:80/50x.html,正好被内部传送给 location = /50x.html让其来进行处理...root /usr/share/nginx/html; }跳转到指定网址其原理是响应到错误代码后,302(临时重定向到目标网址),如下当错误代码为404时,导向https://www.csdn.net...';}}​更改反馈状态码 本来遇到404找不到文件的错误,但是nginx可以把它状态码改为200返回给用户(例子如下) ​ error_page 404 =200 /50x.html;...error_page 404 = /404.html 可显示自定义404页面内容,但返回默认200状态码。...但如果php中定义返回404状态码,404状态码可以正常返回,但无法显示自定义页面内容(出现系统默认404页面),这种情况可以考虑用410代码替代( header("HTTP/1.1 410 Gone"

    3.3K61

    系统服务化构建-状态码设计要点

    code:信息代号 message:信息描述 time:接口返回时间 第二部分是具体数据如下: data 节点 我们可以 看到 code=4302,4302 并不是一个 HTTP 协议状态码,而是一个业务状态码...rest响应401.png HTTP 状态码常见的有200,404,501几个。 HTTP 状态码是 HTTP 协议的工程实现。...这里举一个简单的幂等性例子,我们知道 DELETE 方法是幂等的,如果之前已经删除过特定的资源,再次请求时也应该返回 200 的响应码,而不是 404 资源不存在的响应。...客户端排除法 客户端 HTTP 请求的通用方法是采用排除法,什么是排除法,客户端在请求服务端的 REST 接口时,会先在网络层面判断接口是否通,包括 404 或者 200常见几个状态 。...更严谨的说法是 请求的资源描述中包含资源状态编码和描述信息,如 message。 当 data 没有数据时,有的工程师喜欢把 data 置为 null,或者直接不返回 data 字段。

    4.1K30

    怎么自定义服务器的404,如何自定义404页面

    而默认的404错误页面呆板麻木,让访问者感觉很挫败,可能会直接离开您的网站。 自定义404页面的目的是:告诉浏览者其所请求的页面不存在或链接错误,同时引导用户使用网站其他页面而不是关闭窗口离开。...二、404页面和SEO优化的关系: 很多网站存在这个问题:为了增强用户体验,从而自定义404页面;但是没有正确设置404页面,导致返回的是200或302状态码而不是404状态码。...这对访问的用户而言,HTTP状态码究竟是“404”还是“200”来说并没有什么区别,但对搜索引擎却是相当重要的。 搜索引擎通过HTTP状态码来识别网页的状态。...当搜索引擎获得了一个错误链接时,网站应该返回404状态码,告诉搜索引擎放弃对该链接的索引。而如果返回200或302状态码,搜索引擎就会为该链接建立索引,这导致大量不同的链接指向了相同的网页内容。...为保证能正确返回“404”状态码,可在自定义的404页面“notfound.asp”中间加入以下代码: <%Response.Status=“404NotFound”%> 这样,便可以保证IIS能够正确地返回

    1.6K10

    RESTful API接口设计规范与最佳实践

    当一个查询的结果为空的时候,为什么有的接口设计会返回异常(HTTP状态码404或其他),有的则是会返回请求成功(HTTPS状态码200),但是返回结果是空数组或者null等表示结果为空的标识?...最后总结一下这个问题就是,强烈建议严格按照HTTP状态码的定义区分接口响应的HTTP状态码,错误码作为一种细分的补充。 Part4HTTP状态码不存在,返回 200 还是 404 ?...问题: 当一个查询的结果为空的时候,为什么有的接口设计会返回异常(HTTP状态码404或其他),有的则是会返回请求成功(HTTPS状态码200),但是返回结果是空数组或者null等表示结果为空的标识?...1返回HTTP状态码 200 当我们查询一个资源但是结果为空,到底要不要把本次请求视为一个404的异常是取决于业务场景。...最后总结一下这个问题,当请求的结果为空时,是不是属于异常要考虑业务场景,并且这个划分定义也是很有必要的,可以避免潜在的业务理解偏差导致的程序执行逻辑问题,因为如果是一个异常,那么会更早的被前端在统一异常处理里面的捕获并处理

    1.2K10

    ASP.NET Core 错误处理(Handle Errors)

    现在我们在下方添加如下代码抛出一个异常: app.Use((context, next) => { throw new NotImplementedException(); }); 当开发人员异常页中间件捕获了该未处理异常时...里面报错,此时ExceptionHandlerMiddleware均会重新引发原始异常,而不是向外抛出备用管道的异常。...默认情况下,当ASP.NET Core遇到没有正文的400-599Http错误状态码时,不会为其提供页面,而是返回状态码和空响应正文。...code=404,而且,响应状态码也变了,变成了200Ok。...同样的,会有一个占位符{0},用于填充Http状态码 Url保持不变,并向客户端返回原始Http状态码 执行备用管道,用于生成响应正文 // 注意,这里要分开写 app.UseStatusCodePagesWithReExecute

    2.1K20

    在 JS 中如何使用 Ajax 来进行请求

    如果来自服务器的响应带有任何状态码(如200、404、500),则promise将被解析。响应对象可以在.then()块中处理。...错误处理 请注意,对于成功的响应,我们期望状态代码为200(正常状态),但是即使响应带有错误状态代码(例如404(未找到资源)和500(内部服务器错误)),fetch() API 的状态也是 resolved...我们可以在response 对象中看到HTTP状态: HTTP状态码,例如200。 ok –布尔值,如果HTTP状态代码为200-299,则为true。...我们还必须调用response.json()将响应对象转换为JSON 错误处理 我们来看看当HTTP GET请求抛出500错误时会发生什么: fetch('http://httpstat.us/500'...我个人更喜欢使用Axios API而不是fetch() API,原因如下: 为GET 请求提供 axios.get(),为 POST 请求提供 axios.post()等提供不同的方法,这样使我们的代码更简洁

    8.9K20
    领券