Comment je peux obtenir de l'origine de la demande avec PHP?
Si quelqu'un envoyer XHR demande de some-client.com
à some-rest.com
, je veux obtenir de l'origine(nom de domaine, pas l'ip du client) de la demande avec PHP.
Les solutions possibles:
- Peut-être que je peux utiliser
$_SERVER['HTTP_ORIGIN']
mais je ne sais pas si c'est une norme. - Je vois un autre en-tête comme
$_SERVER['HTTP_HOST']
ou$_SERVER['SERVER_NAME']
, mais certains cas, ce retour au réelhostname
et non de la vraiedomain
. - Et
$_SERVER['REMOTE_ADDR']
donne l'IP du client.
Ce est la bonne façon d'obtenir de l'origine de la demande comme un nom de domaine avec PHP?
Merci!
- De ce que je sais,
$_SERVER['REMOTE_ADDR']
est votre solution, vous pouvez seulement obtenir l'adresse IP pas le DNS
Vous devez vous connecter pour publier un commentaire.
Conformément à l'article HTTP de contrôle d'accès (SCRO) par MDN:
Toutes les demandes doivent être mis en
Origin
- tête pour fonctionner correctement sous la SCRO(Cross-origin resource sharing) mécanisme.La "Origine" en-tête de requête est une partie de RFC 6454 et décrit comme faisant partie de la SCRO mécanisme et est compatible avec tous les navigateurs, selon le MDN.
Description par MDN:
Exemple par MDN:

Donc, pour obtenir de l'origine de la demande XHR avec PHP, vous pouvez utiliser:
Et, dans le cas d'une demande directe, vous pouvez combiner
HTTP_REFERER
etREMOTE_ADDR
comme:Donc, la possible solution finale est:
MDN est Mozilla Developer Network.
Merci beaucoup pour la help @trine, @waseem-béchir, @p0lt10n, et d'autres personnes.
en php, vous pouvez obtenir de l'aide de la variable $_SERVER['HTTP_REFERER'].
si vous utilisez codeigniter ensuite, vous pouvez obtenir le référent en utilisant $this->agent->is_referral().
Nous allons discuter ci-dessus
$_SERVER
paramètres.D'abord, XHR est à côté de client et il est borné par un client http. En tant qu'Origine et Referer en-têtes ne sont pas obligatoires, un client autre qu'un navigateur web standard ne définit pas qui. Prochain en-tête d'Hôte peut ne pas être obligatoire. Si votre REPOS serveur utilise des hôtes virtuels, cet en-tête est un must pour acheminer les demandes correctement. Mais cet en-tête n'a pas de détails sur le client. Seule chose d'unique pour le client http est IP Publique. Mais cela correspond à de nombreux clients en tant que FAI, utilisation de l'adresse réseau des traductions ou des mandataires.
Puisque tout est relatif et à l'intérieur de limites, De la SCRO les mécanismes sont construits sur HTTP en-tête d'Origine. Les Clients sont prises en compte et conseillé d'utiliser les navigateurs web standard.
Dans votre cas, mon avis est que c'est OK pour dépendent de l'en-tête d'Origine. Vous pouvez mettre en œuvre De la SCRO mécanisme si elle convient pour vous.