Передаёт ли Apache на PHP ли явный запрос на порт (: 80)?

Не имеет значения, запрашивался ли ресурс через mydomain.com ИЛИ mydomain.com:80 (каким образом некоторые боты/пауки делают запросы): HTTP_HOST всегда отображается как "mydomain.com", и нет возможности для PHP чтобы узнать, включает ли запрос: 80 (2). Это заставляет меня думать, что Apache передает тот же запрос PHP, установлен ли порт или нет (это имеет смысл).

Проблема: у меня установлен агент NewRelic PHP на этом компьютере, и он сообщает службе NewRelic через PHP auto_prepend_file, используемый для обозначения приложений отдельно (1), как mydomain.com, так и mydomain.com:80. Эти два являются одним и тем же приложением, отображаемым под двумя разными именами в панели управления NewRelic, что нежелательно.. Поскольку имя приложения задано через PHP, как mydomain.com:80 можно передать в API NewRelic, когда в настройке кода имя не может даже увидеть, явно ли задается запрос: 80? Поддержка NewRelic сообщает мне, что мой код передает: 80 в свой API, и это просто невозможно (2). Проходит ли Apache к PHP, был ли явным образом запрошен порт (: 80)?

1), если я не использую этот файл, каждый vhost на сервере будет сообщать под тем же общим именем "PHP Application"

2) SERVER_PORT всегда будет 80, независимо от того, явно ли он вызывается или нет (если, конечно, это https или нестандартный запрос порта, что не является тем, что обсуждается здесь). Другими словами, я не могу использовать SERVER_PORT для фильтрации запросов, которые явно определены в явном виде, потому что, если запрос имеет или не имеет явно определенного порта, он невидим для PHP.

Apache 2.2.15, mod_fcgid 2.3.7, PHP 5.3.3, Linux 2.6.32.60-40 x64, CentOS 6.4

Ответ 1

Браузеры и завиток будут удалять: 80 из заголовка хоста, если запрошенный порт является стандартным (порт 80). Поскольку я не тестировал, используя GET, выпущенную вручную, я не видел, как $_SERVER ['HTTP_HOST'] включает номер порта. Я обнаружил, что он делает, КОГДА порт включен в заголовок хоста (что имеет смысл, поскольку manual указывает, что $_SERVER ['HTTP_HOST'] является "содержимым заголовка Host: от текущего запроса, если он есть".)

В разделе 14.23 спецификации HTTP указано, что порт # должен быть включен в запрос, если он не является портом по умолчанию 80. Но он не говорит, будет ли это нормально или не включать номер порта, когда используемый порт используется по умолчанию.

В моем случае запросы, которые включают номер порта, даже при использовании порта по умолчанию, взяты из Baidu Spider.

Если вам нужно это сделать самостоятельно, вам необходимо выпустить ручной запрос GET. Используйте Netcat или Telnet для отправки этих команд:

$ telnet www.host.com 80
GET /host.php HTTP/1.1
Host: www.host.com:80
Connection: close

(добавьте два CRLF в конце)

Ответ 2

HTTP_HOST - это буквально только имя хоста, например. www.example.com сайта, к которому вы обращаетесь. Если вам нужен номер порта, к которому пришел запрос, тогда $_SERVER['SERVER_PORT']