在互联网开发中,了解和使用HTTP请求头中的“Referer”字段是一种常见的需求。"Referer"(注意拼写错误,正确的应为"Referrer")头字段用于指示请求是从哪个页面发起的。在服务器端和客户端脚本中获取这个值可以帮助开发者分析用户来源、阻止未授权的链接访问等多种场景。
### JavaScript中获取页面的referer
在JavaScript中,可以通过全局对象`document`的`referrer`属性来获取当前页面的Referer。这个属性返回的是用户从哪个页面通过链接跳转到当前页面的URL。如果用户直接访问当前页面,而不是通过链接跳转,则`document.referrer`可能为空。
JavaScript代码示例:
```javascript
function get_http_referer(ishost) {
if (ishost === undefined) { ishost = true; }
if (document.referrer) {
return document.referrer;
} else {
if (ishost) {
return window.location.protocol + "//" + window.location.host;
} else {
return "";
}
}
}
```
上述代码中的`get_http_referer`函数接受一个布尔参数`ishost`,用于决定在`document.referrer`为空时是否返回当前网站的根地址(首页地址)。如果`ishost`为`true`并且`document.referrer`为空,则返回当前页面的协议和域名;如果`ishost`为`false`,则返回空字符串。
### C#中获取页面的referer
在***等服务器端应用程序中,可以使用`Request`对象来获取HTTP请求的详细信息。`Request.UrlReferrer`属性用于获取客户端发起请求时的URL地址。如果当前请求中不存在Referer头,则该属性为`null`。同时,`Request`对象提供了丰富的属性和方法用于处理和获取URL的不同部分,例如:
- `Request.UrlReferrer`: 返回发起请求的完整URL。
- `Request.Url`: 返回当前请求的URL对象。
- `Request.Url.Authority`: 包含主机名和端口(如果有的话)。
- `Request.Url.LocalPath`: 返回请求的本地路径。
- `Request.Url.Query`: 返回查询字符串部分。
C#代码示例:
```csharp
public string GetReferer(bool ishost) {
if (Request.UrlReferrer != null) {
return Request.UrlReferrer.ToString();
} else {
if (ishost) {
return Request.Url.Scheme + "://" + Request.Url.Authority;
} else {
return "";
}
}
}
```
这段C#代码实现了与JavaScript类似的逻辑,用于在`Request.UrlReferrer`为空的情况下根据参数`ishost`决定返回全地址还是空字符串。
### 获取URL的各个部分
在C#的***应用中,可以使用`Request`对象的许多属性来获取URL的不同部分。例如,`Request.ApplicationPath`和`Request.PhysicalPath`分别提供应用程序的相对路径和服务器上的物理路径。`Request.Url`提供了请求的URL对象,从中可以进一步获取Scheme(协议)、Host(主机)、Port(端口)、Authority(授权信息)、LocalPath(本地路径)、AbsolutePath(绝对路径)、PathAndQuery(路径和查询字符串组合)和Query(查询字符串)等信息。
此外,`Request`对象还提供了`PathInfo`属性,表示请求URL路径中在虚拟路径后缀之后的部分;`Segments`属性返回URL路径的各个部分,如示例中的`/News/`、`Press/`和`Content.aspx/123`。
通过以上方式,无论是客户端还是服务器端,都可以根据具体需求获取到HTTP请求中的Referer信息,进一步用于日志分析、访问控制、流量统计等开发场景。