如何获取通过套接字接收的数据的源 URL?

How do I get the source URL of the data being recv'd through a socket?

本文关键字:数据 URL 套接字 何获取 获取      更新时间:2023-10-16

我考虑过跟踪重定向,因为在我得到HTTP200 ok之前,它们会在标头中有下一个URL,然后我会有200的源的FQDN。

但我不认为浏览器是这样做的,我的代理可以对浏览器请求进行硬重定向,但浏览器在没有收到任何HTTP301的情况下显示重定向数据的正确URL。

我想知道浏览器是如何获取数据源的,然后在winsock中这样做的。任何人

无论浏览器做什么,它都不会从winsock层检索信息:套接字只在IP地址和端口中传输。我真的不太了解winsock(我是UNIX爱好者),但它似乎与UNIX套接字层非常相似,可以非常确定任何传输级别的信息都来自更高级别的抽象。如果您查看[OSI模型]{http://en.m.wikipedia.org/wiki/OSI_model}您可以看到winsocks正在寻址级别5,而您要查找的是级别7。API通常保持在相应的水平内。此视图似乎得到了[winsock FAQ]的支持{http://tangentsoft.net/wskfaq/intermediate.html#appproto}。

并非所有HTTP重定向都会导致URL更改。301重定向当然可以,但其他3xx重定向则不然。如果浏览器接收到除301之外的重定向,则它可以决定是继续显示原始URL还是显示新的重定向URL。

有一些方法可以在没有301的情况下重定向。还有302。有元素

<meta http-equiv="refresh" content="0; url=http://foo.com/">

最后,还有JavaScript:

<html><head><script language="javascript">    
window.location.href = "http://www.bar.com";
</script></head><body></body></html>
我的问题的Winsock解决方案是在connect()连接到远程连接后使用getpeername()函数。它应该返回IP:Port信息,我至少可以从中获取主机名。