Table des matières
1. Comprendre le comportement par défaut
2. Politique de redirection avec CheckRedirect
Exemple: limiter les redirections vers 3
Exemple: empêcher tous les redirectes
3. Préserver les en-têtes ou modifier les demandes pendant les redirections
4. Pièges et astuces communes
Résumé
Maison développement back-end Golang Comment gérer les redirectes dans un client HTTP en Go

Comment gérer les redirectes dans un client HTTP en Go

Aug 31, 2025 am 01:13 AM

Http.Client de Go's GO suit automatiquement jusqu'à 10 redirections par défaut; 1. Par défaut, les redirects tels que 301, 302, etc. seront automatiquement traités et renvoient la réponse finale; 2. Vous pouvez personnaliser le comportement en définissant la fonction CheckRedirect, tels que la limitation du nombre de redirections, et renvoyer une erreur lorsque Len (via)> = 3 pour limiter jusqu'à 2 redirections; 3. Vous pouvez empêcher les redirections et obtenir la réponse de redirection d'origine en renvoyant HTTP.ErruseSastResponse, qui facilite la vérification de l'en-tête de localisation; 4. Vous pouvez modifier la demande pendant le processus de redirection, tel que la suppression de l'en-tête d'autorisation en fonction du nom de domaine cible pour éviter la fuite d'informations sensibles; 5. Faites attention à des questions telles que la redirection circulaire, les changements de méthode (tels que le GET post-changement), la sécurité interdomaine et l'annulation du contexte; En bref, CheckReDirect fournit un contrôle complet sur le comportement de redirection et convient aux exigences qui nécessitent une gestion fine des scénarios de redirection.

Comment gérer les redirectes dans un client HTTP en Go

La gestion des redirectes dans un client HTTP dans Go est simple grâce aux capacités intégrées du package net/http . Par défaut, http.Client de Go suit automatiquement les redirections, mais vous pouvez personnaliser ce comportement en fonction de vos besoins, comme inspecter le comportement de redirection, limiter le nombre de redirectes ou les désactiver entièrement.

Comment gérer les redirectes dans un client HTTP en Go

Voici comment contrôler la manipulation de la redirection dans Go:

1. Comprendre le comportement par défaut

Par défaut, http.Client fait suite à 10 redirections pour les demandes. Si une redirection (comme 301, 302, 307, etc.) est rencontrée, le client fera automatiquement la prochaine demande à l'URL spécifiée dans l'en-tête de Location .

Comment gérer les redirectes dans un client HTTP en Go
 resp, err: = http.get ("https://httpbin.org/redirect/1")
Si err! = Nil {
    log.fatal (err)
}
différer resp.body.close ()
// Cela suivra automatiquement la redirection

La réponse finale (après les redirections suivantes) est renvoyée, et vous ne verrez pas les étapes intermédiaires à moins que vous vous configuriez autrement.

2. Politique de redirection avec CheckRedirect

Vous pouvez contrôler le comportement de redirection en définissant la fonction CheckRedirect dans le http.Client . Cette fonction est appelée pour chaque redirection et vous permet de décider de le suivre, de modifier la demande ou de faire avorter.

Comment gérer les redirectes dans un client HTTP en Go

Exemple: limiter les redirections vers 3

 Client: = & http.client {
    CheckRerect: func (req * http.request, via [] * http.request) Erreur {
        Si Len (via)> = 3 {
            retourner fmt.errorf ("trop ​​de redirections")
        }
        retour nil
    },
}

resp, err: = client.get ("https://httpbin.org/redirect/5")
Si err! = Nil {
    Log.printf ("Demande échoué:% V", ERR)
}

Dans cet exemple:

  • via est une tranche de demandes menant à la demande actuelle (y compris la demande initiale).
  • Nous autorisons jusqu'à 2 redirections (3 demandes totales) et renvoyons une erreur autrement.

Exemple: empêcher tous les redirectes

 Client: = & http.client {
    CheckRerect: func (req * http.request, via [] * http.request) Erreur {
        Retour http.erruselastResponse // Ne suivez pas la redirection, retournez la réponse de redirection
    },
}

resp, err: = client.get ("https://httpbin.org/redirect/1")
Si err! = Nil {
    log.fatal (err)
}
// resp.statuscode sera 302, et vous pouvez inspecter l'en-tête de l'emplacement
Emplacement: = resp.header.get ("emplacement")
fmt.println ("rediriger vers:", emplacement)

L'utilisation de http.ErrUseLastResponse dit au client d'arrêter et de retourner la réponse de redirection au lieu de la suivre - utile pour inspecter où vous seriez redirigé.

3. Préserver les en-têtes ou modifier les demandes pendant les redirections

Parfois, vous voudrez peut-être ajuster les en-têtes (par exemple, supprimer Authorization sur la redirection vers un domaine différent pour la sécurité).

 Client: = & http.client {
    CheckRerect: func (req * http.request, via [] * http.request) Erreur {
        // N'envoyez pas l'en-tête d'autorisation dans différents domaines
        si req.url.hostname ()! = via [0] .url.hostname () {
            req.header.del ("autorisation")
        }
        retour nil
    },
}

Cela garantit que les en-têtes sensibles ne sont pas divulgués à travers les domaines pendant les redirections.

4. Pièges et astuces communes

  • Redirection circulaire : Même avec les limites par défaut, certains points de terminaison peuvent provoquer des boucles. Testez toujours avec de vrais points de terminaison.
  • Modifications de la méthode : Certains redirectes (comme 302) font historiquement les clients à changer de poste. Utilisez 307 ou 308 pour préserver la méthode et le corps.
  • Annulation du contexte : les redirections respectent le contexte du client. Si le contexte est annulé pendant les redirections, le processus s'arrête.

Résumé

  • http.Client de Go Suit les redirects par défaut (jusqu'à 10).
  • Utilisez CheckRedirect pour personnaliser le comportement: limiter, inspecter ou bloquer les redirections.
  • Renvoie nil à suivre, http.ErrUseLastResponse pour arrêter et retourner la réponse de redirection, ou toute autre erreur pour abandonner.
  • Soyez conscient de la sécurité (en-têtes, domaines) et des performances (boucle, délais d'attente).

Fondamentalement, CheckRedirect vous donne un contrôle total - utilisez-le lorsque le comportement par défaut ne suffit pas.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT

Stock Market GPT

Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment gérer les packages et les importations en Go? Comment gérer les packages et les importations en Go? Sep 01, 2025 am 02:10 AM

UsegomodulesbyrunninggomodinittrocereAgo.modfile, qui mentionne les dépenses et les versions.2. OrganizcodeIntopackages whereweachDirectoryisapackagewithaconsistpackagename, de préférence laMatchingTheDirectoryName, et lastructureImportSbaseTheMoDulepath.33.

Comment gérer les paniques dans un goroutine à aller Comment gérer les paniques dans un goroutine à aller Aug 24, 2025 am 01:55 AM

Tohandlepanicsingoroutines, a utilisé avec cocoverités de manière

Comment créer une balise de construction personnalisée dans Go Comment créer une balise de construction personnalisée dans Go Aug 27, 2025 am 04:37 AM

CustomBuildTagSingoAllowConditionalCompilationBasedOnenvironment, Architecture, OrCustomScenariosByusing // Go: BuildTagsAtTheTopoffiles, qui aéréthénabledViagobuild-tags "Tagname", soutenant les opérateurs de type &&, ||, et! ForComplexCondidit

Comment utiliser Go avec Apache Kafka Comment utiliser Go avec Apache Kafka Aug 20, 2025 am 11:25 AM

La clé pour s'intégrer à Apachekafka avec GO est de sélectionner la bonne bibliothèque client et de configurer correctement les producteurs et les consommateurs. Tout d'abord, il est recommandé d'utiliser la bibliothèque Segmentio / Kafka-Go. Parce qu'il est concis et est conforme aux habitudes de langue GO, après l'installation via gogetgithub.com/segmentio/kafka-go, vous pouvez créer un écrivain pour envoyer des messages et définir des politiques addr, thème et équilibreur; Configurez ensuite le lecteur pour réaliser la consommation de messages en spécifiant les courtiers, le sujet et GroupID, prennent en charge les groupes de consommateurs et l'allocation de partition manuelle; Assurez-vous d'utiliser le contexte pour contrôler les délais d'expiration, activer TLS / SASL pour assurer la sécurité,

Comment convertir [] int en [] uint8 (tableau d'octet) dans Go Comment convertir [] int en [] uint8 (tableau d'octet) dans Go Sep 01, 2025 am 08:15 AM

Cet article explore comment convertir [] des tranches int en [] uint8 (tableau d'octets) dans Go. Étant donné que la taille du type INT dans GO est liée à la plate-forme (32 bits ou 64 bits), l'article détaille comment utiliser le package de réflexion pour obtenir la taille INT de manière dynamique et combiner le package de codage / binaire pour convertir efficacement et en toute sécurité de manière grande entidienne, en fournissant des exemples de code spécifiques et des précautions pour aider les développeurs à COPE avec des défis de conversion des données transversales.

Comment gérer les redirectes dans un client HTTP en Go Comment gérer les redirectes dans un client HTTP en Go Aug 31, 2025 am 01:13 AM

Http.Client de Go's GO suit automatiquement jusqu'à 10 redirections par défaut; 1. Par défaut, les redirectes tels que 301, 302, etc. seront automatiquement traités et la réponse finale sera retournée; 2. Vous pouvez personnaliser le comportement en définissant la fonction CheckRedirect, tels que la limitation du nombre de redirections, et renvoyer une erreur lorsque Len (via)> = 3 pour limiter jusqu'à 2 redirections; 3. Vous pouvez empêcher les redirections et obtenir la réponse de redirection d'origine en renvoyant HTTP.ErruseSastResponse, ce qui est pratique pour vérifier l'en-tête de l'emplacement; 4. Vous pouvez modifier la demande pendant le processus de redirection, tel que la suppression de l'en-tête d'autorisation en fonction du nom de domaine cible pour éviter la fuite d'informations sensibles; 5. Vous devez faire attention à la boucle

Comment utiliser le sync.map pour un accès à la carte simultanée dans Go Comment utiliser le sync.map pour un accès à la carte simultanée dans Go Aug 20, 2025 pm 12:26 PM

sync.map doit être utilisé dans des scénarios simultanés avec plus de lectures et moins de lectures et d'écritures. 1. Lorsque plusieurs goroutines sont lues et écrivent simultanément et que des verrous explicites sont nécessaires; 2. Utilisez des méthodes de stockage, de chargement, de suppression, de chargeur et de plage pour utiliser des paires de valeurs clés d'interface de type {}; 3. Faites attention à son manque de sécurité de type, de mauvaises performances dans les scénarios à forte intensité d'écriture et nécessite des affirmations de type; 4. Dans la plupart des cas, la cartographie conventionnelle avec sync.rwmutex est plus simple et plus efficace, donc Sync.Map n'est pas une alternative générale et ne convient que pour des scénarios spécifiques à lecture élevée et à faible écriture.

GO Language Programmation simultanée: comprendre et utiliser Sync.WaitGroup GO Language Programmation simultanée: comprendre et utiliser Sync.WaitGroup Aug 31, 2025 am 07:48 AM

Sync.WaitGroup est un primitif important pour la synchronisation simultanée dans le langage Go. Il permet au Goroutine principal d'attendre l'exécution d'un groupe de sous-goroutines. Grâce au mécanisme de compteur, WaitGroup peut s'assurer que toutes les tâches simultanées sont effectuées et que le programme continue d'être exécuté, évitant efficacement les conditions de course et la fuite des ressources, et est un outil clé pour construire des applications simultanées robustes.

See all articles