[{"data":1,"prerenderedAt":1585},["ShallowReactive",2],{"blog-api:articulos\u002F{slug}:error-401-unauthorized-y-error-403-forbidden-que-son-y-en-que-se-diferencian:1:::":3,"i18nPorPagina":817},{"estado":4,"data":5,"meta":816},"ok",{"slug":6,"ruta":7,"titulo":8,"extracto":9,"imagen":10,"publicado":17,"actualizado":17,"minutos_lectura":18,"etiqueta_principal":19,"meta_titulo":23,"meta_descripcion":24,"og":25,"autor":27,"etiquetas":31,"bloques":33,"relacionados":765,"json_ld":807},"error-401-unauthorized-y-error-403-forbidden-que-son-y-en-que-se-diferencian","\u002Ferror-401-unauthorized-y-error-403-forbidden-que-son-y-en-que-se-diferencian\u002F","Error 401 Unauthorized y error 403 Forbidden: qué son y en qué se diferencian","La expresión \"error 403 Unauthorized\" combina incorrectamente dos códigos HTTP distintos. El código 403 se llama Forbidden (prohibido) y significa que el…",{"fichero":11,"url":12,"alt":13,"ancho":14,"alto":15,"pie":16},"787af5455389adb759ba7f8e9f995a8c6171383d7daab3397f2763cee1342961.jpg","https:\u002F\u002Fimg.sys4net.com\u002Fm\u002Fimg\u002F787af5455389adb759ba7f8e9f995a8c6171383d7daab3397f2763cee1342961.jpg","Comparación visual de códigos HTTP 401 Unauthorized (izquierda, candado azul) y 403 Forbidden (derecha, candado rojo) con",1536,1024,null,"2026-06-09T00:36:27+02:00",12,{"slug":20,"nombre":21,"ruta":22},"errores-http","Errores HTTP","\u002Ftag\u002Ferrores-http\u002F","Error 401 vs 403: qué son y en qué se diferencian │ sys4net","Error 401 Unauthorized y 403 Forbidden: qué significa cada uno, por qué se confunden y cómo distinguirlos y solucionarlos en tu web o en tu servidor.",{"titulo":23,"descripcion":24,"imagen":26},{"fichero":11,"url":12,"alt":13,"ancho":14,"alto":15,"pie":16},{"slug":28,"nombre":29,"ruta":30},"sys4net","sys4net Data Center","\u002Fauthor\u002Fsys4net\u002F",[32],{"slug":20,"nombre":21,"ruta":22},[34,59,64,68,72,94,98,102,106,152,156,169,179,183,188,196,200,223,227,231,239,243,266,268,272,380,384,388,392,449,453,507,511,519,531,542,546,550,552,556,558,562,564,568,572,576,580,582,586,588,592,596,599,601,605,612,615,617,620,622,626,630,660,664,668,672,689,693,697,701,705,709,720,724,731,735,743,747,751,755,763],{"type":35,"content":36},"paragraph",[37,39,42,44,46,48,50,52,54,55,57],{"t":38},"La expresión ",{"t":40,"b":41},"\"error 403 Unauthorized\"",true,{"t":43}," combina incorrectamente dos códigos HTTP distintos. El código ",{"t":45,"b":41},"403",{"t":47}," se llama ",{"t":49,"i":41},"Forbidden",{"t":51}," (prohibido) y significa que el servidor conoce la identidad del cliente y aun así le deniega el acceso. El código ",{"t":53,"b":41},"401",{"t":47},{"t":56,"i":41},"Unauthorized",{"t":58}," (no autorizado) y significa que el servidor no sabe quién es el cliente y necesita que se identifique. La confusión es muy frecuente y tiene una razón histórica: el RFC original de HTTP usó el término \"Unauthorized\" para el 401 cuando en realidad debería haberse llamado \"Unauthenticated\". Esta distinción no es solo semántica: determina completamente cómo resolver el problema de acceso.",{"type":60,"content":61},"heading",[62],{"t":63},"El origen de la confusión: un error histórico del estándar HTTP",{"type":35,"content":65},[66],{"t":67},"La confusión entre 401 y 403 tiene una explicación histórica. El estándar HTTP\u002F1.0, publicado en 1996, definió el código 401 como \"Unauthorized\" en un momento en que la terminología de seguridad informática no estaba tan consolidada como hoy. En el lenguaje cotidiano, \"unauthorized\" puede significar tanto \"no autenticado\" (no sabemos quién eres) como \"no autorizado\" (sabemos quién eres pero no tienes permiso). El RFC eligió el término más ambiguo para el 401.",{"type":35,"content":69},[70],{"t":71},"La consecuencia es que el estándar HTTP usa los términos de forma contraintuitiva:",{"type":73,"items":74},"list",[75,85],[76,78,79,81,83],{"t":77},"El código ",{"t":53,"b":41},{"t":80}," se llama \"Unauthorized\" pero significa ",{"t":82,"b":41},"no autenticado",{"t":84},": el problema es de identidad, no de permisos.",[86,87,88,90,92],{"t":77},{"t":45,"b":41},{"t":89}," se llama \"Forbidden\" pero es el que realmente implementa la ",{"t":91,"b":41},"autorización",{"t":93},": el servidor conoce la identidad del cliente y le deniega el acceso por falta de permisos.",{"type":35,"content":95},[96],{"t":97},"El RFC 9110 (2022), que es el estándar HTTP vigente, reconoce explícitamente este problema terminológico y aclara en sus notas que el nombre \"Unauthorized\" para el 401 es históricamente inapropiado y que debería haberse llamado \"Unauthenticated\".",{"type":60,"content":99},[100],{"t":101},"Autenticación vs autorización: la distinción fundamental",{"type":35,"content":103},[104],{"t":105},"Para entender correctamente los códigos 401 y 403, es imprescindible entender la diferencia entre autenticación y autorización. Son dos conceptos de seguridad distintos que se aplican de forma secuencial:",{"type":107,"cabecera":108,"filas":121},"table",[109,112,115,118],[110],{"t":111},"Concepto",[113],{"t":114},"Pregunta que responde",[116],{"t":117},"Código HTTP cuando falla",[119],{"t":120},"Ejemplo",[122,137],[123,128,131,134],[124,126],{"t":125,"b":41},"Autenticación",{"t":127}," (Authentication)",[129],{"t":130},"¿Quién eres? ¿Puedo verificar tu identidad?",[132],{"t":133},"401 Unauthorized",[135],{"t":136},"Introduces tu usuario y contraseña para demostrar quién eres",[138,143,146,149],[139,141],{"t":140,"b":41},"Autorización",{"t":142}," (Authorization)",[144],{"t":145},"¿Tienes permiso para hacer esto? ¿Tu rol permite esta acción?",[147],{"t":148},"403 Forbidden",[150],{"t":151},"El sistema comprueba si tu rol (usuario, editor, admin) tiene acceso al recurso solicitado",{"type":35,"content":153},[154],{"t":155},"El flujo correcto en cualquier sistema con control de acceso es siempre en este orden:",{"type":157,"items":158},"ordered",[159,164],[160,162],{"t":161,"b":41},"Autenticación primero:",{"t":163}," el sistema verifica que eres quien dices ser (login con usuario y contraseña, token JWT, API key, certificado de cliente).",[165,167],{"t":166,"b":41},"Autorización después:",{"t":168}," una vez verificada tu identidad, el sistema comprueba si tu cuenta, rol o grupo tiene permiso para acceder al recurso o ejecutar la acción solicitada.",{"type":35,"content":170},[171,173,174,176,177],{"t":172},"Si falla el paso 1 (no te has identificado o tus credenciales son incorrectas): ",{"t":53,"b":41},{"t":175},".\nSi falla el paso 2 (te has identificado correctamente pero tu rol no tiene acceso): ",{"t":45,"b":41},{"t":178},".",{"type":60,"content":180},[181],{"t":182},"Definición exacta de cada código según el RFC 9110",{"type":184,"content":185},"subheading",[186],{"t":187},"Código 401 Unauthorized",{"type":35,"content":189},[190,192,194],{"t":191},"El RFC 9110 define el 401 así: ",{"t":193,"i":41},"\"The request has not been applied because it lacks valid authentication credentials for the target resource.\"",{"t":195}," (La solicitud no se ha procesado porque carece de credenciales de autenticación válidas para el recurso de destino).",{"type":35,"content":197},[198],{"t":199},"Características técnicas del 401:",{"type":73,"items":201},[202,213,220],[203,205,207,209,211],{"t":204},"El servidor ",{"t":206,"b":41},"debe",{"t":208}," incluir la cabecera ",{"t":210,"code":41},"WWW-Authenticate",{"t":212}," en la respuesta, indicando el esquema de autenticación requerido (Basic, Bearer, Digest...).",[214,216,218],{"t":215},"Implica que el cliente ",{"t":217,"b":41},"puede resolver el problema",{"t":219}," enviando las credenciales correctas.",[221],{"t":222},"Si el cliente ya envió credenciales y el servidor devuelve 401, significa que esas credenciales son incorrectas o han expirado.",{"type":224,"content":225,"language":226},"code","# Respuesta HTTP 401 típica:\nHTTP\u002F1.1 401 Unauthorized\nWWW-Authenticate: Bearer realm=\"api.tudominio.com\"\nContent-Type: application\u002Fjson\n\n{\n  \"error\": \"authentication_required\",\n  \"message\": \"Se requiere autenticación. Incluye un token Bearer válido.\"\n}","texto",{"type":184,"content":228},[229],{"t":230},"Código 403 Forbidden",{"type":35,"content":232},[233,235,237],{"t":234},"El RFC 9110 define el 403 así: ",{"t":236,"i":41},"\"The server understood the request but refuses to fulfill it. If authentication credentials were provided in the request, the server considers them insufficient to grant access.\"",{"t":238}," (El servidor entendió la solicitud pero se niega a cumplirla. Si se proporcionaron credenciales de autenticación, el servidor las considera insuficientes para conceder acceso).",{"type":35,"content":240},[241],{"t":242},"Características técnicas del 403:",{"type":73,"items":244},[245,254,260,263],[246,247,249,251,252],{"t":204},{"t":248,"b":41},"no incluye",{"t":250}," la cabecera ",{"t":210,"code":41},{"t":253}," porque no es un problema de autenticación.",[255,256,258],{"t":215},{"t":257,"b":41},"no puede resolver el problema",{"t":259}," enviando credenciales: el problema es de autorización, no de identidad.",[261],{"t":262},"El acceso está denegado independientemente de quién sea el cliente.",[264],{"t":265},"El servidor puede elegir no revelar si el recurso existe (para no dar pistas a atacantes).",{"type":224,"content":267,"language":226},"# Respuesta HTTP 403 típica:\nHTTP\u002F1.1 403 Forbidden\nContent-Type: application\u002Fjson\n\n{\n  \"error\": \"insufficient_permissions\",\n  \"message\": \"Tu rol no tiene acceso a este recurso. Contacta con el administrador.\"\n}",{"type":60,"content":269},[270],{"t":271},"Tabla comparativa completa: 401 vs 403",{"type":107,"cabecera":273,"filas":281},[274,277,279],[275],{"t":276},"Dimensión",[278],{"t":133},[280],{"t":148},[282,290,300,310,320,330,340,350,360,370],[283,286,288],[284],{"t":285,"b":41},"Nombre oficial (RFC 9110)",[287],{"t":56},[289],{"t":49},[291,294,297],[292],{"t":293,"b":41},"Significado real",[295],{"t":296},"No autenticado: el servidor no sabe quién eres",[298],{"t":299},"No autorizado: el servidor sabe quién eres y te deniega el acceso",[301,304,307],[302],{"t":303,"b":41},"Problema",[305],{"t":306},"Falta de autenticación o credenciales incorrectas",[308],{"t":309},"Falta de autorización o permisos insuficientes",[311,314,317],[312],{"t":313,"b":41},"Cabecera WWW-Authenticate",[315],{"t":316},"Obligatoria: indica el método de autenticación requerido",[318],{"t":319},"No se incluye: no es un problema de autenticación",[321,324,327],[322],{"t":323,"b":41},"¿El cliente puede resolverlo?",[325],{"t":326},"Sí: enviando las credenciales correctas",[328],{"t":329},"No desde el cliente: el administrador debe cambiar los permisos",[331,334,337],[332],{"t":333,"b":41},"¿El recurso existe?",[335],{"t":336},"Puede existir o no; el servidor no lo revela hasta la autenticación",[338],{"t":339},"Puede existir o no; el servidor puede ocultarlo deliberadamente",[341,344,347],[342],{"t":343,"b":41},"Cabecera de la respuesta",[345],{"t":346},"WWW-Authenticate: Basic realm=\"ejemplo\", Bearer realm=\"api\"",[348],{"t":349},"Sin WWW-Authenticate",[351,354,357],[352],{"t":353,"b":41},"Causa típica en servidor Linux",[355],{"t":356},"Sesión caducada, token expirado, .htpasswd con contraseña incorrecta",[358],{"t":359},"Permisos chmod incorrectos, .htaccess con Deny, IP bloqueada",[361,364,367],[362],{"t":363,"b":41},"Causa típica en API REST",[365],{"t":366},"Token ausente, token inválido, token expirado",[368],{"t":369},"Token válido pero rol sin permiso, recurso de otro usuario",[371,374,377],[372],{"t":373,"b":41},"Analogía física",[375],{"t":376},"Intentas entrar a un edificio sin mostrar tu identificación",[378],{"t":379},"Muestras tu identificación pero no tienes acceso a esa planta",{"type":60,"content":381},[382],{"t":383},"Cuándo usar 401 y cuándo usar 403 en una API REST",{"type":35,"content":385},[386],{"t":387},"El diseño correcto de los códigos de respuesta en APIs REST es fundamental para que los clientes (aplicaciones móviles, frontends, integraciones) puedan manejar los errores de forma automática y mostrar el mensaje adecuado al usuario. Un error frecuente en el desarrollo de APIs es usar 403 cuando debería ser 401 o viceversa, lo que confunde a los clientes sobre cómo resolver el problema.",{"type":184,"content":389},[390],{"t":391},"Escenarios donde corresponde el código 401",{"type":107,"cabecera":393,"filas":403},[394,397,400],[395],{"t":396},"Situación",[398],{"t":399},"Código correcto",[401],{"t":402},"Motivo",[404,413,422,431,440],[405,408,410],[406],{"t":407},"La solicitud no incluye ningún token de autorización en la cabecera",[409],{"t":53},[411],{"t":412},"El servidor no puede verificar la identidad del cliente: no sabe quién es",[414,417,419],[415],{"t":416},"El token de autorización incluido está malformado o no es válido",[418],{"t":53},[420],{"t":421},"El servidor no puede parsear o verificar el token: la autenticación falla",[423,426,428],[424],{"t":425},"El token de autorización ha expirado (JWT expirado, sesión caducada)",[427],{"t":53},[429],{"t":430},"Las credenciales eran válidas pero ya no lo son: necesita renovarlas",[432,435,437],[433],{"t":434},"La API key no existe en la base de datos",[436],{"t":53},[438],{"t":439},"Las credenciales no corresponden a ninguna cuenta conocida",[441,444,446],[442],{"t":443},"El usuario y contraseña en una autenticación Basic son incorrectos",[445],{"t":53},[447],{"t":448},"La autenticación falla: las credenciales no verifican la identidad",{"type":184,"content":450},[451],{"t":452},"Escenarios donde corresponde el código 403",{"type":107,"cabecera":454,"filas":461},[455,457,459],[456],{"t":396},[458],{"t":399},[460],{"t":402},[462,471,480,489,498],[463,466,468],[464],{"t":465},"El token es válido pero el usuario tiene rol \"viewer\" e intenta ejecutar una acción de escritura",[467],{"t":45},[469],{"t":470},"La identidad está verificada pero el rol no tiene ese permiso",[472,475,477],[473],{"t":474},"El usuario autenticado intenta acceder al recurso de otro usuario (GET \u002Fusers\u002F456\u002Fdatos siendo el usuario 123)",[476],{"t":45},[478],{"t":479},"El usuario está autenticado pero no tiene permiso sobre ese recurso específico",[481,484,486],[482],{"t":483},"Un usuario con cuenta activa intenta acceder a una sección de pago sin haber pagado",[485],{"t":45},[487],{"t":488},"La identidad es válida pero la cuenta no tiene los privilegios requeridos",[490,493,495],[491],{"t":492},"Se intenta ejecutar una operación en un recurso que está en estado de solo lectura",[494],{"t":45},[496],{"t":497},"El recurso existe y el usuario está autenticado, pero la operación no está permitida en ese estado",[499,502,504],[500],{"t":501},"Un usuario bloqueado o suspendido intenta usar la API con credenciales técnicamente válidas",[503],{"t":45},[505],{"t":506},"Las credenciales son válidas (autenticación OK) pero la cuenta no tiene acceso (autorización denegada)",{"type":184,"content":508},[509],{"t":510},"El caso especial: ¿401 o 403 cuando el recurso no existe?",{"type":35,"content":512},[513,515,517],{"t":514},"Este es uno de los debates más interesantes en el diseño de APIs seguras. Imagina que un usuario autenticado solicita ",{"t":516,"code":41},"GET \u002Fdocumentos\u002Fsecreto-confidencial",{"t":518},". El documento existe pero el usuario no tiene acceso. ¿Qué código devolver?",{"type":73,"items":520},[521,526],[522,524],{"t":523,"b":41},"403 Forbidden:",{"t":525}," correcto técnicamente, pero revela al cliente que el recurso existe.",[527,529],{"t":528,"b":41},"404 Not Found:",{"t":530}," oculta la existencia del recurso, pero puede confundir a clientes legítimos.",{"type":35,"content":532},[533,535,537,539,540],{"t":534},"La práctica recomendada en seguridad es devolver ",{"t":536,"b":41},"404",{"t":538}," cuando revelar la existencia del recurso supone un riesgo de seguridad (documentos confidenciales, datos de otros usuarios, endpoints administrativos). El principio es que un usuario sin acceso no debería poder confirmar si un recurso existe o no. Cuando la existencia del recurso no es información sensible, usar ",{"t":45,"b":41},{"t":541}," es más correcto semánticamente.",{"type":60,"content":543},[544],{"t":545},"Implementación correcta en código",{"type":184,"content":547},[548],{"t":549},"En PHP (WordPress, Laravel, aplicaciones personalizadas)",{"type":224,"content":551,"language":226},"\u003C?php\n\n\u002F\u002F Función helper para respuestas de error de autenticación\u002Fautorización:\n\nfunction respondUnauthorized(string $message = 'Autenticación requerida'): void {\n    \u002F\u002F 401: el cliente no está autenticado\n    http_response_code(401);\n    header('WWW-Authenticate: Bearer realm=\"api.tudominio.com\"');\n    header('Content-Type: application\u002Fjson');\n    echo json_encode([\n        'error'   => 'authentication_required',\n        'message' => $message,\n        'code'    => 401\n    ]);\n    exit;\n}\n\nfunction respondForbidden(string $message = 'Acceso denegado'): void {\n    \u002F\u002F 403: el cliente está autenticado pero no tiene permiso\n    http_response_code(403);\n    header('Content-Type: application\u002Fjson');\n    echo json_encode([\n        'error'   => 'insufficient_permissions',\n        'message' => $message,\n        'code'    => 403\n    ]);\n    exit;\n}\n\n\u002F\u002F Uso correcto en un endpoint protegido:\nfunction getAdminDashboard(): void {\n    $token = getBearerToken();\n\n    if (!$token) {\n        \u002F\u002F No hay token: no sabemos quién es el cliente → 401\n        respondUnauthorized('Token de autenticación requerido');\n    }\n\n    $user = validateToken($token);\n\n    if (!$user) {\n        \u002F\u002F Token inválido o expirado: autenticación fallida → 401\n        respondUnauthorized('Token inválido o expirado');\n    }\n\n    if ($user->role !== 'admin') {\n        \u002F\u002F El usuario está autenticado pero no tiene rol admin → 403\n        respondForbidden('Se requiere rol de administrador para acceder a este recurso');\n    }\n\n    \u002F\u002F El usuario está autenticado Y tiene el rol correcto: procesar la solicitud\n    renderAdminDashboard($user);\n}\n?>",{"type":184,"content":553},[554],{"t":555},"En Node.js \u002F Express",{"type":224,"content":557,"language":226},"\u002F\u002F Middleware de autenticación — devuelve 401 si no hay token o es inválido:\nconst authenticate = async (req, res, next) => {\n    const authHeader = req.headers.authorization;\n\n    if (!authHeader || !authHeader.startsWith('Bearer ')) {\n        \u002F\u002F No hay token: no sabemos quién es → 401\n        return res.status(401)\n            .set('WWW-Authenticate', 'Bearer realm=\"api.tudominio.com\"')\n            .json({\n                error: 'authentication_required',\n                message: 'Token de autenticación requerido en la cabecera Authorization'\n            });\n    }\n\n    const token = authHeader.split(' ')[1];\n\n    try {\n        const decoded = jwt.verify(token, process.env.JWT_SECRET);\n        req.user = decoded;\n        next();\n    } catch (error) {\n        if (error.name === 'TokenExpiredError') {\n            \u002F\u002F Token expirado: credenciales caducadas → 401\n            return res.status(401)\n                .set('WWW-Authenticate', 'Bearer realm=\"api.tudominio.com\", error=\"invalid_token\"')\n                .json({\n                    error: 'token_expired',\n                    message: 'El token ha expirado. Obtén uno nuevo.'\n                });\n        }\n        \u002F\u002F Token inválido: autenticación fallida → 401\n        return res.status(401).json({\n            error: 'invalid_token',\n            message: 'Token inválido'\n        });\n    }\n};\n\n\u002F\u002F Middleware de autorización — devuelve 403 si el rol es insuficiente:\nconst authorize = (...allowedRoles) => {\n    return (req, res, next) => {\n        \u002F\u002F Si llegamos aquí, el usuario ya está autenticado (authenticate pasó)\n        if (!allowedRoles.includes(req.user.role)) {\n            \u002F\u002F El usuario está autenticado pero su rol no tiene acceso → 403\n            return res.status(403).json({\n                error: 'insufficient_permissions',\n                message: `Se requiere uno de los siguientes roles: ${allowedRoles.join(', ')}. Tu rol actual es: ${req.user.role}`\n            });\n        }\n        next();\n    };\n};\n\n\u002F\u002F Uso en las rutas:\napp.get('\u002Fapi\u002Fadmin\u002Fusuarios',\n    authenticate,                    \u002F\u002F Primero: verificar identidad (401 si falla)\n    authorize('admin', 'superadmin'), \u002F\u002F Después: verificar rol (403 si falla)\n    adminController.getUsuarios       \u002F\u002F Solo llega aquí si pasa ambos\n);\n\napp.delete('\u002Fapi\u002Fadmin\u002Fusuario\u002F:id',\n    authenticate,\n    authorize('admin'),\n    adminController.deleteUsuario\n);",{"type":184,"content":559},[560],{"t":561},"En Python (Django \u002F Flask)",{"type":224,"content":563,"language":226},"# Django REST Framework — uso correcto de excepciones de autenticación:\nfrom rest_framework.exceptions import AuthenticationFailed, PermissionDenied\nfrom rest_framework.permissions import BasePermission\n\nclass IsTokenValid(BasePermission):\n    \"\"\"\n    Verifica que el token es válido.\n    Lanza 401 si el token falta o es inválido (problema de autenticación).\n    \"\"\"\n    def has_permission(self, request, view):\n        token = request.META.get('HTTP_AUTHORIZATION', '').split(' ')[-1]\n\n        if not token:\n            # Sin token: 401 Unauthorized\n            raise AuthenticationFailed('Token de autenticación requerido')\n\n        user = verify_token(token)\n        if not user:\n            # Token inválido: 401 Unauthorized\n            raise AuthenticationFailed('Token inválido o expirado')\n\n        request.user = user\n        return True\n\n\nclass IsAdmin(BasePermission):\n    \"\"\"\n    Verifica que el usuario autenticado tiene rol de administrador.\n    Lanza 403 si el rol es insuficiente (problema de autorización).\n    \"\"\"\n    def has_permission(self, request, view):\n        if request.user.role != 'admin':\n            # Usuario autenticado pero sin rol admin: 403 Forbidden\n            raise PermissionDenied('Se requiere rol de administrador')\n        return True\n\n\n# En la vista:\nclass AdminDashboardView(APIView):\n    permission_classes = [IsTokenValid, IsAdmin]  # Aplica en orden\n\n    def get(self, request):\n        # Solo llega aquí si IsTokenValid e IsAdmin pasan sin excepciones\n        return Response({'data': get_admin_data()})",{"type":60,"content":565},[566],{"t":567},"Errores de diseño frecuentes: cuándo los desarrolladores confunden 401 y 403",{"type":184,"content":569},[570],{"t":571},"Error 1: Devolver 403 cuando el usuario no está autenticado",{"type":35,"content":573},[574],{"t":575},"Muchos desarrolladores devuelven 403 para todos los casos de acceso denegado, sin distinguir si el problema es de autenticación o de autorización. El resultado es que el cliente no sabe si debe pedir al usuario que inicie sesión (problema de autenticación, 401) o mostrar un mensaje de \"no tienes permiso\" (problema de autorización, 403).",{"type":35,"content":577},[578],{"t":579,"b":41},"Incorrecto:",{"type":224,"content":581,"language":226},"\u002F\u002F Devuelve 403 para TODOS los casos de acceso denegado:\nif (!request.user) {\n    return res.status(403).json({ error: 'Acceso denegado' }); \u002F\u002F MAL: debería ser 401\n}\nif (request.user.role !== 'admin') {\n    return res.status(403).json({ error: 'Acceso denegado' }); \u002F\u002F BIEN: aquí sí es 403\n}",{"type":35,"content":583},[584],{"t":585,"b":41},"Correcto:",{"type":224,"content":587,"language":226},"\u002F\u002F Diferencia correctamente entre autenticación y autorización:\nif (!request.user) {\n    return res.status(401)                               \u002F\u002F BIEN: problema de autenticación\n        .set('WWW-Authenticate', 'Bearer realm=\"api\"')\n        .json({ error: 'authentication_required' });\n}\nif (request.user.role !== 'admin') {\n    return res.status(403).json({                        \u002F\u002F BIEN: problema de autorización\n        error: 'insufficient_permissions'\n    });\n}",{"type":184,"content":589},[590],{"t":591},"Error 2: Devolver 401 cuando el usuario está autenticado pero no tiene permiso",{"type":35,"content":593},[594],{"t":595},"El error inverso: devolver 401 cuando el usuario ya está autenticado pero su rol no permite la acción. Esto confunde al cliente, que intentará volver a autenticarse sin éxito porque el problema no es de autenticación.",{"type":35,"content":597},[598],{"t":579,"b":41},{"type":224,"content":600,"language":226},"\u002F\u002F El usuario está autenticado pero no tiene rol de admin:\nif (user.role !== 'admin') {\n    return res.status(401).json({ error: 'No autorizado' }); \u002F\u002F MAL: debería ser 403\n    \u002F\u002F El cliente intentará renovar el token sin éxito porque el token es válido\n}",{"type":184,"content":602},[603],{"t":604},"Error 3: No incluir la cabecera WWW-Authenticate en el 401",{"type":35,"content":606},[607,609,610],{"t":608},"El RFC 9110 establece que una respuesta 401 debe incluir la cabecera ",{"t":210,"code":41},{"t":611}," indicando el esquema de autenticación requerido. Sin esta cabecera, los clientes HTTP estándar no saben cómo autenticarse y algunos navegadores no mostrarán el diálogo de autenticación.",{"type":35,"content":613},[614],{"t":579,"b":41},{"type":224,"content":616,"language":226},"HTTP\u002F1.1 401 Unauthorized\nContent-Type: application\u002Fjson\n\u002F\u002F Falta la cabecera WWW-Authenticate",{"type":35,"content":618},[619],{"t":585,"b":41},{"type":224,"content":621,"language":226},"HTTP\u002F1.1 401 Unauthorized\nWWW-Authenticate: Bearer realm=\"api.tudominio.com\"\nContent-Type: application\u002Fjson",{"type":60,"content":623},[624],{"t":625},"Cómo afectan al usuario final: mensajes de error apropiados",{"type":35,"content":627},[628],{"t":629},"Aunque el usuario final no ve los códigos HTTP directamente, la aplicación debería usar el código correcto para mostrar el mensaje adecuado:",{"type":107,"cabecera":631,"filas":641},[632,635,638],[633],{"t":634},"Código recibido",[636],{"t":637},"Mensaje apropiado para el usuario",[639],{"t":640},"Acción que debe ofrecerse",[642,651],[643,645,648],[644],{"t":53},[646],{"t":647},"\"Tu sesión ha expirado\" o \"Debes iniciar sesión para acceder\"",[649],{"t":650},"Botón de inicio de sesión o renovación de token automática",[652,654,657],[653],{"t":45},[655],{"t":656},"\"No tienes permiso para acceder a esta sección\" o \"Esta función requiere una cuenta de administrador\"",[658],{"t":659},"Información de contacto con el administrador; no ofrecer botón de login (no sirve)",{"type":35,"content":661},[662],{"t":663},"Una aplicación que recibe un 401 y muestra \"No tienes permiso\" (mensaje de 403) está engañando al usuario: tiene permiso, pero necesita autenticarse. Una aplicación que recibe un 403 y redirige al login está despistando al usuario: iniciar sesión no resolverá el problema.",{"type":60,"content":665},[666],{"t":667},"Impacto en el SEO",{"type":35,"content":669},[670],{"t":671},"Desde la perspectiva de Googlebot, la distinción entre 401 y 403 tiene implicaciones concretas:",{"type":73,"items":673},[674,679,684],[675,677],{"t":676,"b":41},"401 en URLs públicas:",{"t":678}," Googlebot no intenta autenticarse (no tiene credenciales). Recibe el 401 y no indexa el contenido. Si persiste, puede desindexar URLs con historial de posicionamiento.",[680,682],{"t":681,"b":41},"403 en URLs públicas:",{"t":683}," Googlebot recibe el 403 y tampoco puede indexar el contenido. El impacto SEO es equivalente al del 401.",[685,687],{"t":686,"b":41},"401 y 403 en URLs administrativas:",{"t":688}," sin impacto en el SEO. Googlebot entiende que esas URLs no son contenido público indexable.",{"type":35,"content":690},[691],{"t":692},"Google Search Console muestra ambos tipos de error en la sección Cobertura y los clasifica simplemente como \"error del servidor\". Verifica regularmente que ninguna URL pública esté devolviendo 401 o 403 de forma no intencionada.",{"type":60,"content":694},[695],{"t":696},"Preguntas frecuentes sobre la diferencia entre 401 y 403",{"type":184,"content":698},[699],{"t":700},"¿Por qué el código 401 se llama \"Unauthorized\" si lo que significa es \"no autenticado\"?",{"type":35,"content":702},[703],{"t":704},"Es un error histórico del estándar HTTP. El RFC 2616 de 1999 usó el término \"Unauthorized\" para el código 401 en una época en que la terminología de seguridad no estaba tan diferenciada como hoy. En inglés, \"unauthorized\" puede significar tanto \"no autenticado\" como \"no autorizado\", y el RFC eligió el término ambiguo. El RFC 9110 de 2022, que es el estándar vigente, reconoce explícitamente en sus notas que el nombre \"Unauthorized\" es históricamente inapropiado para el 401 y que debería haberse llamado \"Unauthenticated\".",{"type":184,"content":706},[707],{"t":708},"¿Qué código HTTP debo devolver si un usuario autenticado intenta acceder al perfil de otro usuario?",{"type":35,"content":710},[711,713,714,716,718],{"t":712},"El código correcto es ",{"t":148,"b":41},{"t":715},". El usuario está autenticado correctamente (su identidad está verificada), pero no tiene permiso para acceder al recurso de otro usuario. Algunos sistemas de seguridad devuelven ",{"t":717,"b":41},"404 Not Found",{"t":719}," en este caso para no revelar que el recurso existe, lo que puede ser más seguro en escenarios donde la existencia del perfil es información sensible. La elección entre 403 y 404 en este caso depende de los requisitos de privacidad del sistema.",{"type":184,"content":721},[722],{"t":723},"¿Si el token JWT ha expirado, debo devolver 401 o 403?",{"type":35,"content":725},[726,728,729],{"t":727},"Debes devolver ",{"t":133,"b":41},{"t":730},". Un token JWT expirado es un problema de autenticación: las credenciales que el cliente presentó ya no son válidas. El cliente debe obtener un nuevo token (por ejemplo, usando el refresh token) y reintentar la solicitud. Si devolvieras 403, el cliente podría interpretar que necesita solicitar permisos adicionales, cuando en realidad solo necesita renovar sus credenciales.",{"type":184,"content":732},[733],{"t":734},"¿Cuándo tiene sentido devolver 404 en lugar de 403?",{"type":35,"content":736},[737,739,741],{"t":738},"Tiene sentido devolver 404 en lugar de 403 cuando revelar que el recurso existe supone un riesgo de seguridad o privacidad. Por ejemplo: si un usuario intenta acceder a ",{"t":740,"code":41},"GET \u002Fusuarios\u002F456\u002Fdatos",{"t":742}," y ese usuario existe pero el solicitante no tiene permiso, devolver 403 confirma que el usuario 456 existe en el sistema. Si eso es información sensible (en un sistema de mensajería anónima, por ejemplo), es preferible devolver 404 para no revelar la existencia del recurso. En la mayoría de los sistemas de uso general, 403 es la respuesta más correcta semánticamente.",{"type":184,"content":744},[745],{"t":746},"¿Es incorrecto usar siempre 403 para simplificar el diseño de la API?",{"type":35,"content":748},[749],{"t":750},"Técnicamente es incorrecto según el RFC 9110, pero es una práctica frecuente en APIs pequeñas o por razones de seguridad (no revelar información sobre el estado de autenticación). El problema práctico es que los clientes que siguen el estándar no sabrán si deben pedir al usuario que se autentique (401) o mostrar un mensaje de permisos insuficientes (403). Si tu API va a ser consumida por terceros o por clientes estándar, el uso correcto de 401 y 403 es importante para la interoperabilidad.",{"type":184,"content":752},[753],{"t":754},"¿Cómo puedo comprobar qué código HTTP devuelve un endpoint?",{"type":35,"content":756},[757,759,761],{"t":758},"La forma más directa es usar ",{"t":760,"code":41},"curl",{"t":762}," desde la línea de comandos, que muestra el código de respuesta sin seguir redirecciones automáticamente:",{"type":224,"content":764,"language":226},"# Ver solo el código de estado HTTP:\ncurl -o \u002Fdev\u002Fnull -s -w \"%{http_code}\\n\" https:\u002F\u002Fapi.tudominio.com\u002Fadmin\u002Fdatos\n\n# Ver las cabeceras completas de la respuesta (útil para ver WWW-Authenticate):\ncurl -I https:\u002F\u002Fapi.tudominio.com\u002Fadmin\u002Fdatos\n\n# Ver cabeceras y cuerpo de la respuesta con un token:\ncurl -H \"Authorization: Bearer tu-token-aqui\" \\\n     -v https:\u002F\u002Fapi.tudominio.com\u002Fadmin\u002Fdatos 2>&1 | grep -E \"\u003C HTTP|\u003C WWW|{.*}\"",[766,781,795],{"slug":767,"ruta":768,"titulo":769,"extracto":770,"imagen":771,"publicado":777,"actualizado":778,"minutos_lectura":779,"etiqueta_principal":780},"err-too-many-redirects-que-es-causas-y-como-solucionarlo","\u002Ferr-too-many-redirects-que-es-causas-y-como-solucionarlo\u002F","ERR_TOO_MANY_REDIRECTS: qué es, causas y cómo solucionarlo","ERR_TOO_MANY_REDIRECTS es un error del navegador que ocurre cuando una URL genera un bucle infinito de redirecciones. Es muy frecuente en migraciones HTTP a HTTPS y configuraciones incorrectas de WordPress o plugins de caché. La causa casi siempre está en el servidor o el CMS, no en el navegador.",{"fichero":772,"url":773,"alt":774,"ancho":775,"alto":776,"pie":16},"0e0f02f0068278cd3856b9fad90f5a82331c3fc802310a89cd1464e835ea2f03.png","https:\u002F\u002Fimg.sys4net.com\u002Fm\u002Fimg\u002F0e0f02f0068278cd3856b9fad90f5a82331c3fc802310a89cd1464e835ea2f03.png","Página de error ERR_TOO_MANY_REDIRECTS de Chrome indicando que accounts.google.com redirigió demasiadas veces",657,580,"2026-06-09T00:49:08+02:00","2026-11-09T17:13:24+01:00",13,{"slug":20,"nombre":21,"ruta":22},{"slug":782,"ruta":783,"titulo":784,"extracto":785,"imagen":786,"publicado":792,"actualizado":793,"minutos_lectura":779,"etiqueta_principal":794},"error-403-forbidden-que-es-causas-y-como-solucionarlo","\u002Ferror-403-forbidden-que-es-causas-y-como-solucionarlo\u002F","Error 403 vs 401: la diferencia que nadie explica bien","El error 403 Forbidden indica que el servidor ha entendido la solicitud pero se niega a procesarla. A diferencia del 401, el 403 deniega el acceso aunque el cliente se autentique. Las causas más frecuentes son permisos de archivos incorrectos, restricciones en el .htaccess o una IP bloqueada.",{"fichero":787,"url":788,"alt":789,"ancho":790,"alto":791,"pie":16},"1e6dcab98668fe5d8762f3968e71030270098298cf57e788ca06f0fea084972b.jpg","https:\u002F\u002Fimg.sys4net.com\u002Fm\u002Fimg\u002F1e6dcab98668fe5d8762f3968e71030270098298cf57e788ca06f0fea084972b.jpg","Comparación visual entre errores HTTP 401 Unauthorized (requiere login) y 403 Forbidden (acceso denegado) con credenciales y",2000,1125,"2026-06-09T00:48:48+02:00","2026-06-11T15:56:08+02:00",{"slug":20,"nombre":21,"ruta":22},{"slug":796,"ruta":797,"titulo":798,"extracto":799,"imagen":800,"publicado":804,"actualizado":804,"minutos_lectura":805,"etiqueta_principal":806},"error-500-wordpress","\u002Ferror-500-wordpress\u002F","Error 500 en WordPress: solución paso a paso","El error 500 en WordPress aparece como pantalla en blanco sin ninguna pista. Las causas son casi siempre identificables: plugin incompatible, .htaccess corrupto o limite de memoria PHP insuficiente. El primer paso es siempre activar el modo debug para ver el error real.",{"fichero":801,"url":802,"alt":803,"ancho":14,"alto":15,"pie":16},"2e3b17226bfb47e8c0a00a4536c77cac94d417b232e306ca8fd1c31390be3051.jpg","https:\u002F\u002Fimg.sys4net.com\u002Fm\u002Fimg\u002F2e3b17226bfb47e8c0a00a4536c77cac94d417b232e306ca8fd1c31390be3051.jpg","Pantalla de error 500 de WordPress en portátil mostrando \"Internal Server Error\" con mensaje de fallo del servidor","2026-06-09T00:48:29+02:00",15,{"slug":20,"nombre":21,"ruta":22},{"blog_posting":808},{"@context":809,"@type":810,"headline":8,"description":24,"datePublished":17,"dateModified":17,"author":811,"mainEntityOfPage":813,"image":12},"https:\u002F\u002Fschema.org","BlogPosting",{"@type":812,"name":29},"Person",{"@type":814,"@id":815},"WebPage","https:\u002F\u002Fsys4net.com\u002Fblog\u002Ferror-401-unauthorized-y-error-403-forbidden-que-son-y-en-que-se-diferencian\u002F",{},{"locale":818,"mensajes":819,"ausentes":1584},"es",{"menu":820,"footer":1102,"rd":1147},{"blog":821,"domains":829,"hosting":860,"cloud":911,"dedicated":952,"IA":973,"datacenter":1004,"services":1025,"company":1046},["null","t",822,"b",823],0,["null","t",824,"i",825,"s",828],2,[826],{"t":827},3,"Blog",{"register":830,"register-caption":835,"ssl":840,"ssl-caption":845,"sendGuardian":850,"sendGuardian-caption":855},["null","t",822,"b",831],["null","t",824,"i",832,"s",834],[833],{"t":827},"Registro o traspaso de dominio",["null","t",822,"b",836],["null","t",824,"i",837,"s",839],[838],{"t":827},"Consolida tu presencia en internet",["null","t",822,"b",841],["null","t",824,"i",842,"s",844],[843],{"t":827},"Certificados de seguridad SSL",["null","t",822,"b",846],["null","t",824,"i",847,"s",849],[848],{"t":827},"La seguridad es lo primero",["null","t",822,"b",851],["null","t",824,"i",852,"s",854],[853],{"t":827},"Antispam SendGuardian",["null","t",822,"b",856],["null","t",824,"i",857,"s",859],[858],{"t":827},"Dile adiós al SPAM en tu correo",{"web":861,"web-caption":866,"wordpress":871,"wordpress-caption":876,"woocommerce":881,"woocommerce-caption":886,"prestashop":891,"prestashop-caption":896,"professional":901,"professional-caption":906},["null","t",822,"b",862],["null","t",824,"i",863,"s",865],[864],{"t":827},"Hosting Web",["null","t",822,"b",867],["null","t",824,"i",868,"s",870],[869],{"t":827},"Con almacenamiento NVMe",["null","t",822,"b",872],["null","t",824,"i",873,"s",875],[874],{"t":827},"Hosting WordPress",["null","t",822,"b",877],["null","t",824,"i",878,"s",880],[879],{"t":827},"Saca el máximo partido a tu WordPress",["null","t",822,"b",882],["null","t",824,"i",883,"s",885],[884],{"t":827},"Hosting WooCommerce",["null","t",822,"b",887],["null","t",824,"i",888,"s",890],[889],{"t":827},"Toda la potencia necesaria para tu e-commerce",["null","t",822,"b",892],["null","t",824,"i",893,"s",895],[894],{"t":827},"Hosting PrestaShop",["null","t",822,"b",897],["null","t",824,"i",898,"s",900],[899],{"t":827},"Empieza con tu tienda online sin complicaciones",["null","t",822,"b",902],["null","t",824,"i",903,"s",905],[904],{"t":827},"Hosting Pro",["null","t",822,"b",907],["null","t",824,"i",908,"s",910],[909],{"t":827},"Hosting multiusuario para revendedores",{"cloud":912,"caption":917,"cloudVpsHoras":922,"cloudVpsHoras-caption":927,"cloudEccomerce":932,"cloudEccomerce-caption":937,"cloudBackup":942,"cloudBackup-caption":947},["null","t",822,"b",913],["null","t",824,"i",914,"s",916],[915],{"t":827},"Cloud VPS",["null","t",822,"b",918],["null","t",824,"i",919,"s",921],[920],{"t":827},"Un servidor que escala con el crecimiento de tu negocio",["null","t",822,"b",923],["null","t",824,"i",924,"s",926],[925],{"t":827},"Cloud VPS por horas",["null","t",822,"b",928],["null","t",824,"i",929,"s",931],[930],{"t":827},"Servidores de pago por uso",["null","t",822,"b",933],["null","t",824,"i",934,"s",936],[935],{"t":827},"Cloud Ecommerce",["null","t",822,"b",938],["null","t",824,"i",939,"s",941],[940],{"t":827},"Un servidor diseñado para tu tienda online",["null","t",822,"b",943],["null","t",824,"i",944,"s",946],[945],{"t":827},"Cloud Backup",["null","t",822,"b",948],["null","t",824,"i",949,"s",951],[950],{"t":827},"Copias de seguridad y antivirus a tu medida",{"dedicated":953,"caption":958,"stock":963,"stock-caption":968},["null","t",822,"b",954],["null","t",824,"i",955,"s",957],[956],{"t":827},"Servidores dedicados",["null","t",822,"b",959],["null","t",824,"i",960,"s",962],[961],{"t":827},"Potencia absoluta, sin compartir",["null","t",822,"b",964],["null","t",824,"i",965,"s",967],[966],{"t":827},"Servidores dedicados de stock",["null","t",822,"b",969],["null","t",824,"i",970,"s",972],[971],{"t":827},"Gran stock de equipos al mejor precio",{"dedicatedIA":974,"dedicatedIA-caption":979,"n8n":984,"n8n-caption":989,"dokploy":994,"dokploy-caption":999},["null","t",822,"b",975],["null","t",824,"i",976,"s",978],[977],{"t":827},"Servidores IA",["null","t",822,"b",980],["null","t",824,"i",981,"s",983],[982],{"t":827},"GPU NVIDIA dedicada para inferencia local en España",["null","t",822,"b",985],["null","t",824,"i",986,"s",988],[987],{"t":827},"n8n",["null","t",822,"b",990],["null","t",824,"i",991,"s",993],[992],{"t":827},"El servidor que necesitas para tu automatización",["null","t",822,"b",995],["null","t",824,"i",996,"s",998],[997],{"t":827},"Dokploy",["null","t",822,"b",1000],["null","t",824,"i",1001,"s",1003],[1002],{"t":827},"Hosting Dokploy optimizado para desplegar tu stack moderno",{"housing":1005,"housing-caption":1010,"datacenter":1015,"datacenter-caption":1020},["null","t",822,"b",1006],["null","t",824,"i",1007,"s",1009],[1008],{"t":827},"Housing",["null","t",822,"b",1011],["null","t",824,"i",1012,"s",1014],[1013],{"t":827},"Tu propia infraestructura en nuestras instalaciones.",["null","t",822,"b",1016],["null","t",824,"i",1017,"s",1019],[1018],{"t":827},"Centro de datos",["null","t",822,"b",1021],["null","t",824,"i",1022,"s",1024],[1023],{"t":827},"Conoce nuestra infraestructura",{"beeroot360":1026,"beeroot360-caption":1031,"sysadmin":1036,"sysadmin-caption":1041},["null","t",822,"b",1027],["null","t",824,"i",1028,"s",1030],[1029],{"t":827},"Beeroot 360",["null","t",822,"b",1032],["null","t",824,"i",1033,"s",1035],[1034],{"t":827},"Infraestructura profesional",["null","t",822,"b",1037],["null","t",824,"i",1038,"s",1040],[1039],{"t":827},"Administración de sistemas",["null","t",822,"b",1042],["null","t",824,"i",1043,"s",1045],[1044],{"t":827},"Soporte técnico 24x7x365",{"about":1047,"about-caption":1052,"certification":1057,"certification-caption":1062,"partners":1067,"partners-caption":1072,"affiliates":1077,"affiliates-caption":1082,"contact":1087,"contact-caption":1092,"know-more":1097},["null","t",822,"b",1048],["null","t",824,"i",1049,"s",1051],[1050],{"t":827},"Equipo",["null","t",822,"b",1053],["null","t",824,"i",1054,"s",1056],[1055],{"t":827},"Conoce nuestro equipo humano",["null","t",822,"b",1058],["null","t",824,"i",1059,"s",1061],[1060],{"t":827},"Certificaciones",["null","t",822,"b",1063],["null","t",824,"i",1064,"s",1066],[1065],{"t":827},"Preparados para tus necesidades",["null","t",822,"b",1068],["null","t",824,"i",1069,"s",1071],[1070],{"t":827},"Partners",["null","t",822,"b",1073],["null","t",824,"i",1074,"s",1076],[1075],{"t":827},"¿Quieres ser nuestro socio tecnológico?",["null","t",822,"b",1078],["null","t",824,"i",1079,"s",1081],[1080],{"t":827},"Plan de afiliados",["null","t",822,"b",1083],["null","t",824,"i",1084,"s",1086],[1085],{"t":827},"Obtén beneficios recomendando nuestros servicios",["null","t",822,"b",1088],["null","t",824,"i",1089,"s",1091],[1090],{"t":827},"Contacto",["null","t",822,"b",1093],["null","t",824,"i",1094,"s",1096],[1095],{"t":827},"¿Tienes alguna duda? Contacta con nosotros",["null","t",822,"b",1098],["null","t",824,"i",1099,"s",1101],[1100],{"t":827},"Agenda una reunión con nuestro equipo comercial",{"about":1103,"support":1108,"affiliates":1113,"legal":1117,"privacy":1122,"terms":1127,"cookies":1132,"cookieSettings":1137,"security":1142},["null","t",822,"b",1104],["null","t",824,"i",1105,"s",1107],[1106],{"t":827},"Nosotros",["null","t",822,"b",1109],["null","t",824,"i",1110,"s",1112],[1111],{"t":827},"Soporte",["null","t",822,"b",1114],["null","t",824,"i",1115,"s",1081],[1116],{"t":827},["null","t",822,"b",1118],["null","t",824,"i",1119,"s",1121],[1120],{"t":827},"Aviso legal",["null","t",822,"b",1123],["null","t",824,"i",1124,"s",1126],[1125],{"t":827},"Políticas de privacidad",["null","t",822,"b",1128],["null","t",824,"i",1129,"s",1131],[1130],{"t":827},"Condiciones de contratación",["null","t",822,"b",1133],["null","t",824,"i",1134,"s",1136],[1135],{"t":827},"Política de cookies",["null","t",822,"b",1138],["null","t",824,"i",1139,"s",1141],[1140],{"t":827},"Configurar cookies",["null","t",822,"b",1143],["null","t",824,"i",1144,"s",1146],[1145],{"t":827},"Política de seguridad",{"breadcrumb":1148,"header":1153,"menu":1274,"footer":1357,"cta":1396,"blogPage":1422,"seo":1483,"root":1489,"menuOpts":1505,"soportePage":1537,"guidesPage":1544,"rdt1":1556},["null","t",822,"b",1149],["null","t",824,"i",1150,"s",1152],[1151],{"t":827},"Ruta de navegación",{"phone":1154,"support":1159,"chat":1164,"account":1169,"openMenu":1174,"navLabel":1179,"ctaShort":1184,"viewAll":1189,"top":1197,"nav":1232,"sections":1268},["null","t",822,"b",1155],["null","t",824,"i",1156,"s",1158],[1157],{"t":827},"868 300 030",["null","t",822,"b",1160],["null","t",824,"i",1161,"s",1163],[1162],{"t":827},"Centro de soporte",["null","t",822,"b",1165],["null","t",824,"i",1166,"s",1168],[1167],{"t":827},"Abrir chat",["null","t",822,"b",1170],["null","t",824,"i",1171,"s",1173],[1172],{"t":827},"Área de cliente",["null","t",822,"b",1175],["null","t",824,"i",1176,"s",1178],[1177],{"t":827},"Abrir menú",["null","t",822,"b",1180],["null","t",824,"i",1181,"s",1183],[1182],{"t":827},"Navegación principal",["null","t",822,"b",1185],["null","t",824,"i",1186,"s",1188],[1187],{"t":827},"Contactar",["null","t",822,"b",1190],["null","t",824,"i",1191],[1192,1194],{"t":827,"v":1193},"Ver todo ",{"t":1195,"k":1196},4,"family",{"label":1198,"support":1203,"datacenter":1208,"ensAlt":1213,"ens":1218,"supportLink":1223,"chat":1227},["null","t",822,"b",1199],["null","t",824,"i",1200,"s",1202],[1201],{"t":827},"Accesos rápidos",["null","t",822,"b",1204],["null","t",824,"i",1205,"s",1207],[1206],{"t":827},"Soporte humano 24\u002F7",["null","t",822,"b",1209],["null","t",824,"i",1210,"s",1212],[1211],{"t":827},"Centro de datos propio en Murcia",["null","t",822,"b",1214],["null","t",824,"i",1215,"s",1217],[1216],{"t":827},"Distintivo de certificación ENS de categoría alta",["null","t",822,"b",1219],["null","t",824,"i",1220,"s",1222],[1221],{"t":827},"ENS nivel alto",["null","t",822,"b",1224],["null","t",824,"i",1225,"s",1112],[1226],{"t":827},["null","t",822,"b",1228],["null","t",824,"i",1229,"s",1231],[1230],{"t":827},"Chat",{"domains":1233,"hosting":1238,"cloud":1243,"servers":1248,"ia":1253,"services":1258,"company":1263},["null","t",822,"b",1234],["null","t",824,"i",1235,"s",1237],[1236],{"t":827},"Dominios",["null","t",822,"b",1239],["null","t",824,"i",1240,"s",1242],[1241],{"t":827},"Hosting",["null","t",822,"b",1244],["null","t",824,"i",1245,"s",1247],[1246],{"t":827},"Cloud",["null","t",822,"b",1249],["null","t",824,"i",1250,"s",1252],[1251],{"t":827},"Servidores",["null","t",822,"b",1254],["null","t",824,"i",1255,"s",1257],[1256],{"t":827},"IA",["null","t",822,"b",1259],["null","t",824,"i",1260,"s",1262],[1261],{"t":827},"Servicios",["null","t",822,"b",1264],["null","t",824,"i",1265,"s",1267],[1266],{"t":827},"Empresa",{"software":1269},["null","t",822,"b",1270],["null","t",824,"i",1271,"s",1273],[1272],{"t":827},"Software",{"featured":1275,"domain":1280,"hosting":1291,"cloud":1302,"servers":1313,"ia":1324,"services":1335,"company":1346},["null","t",822,"b",1276],["null","t",824,"i",1277,"s",1279],[1278],{"t":827},"Destacado",{"title":1281,"text":1286},["null","t",822,"b",1282],["null","t",824,"i",1283,"s",1285],[1284],{"t":827},"Tu nombre en internet",["null","t",822,"b",1287],["null","t",824,"i",1288,"s",1290],[1289],{"t":827},"Cientos de extensiones, DNS gestionable, SSL y antispam para tu correo.",{"title":1292,"text":1297},["null","t",822,"b",1293],["null","t",824,"i",1294,"s",1296],[1295],{"t":827},"Hosting con Plesk y NVMe",["null","t",822,"b",1298],["null","t",824,"i",1299,"s",1301],[1300],{"t":827},"Para webs, WordPress y tiendas online. CloudLinux, copias y soporte 24\u002F7\u002F365 incluidos.",{"title":1303,"text":1308},["null","t",822,"b",1304],["null","t",824,"i",1305,"s",1307],[1306],{"t":827},"Cloud VPS en España",["null","t",822,"b",1309],["null","t",824,"i",1310,"s",1312],[1311],{"t":827},"Recursos dedicados, IP propia y control total desde el panel NETLAN: reinicia, monitoriza y escala.",{"title":1314,"text":1319},["null","t",822,"b",1315],["null","t",824,"i",1316,"s",1318],[1317],{"t":827},"Servidores y housing",["null","t",822,"b",1320],["null","t",824,"i",1321,"s",1323],[1322],{"t":827},"Dedicados configurables o de stock, GPU NVIDIA para IA y housing en nuestro centro de datos de Murcia.",{"title":1325,"text":1330},["null","t",822,"b",1326],["null","t",824,"i",1327,"s",1329],[1328],{"t":827},"Infraestructura para IA",["null","t",822,"b",1331],["null","t",824,"i",1332,"s",1334],[1333],{"t":827},"Automatización con n8n, despliegues con Dokploy y GPU NVIDIA dedicada para inferencia local.",{"title":1336,"text":1341},["null","t",822,"b",1337],["null","t",824,"i",1338,"s",1340],[1339],{"t":827},"Que me lo gestionen",["null","t",822,"b",1342],["null","t",824,"i",1343,"s",1345],[1344],{"t":827},"Beeroot 360 y administración de sistemas: monitorización, parches e incidencias de la mano de nuestro NOC 24\u002F7.",{"title":1347,"text":1352},["null","t",822,"b",1348],["null","t",824,"i",1349,"s",1351],[1350],{"t":827},"Personas, no tickets",["null","t",822,"b",1353],["null","t",824,"i",1354,"s",1356],[1355],{"t":827},"Un equipo técnico en Murcia que conoce tu proyecto por su nombre.",{"tagline":1358,"phone":1363,"products":1368,"solutions":1373,"company":1378,"contact":1382,"address":1386,"social":1391},["null","t",822,"b",1359],["null","t",824,"i",1360,"s",1362],[1361],{"t":827},"Hosting, cloud y servidores con centro de datos propio en Murcia. Desde 2002 cuidando de lo que te importa.",["null","t",822,"b",1364],["null","t",824,"i",1365,"s",1367],[1366],{"t":827},"Teléfono 24\u002F7\u002F365",["null","t",822,"b",1369],["null","t",824,"i",1370,"s",1372],[1371],{"t":827},"Productos",["null","t",822,"b",1374],["null","t",824,"i",1375,"s",1377],[1376],{"t":827},"Soluciones",["null","t",822,"b",1379],["null","t",824,"i",1380,"s",1267],[1381],{"t":827},["null","t",822,"b",1383],["null","t",824,"i",1384,"s",1091],[1385],{"t":827},["null","t",822,"b",1387],["null","t",824,"i",1388,"s",1390],[1389],{"t":827},"Alcantarilla, Región de Murcia (España)",["null","t",822,"b",1392],["null","t",824,"i",1393,"s",1395],[1394],{"t":827},"Síguenos",{"note":1397,"kicker":1402,"title":1407,"text":1412,"primary":1417},["null","t",822,"b",1398],["null","t",824,"i",1399,"s",1401],[1400],{"t":827},"Equipo técnico en Murcia, 24\u002F7\u002F365",["null","t",822,"b",1403],["null","t",824,"i",1404,"s",1406],[1405],{"t":827},"hablemos",["null","t",822,"b",1408],["null","t",824,"i",1409,"s",1411],[1410],{"t":827},"¿Hosting, VPS o servidor dedicado?",["null","t",822,"b",1413],["null","t",824,"i",1414,"s",1416],[1415],{"t":827},"Si dudas entre uno y otro, te ayudamos a elegir según tu proyecto, el tráfico que esperas y cuánto quieres administrar tú. La consulta no tiene coste y te responde una persona.",["null","t",822,"b",1418],["null","t",824,"i",1419,"s",1421],[1420],{"t":827},"Ayúdame a elegir",{"rss":1423,"kicker":1428,"breadcrumb":1432,"article":1442,"index":1477},["null","t",822,"b",1424],["null","t",824,"i",1425,"s",1427],[1426],{"t":827},"Blog de sys4net (RSS)",["null","t",822,"b",1429],["null","t",824,"i",1430,"s",828],[1431],{"t":827},{"home":1433,"blog":1438},["null","t",822,"b",1434],["null","t",824,"i",1435,"s",1437],[1436],{"t":827},"Inicio",["null","t",822,"b",1439],["null","t",824,"i",1440,"s",828],[1441],{"t":827},{"writtenBy":1443,"published":1448,"readingTime":1455,"related":1462,"table":1467,"tags":1472},["null","t",822,"b",1444],["null","t",824,"i",1445,"s",1447],[1446],{"t":827},"Por",["null","t",822,"b",1449],["null","t",824,"i",1450],[1451,1453],{"t":827,"v":1452},"Publicado el ",{"t":1195,"k":1454},"fecha",["null","t",822,"b",1456],["null","t",824,"i",1457],[1458,1460],{"t":1195,"k":1459},"n",{"t":827,"v":1461}," min de lectura",["null","t",822,"b",1463],["null","t",824,"i",1464,"s",1466],[1465],{"t":827},"Artículos relacionados",["null","t",822,"b",1468],["null","t",824,"i",1469,"s",1471],[1470],{"t":827},"Tabla: se puede desplazar en horizontal",["null","t",822,"b",1473],["null","t",824,"i",1474,"s",1476],[1475],{"t":827},"Etiquetas",{"read":1478},["null","t",822,"b",1479],["null","t",824,"i",1480,"s",1482],[1481],{"t":827},"Leer",{"ogImageAlt":1484},["null","t",822,"b",1485],["null","t",824,"i",1486,"s",1488],[1487],{"t":827},"sys4net — Hosting, Cloud y Servidores en España",{"devtools":1490},["null","sudo",1491,"work",1500],["null","t",822,"b",1492],["null","t",824,"i",1493],[1494,1496,1498],{"t":827,"v":1495},"¿Eres de los que abren las DevTools? Teclea ",{"t":1195,"k":1497},"cmd",{"t":827,"v":1499}," en la web.",["null","t",822,"b",1501],["null","t",824,"i",1502,"s",1504],[1503],{"t":827},"¿Te gusta trastear? Trabaja con nosotros:",{"links":1506},{"plesk":1507,"pleskCaption":1512,"cloudlinux":1517,"cloudlinuxCaption":1522,"acronis":1527,"acronisCaption":1532},["null","t",822,"b",1508],["null","t",824,"i",1509,"s",1511],[1510],{"t":827},"Plesk",["null","t",822,"b",1513],["null","t",824,"i",1514,"s",1516],[1515],{"t":827},"El panel de control estándar del hosting, con licencias oficiales.",["null","t",822,"b",1518],["null","t",824,"i",1519,"s",1521],[1520],{"t":827},"CloudLinux",["null","t",822,"b",1523],["null","t",824,"i",1524,"s",1526],[1525],{"t":827},"Cada web aislada y con sus propios recursos garantizados.",["null","t",822,"b",1528],["null","t",824,"i",1529,"s",1531],[1530],{"t":827},"Acronis Cyber Protect",["null","t",822,"b",1533],["null","t",824,"i",1534,"s",1536],[1535],{"t":827},"Copias de seguridad y antimalware para equipos y servidores.",{"links":1538},{"label":1539},["null","t",822,"b",1540],["null","t",824,"i",1541,"s",1543],[1542],{"t":827},"sys4net.com\u002Fsoporte",{"toc":1545},{"toggle":1546,"title":1551},["null","t",822,"b",1547],["null","t",824,"i",1548,"s",1550],[1549],{"t":827},"Contenido de la guía",["null","t",822,"b",1552],["null","t",824,"i",1553,"s",1555],[1554],{"t":827},"En esta guía",{"site":1557},{"footer":1558},{"navLabel":1559,"ensLink":1564,"smeAlt":1569,"vatExcluded":1574,"vatAtCheckout":1579},["null","t",822,"b",1560],["null","t",824,"i",1561,"s",1563],[1562],{"t":827},"Footer",["null","t",822,"b",1565],["null","t",824,"i",1566,"s",1568],[1567],{"t":827},"Certificado ENS de categoría alta de sys4net (PDF)",["null","t",822,"b",1570],["null","t",824,"i",1571,"s",1573],[1572],{"t":827},"PYME innovadora",["null","t",822,"b",1575],["null","t",824,"i",1576,"s",1578],[1577],{"t":827},"Todos los precios mostrados en la web no incluyen el I.V.A.",["null","t",822,"b",1580],["null","t",824,"i",1581,"s",1583],[1582],{"t":827},"El I.V.A. se calcula al finalizar el pedido teniendo en cuenta su localización.",[],1794320560320]