我不清楚具体细节,但我很好奇,因为从这篇文章中我得知浏览器为每个选项卡使用了不同的端口网络浏览器是否对不同的标签使用不同的传出端口?
答案1
他们确实需要这些信息回复一下。
- TCP 连接的双方都知道彼此的 IP 地址,因为 IP 数据包头包含“源”地址和“目标”地址。
- 非常相似的是,双方都知道彼此的“本地”端口,因为 TCP 标头包含“源”端口和“目标”端口。
例如,当连接到 SuperUser 网络服务器时,它会看到您正在从 IP 地址 1.1.1.1 向 2.2.2.2、从 TCP 端口 34567 向 443 发送数据包,并且它对您的响应将具有相反的参数(即,它将从 TCP 端口 443 到达 34567)。
答案2
是的,网络堆栈等以及服务器内部需要知道如何发送响应以回复请求。
但是,这并不意味着服务器软件会将其(轻松或直接地)暴露给网站正在使用的编程语言/工具/库,或者如果存在的话,一方可以访问和使用其中的任何一个(想想普通的静态 HTML 网站......它们仍然存在)。
以下是 Apache 实例上 PHP 数组内容的示例$_SERVER
。您可以在其中看到远程 IP、端口等,以及其他一些有趣的内容...请注意,每个服务器软件可能会使用不同的名称或不同的方法来公开相同的信息...
Array
(
[HTTPS] => on
[SSL_TLS_SNI] => example.com
[HTTP_HOST] => example.com
[HTTP_CONNECTION] => keep-alive
[HTTP_CACHE_CONTROL] => max-age=0
[HTTP_UPGRADE_INSECURE_REQUESTS] => 1
[HTTP_USER_AGENT] => Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36
[HTTP_DNT] => 1
[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
[HTTP_ACCEPT_ENCODING] => gzip, deflate, br
[HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.9,da;q=0.8
[PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[SERVER_SIGNATURE] =>
Apache/2.4.18 (Ubuntu) Server at example.com Port 443
[SERVER_SOFTWARE] => Apache/2.4.18 (Ubuntu)
[SERVER_NAME] => example.com
[SERVER_ADDR] => 45.56.125.54
[SERVER_PORT] => 443
[REMOTE_ADDR] => 174.131.63.212
[DOCUMENT_ROOT] => /var/www-example.com
[REQUEST_SCHEME] => https
[CONTEXT_PREFIX] =>
[CONTEXT_DOCUMENT_ROOT] => /var/www-example.com
[SERVER_ADMIN] => [email protected]
[SCRIPT_FILENAME] => /var/www-example.com/req.php
[REMOTE_PORT] => 32906
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => GET
[QUERY_STRING] =>
[REQUEST_URI] => /req.php
[SCRIPT_NAME] => /req.php
[PHP_SELF] => /req.php
[REQUEST_TIME_FLOAT] => 1561248971.904
[REQUEST_TIME] => 1561248971
)