Comment gérer les redirectes dans un client HTTP en Go
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.
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.

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
.

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.

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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

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

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds



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

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

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

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](https://img.php.cn/upload/article/001/246/273/175668570227460.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
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.

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

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.

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.
