59 votes

comment une application peut-elle utiliser le port 80/HTTP sans entrer en conflit avec les navigateurs ?

Si je comprends bien, les applications utilisent parfois HTTP pour envoyer des messages, car l'utilisation d'autres ports est susceptible de poser des problèmes de pare-feu. Mais comment cela fonctionne-t-il sans entrer en conflit avec d'autres applications telles que les navigateurs web ? En fait, comment faire pour que plusieurs navigateurs fonctionnant en même temps n'entrent pas en conflit ? Est-ce qu'ils surveillent tous le port et en sont informés... peut-on partager un port de cette manière ?

J'ai le sentiment que c'est une question stupide, mais ce n'est pas quelque chose auquel j'ai déjà pensé, et dans d'autres cas, j'ai vu des problèmes lorsque deux applications sont configurées pour utiliser le même port.

89voto

Flavius Stef Points 7400

Il y a 2 ports : un port source (navigateur) et un port de destination (serveur). Le navigateur demande à l'OS un port source disponible (disons qu'il reçoit 33123 ) puis établit une connexion par socket au port de destination (habituellement 80/HTTP , 443/HTTPS ).

Lorsque le serveur web reçoit la réponse, il envoie une réponse qui a 80 comme port source et 33123 comme port de destination.

Ainsi, si deux navigateurs accèdent simultanément à stackoverflow.com, vous obtiendrez quelque chose comme ceci :

Firefox (localhost:33123) <-----------> stackoverflow.com (69.59.196.211:80)
Chrome  (localhost:33124) <-----------> stackoverflow.com (69.59.196.211:80)

0 votes

En ce qui concerne les connexions simultanées, vous semblez l'expliquer à partir de l'approche de la du navigateur perspective. Et du point de vue de l'application perspective ?

6 votes

Un navigateur est une application. Pourriez-vous préciser votre question ?

1 votes

Est-ce que chaque onglet d'un navigateur a aussi un port séparé comme ça ?

23voto

Justin Niessner Points 144953

Les requêtes HTTP sortantes ne se font pas sur le port 80. Lorsqu'une application demande un socket, elle en reçoit généralement un au hasard. C'est le port Source.

Le port 80 sert à servir le contenu HTTP (par le serveur, pas le client). Il s'agit du port de destination.

Chaque navigateur utilise une source différente pour générer les demandes. De cette façon, les paquets sont renvoyés à la bonne application.

0 votes

Mais que se passe-t-il si mon client/serveur communique sur 80... si le client reçoit un message sur le port 80 (pourquoi), le navigateur ne l'interceptera-t-il pas comme un contenu HTTP ?

1 votes

Le client se connectera au port 80 du serveur, mais utilisera lui-même un autre port. Essayez vous-même : téléchargez un fichier à partir d'un serveur (par exemple une vidéo youtube), ouvrez une invite et tapez "netstat". Votre propre machine utilisera un port aléatoire (comme 62123) pour se connecter au serveur sur le port 80.

6 votes

@John, non. Le site serveur web ouvre le port 80, mais le navigateur a un port différent, attribué de façon aléatoire. Si votre application communique sur le port 80, vous empêchez votre application d'être utilisée sur la même machine qu'un serveur web, mais vous n'interférez pas du tout avec la navigation web.

9voto

jchl Points 2538

C'est le quintuplet (protocole IP, adresse IP locale, port local, adresse IP distante, port distant) qui identifie une connexion. Plusieurs navigateurs (ou en fait un seul navigateur qui charge plusieurs pages simultanément) utiliseront chacun le port de destination 80, mais le port local (qui est attribué par le système d'exploitation) est distinct dans chaque cas. Il n'y a donc pas de conflit.

0 votes

Donc, en interne, le serveur renvoie la réponse au port <local> du client ?

0 votes

Bien, dans la réponse le serveur change le port local et distant et l'adresse IP locale et distante, donc la réponse a le port local = 80 et le port distant = <le port local du client>.

6voto

SchlaWiener Points 9682

Les clients choisissent généralement un port entre 1024 et 65535. La façon de gérer cela dépend du système d'exploitation. Je pense que les clients Windows incrémentent la valeur pour chaque nouvelle connexion, les clients Unix choisissent un numéro de port aléatoire.

Certains services dépendent d'un port client statique comme NTP (123 UDP).

0 votes

1024 et 65535 (pas 65536)

5voto

Konerak Points 22484

Il faut faire la distinction entre "écouter sur le port 80" et "se connecter au port 80".

Lorsque vous dites "les applications utilisent parfois HTTP pour envoyer des messages, car l'utilisation d'autres ports est susceptible de poser des problèmes de pare-feu", vous voulez en fait dire "les applications envoient parfois des messages sur le port 80".

Le serveur écoute sur le port 80, et peut accepter des connexions multiples sur ce port.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X