HttpRequest.Referer怎么设置
时间: 2024-10-16 15:14:23 浏览: 164
HttpRequest.Referer是一个HTTP头字段,它包含了从上一个请求到当前请求的URL。在Web开发中,特别是在处理跨域资源共享(CORS)时,服务器可能会检查这个字段来确定请求是否来自可信来源。
如果你想在.NET Framework或ASP.NET中设置HttpRequest.Referer,你可以这样做:
```csharp
using System.Net;
using System.Web;
// 获取当前的HttpWebRequest实例
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://your-target-url.com");
// 如果有需要,可以手动设置Referer header
request.Referer = "http://previous-url.com"; // 上一个页面的URL
// 发送请求
WebResponse response = request.GetResponse();
```
注意,浏览器通常会在发送请求时自动填充Referer,但在某些情况下(如隐私设置、同源策略限制等),你可能无法直接控制或获取这个值。
相关问题
httpRequest默认header
### HTTP 请求默认 Header 的详细解析
HTTP 请求中的 Headers 是客户端与服务器之间通信的重要组成部分,用于传递元数据信息。虽然具体的默认 Headers 可能因浏览器或工具的不同而有所差异,但通常情况下,以下是一些常见的默认 Headers:
#### 1. **General (通用头部)**
这些 Headers 提供关于请求的基本信息。
- `Host`: 表示目标资源所在的主机和端口号。例如,在访问 `https://www.example.com` 时,默认会发送 `Host: www.example.com`[^3]。
- `Connection`: 控制网络连接的行为。常见值有 `keep-alive` 和 `close`。现代浏览器一般设置为 `keep-alive` 来保持持久连接[^2]。
- `User-Agent`: 客户端的身份标识符,描述发起请求的应用程序的信息(如浏览器版本、操作系统等)。例如:`Mozilla/5.0 (Windows NT 10.0; Win64; x64)`。
#### 2. **Cache Control (缓存控制头部)**
这些 Headers 主要涉及缓存机制。
- `Accept-Encoding`: 告知服务器客户端支持的内容编码方式,比如 gzip 或 deflate。这有助于减少传输的数据量。例如:`Accept-Encoding: gzip, deflate`。
- `If-Modified-Since / If-None-Match`: 当前页面已缓存的情况下,通过这两个字段询问服务器是否有更新内容。如果没有变化,则返回状态码 304 Not Modified 而不重新下载整个文档。
#### 3. **Security and Privacy (安全性和隐私保护相关的头部)**
- `Referer`: 记录当前请求是从哪个URL跳转过来的。这对于分析流量来源很有帮助,但也可能带来一定的隐私风险。如果启用了 `Referrer-Policy`, 则可以根据策略决定是否发送 referer 信息。例如:`Referrer Policy: no-referrer-when-downgrade` 表明当协议降级到非 HTTPS 链接时不携带 referrer 数据。
- `Sec-Fetch-*` 系列: 新一代的安全增强型 headers,包括 Sec-Fetch-Dest、Sec-Fetch-Mode、Sec-Fetch-Site 和 Sec-Fetch-User。它们提供了更细粒度的操作意图说明以及跨站点行为指示器。
#### 4. **Content Negotiation (内容协商头部)**
- `Accept`: 描述了客户端能够处理或者期望接收回来的内容类型列表及其优先顺序。例如:`text/html,application/xhtml+xml;q=0.9,*/*;q=0.8` 表达的是首选 HTML 文档,其次是 XHTML,最后才是其他任何形式的内容。
- `Accept-Language`: 显示用户的语言偏好设定,从而让服务端提供相应本地化的响应体。例如:`en-US,en;q=0.5` 意味着美国英语是最优选项,但如果不可得的话也可以接受普通的英文版本。
需要注意的是,上述提到的所有默认 Headers 并不会自动出现在每一个单独发出的 httpRequest 中;实际包含哪些取决于具体场景需求以及所使用的库或框架配置情况。另外值得注意的一点是,对于 XMLHttpRequest 对象而言,某些特定类型的 headers 如 Authorization 不会被加入到默认集合里去除非显式指定[^1]。
```javascript
// 设置自定义 header 示例
var xhr = new XMLHttpRequest();
xhr.open('GET', '/example');
xhr.setRequestHeader('Authorization', 'Bearer token-value'); // 此处需手动添加 authorization header
xhr.send();
```
如果其他网站引用本网站的资源比如图片,将会显示一个非法访问信息的提示网页;只有在本站的网页引用时,图片才会正常显示。设计并实现一个防盗链过滤器及其工作过程,在图片显示之前对request进行验证;假如在浏览器地址栏中输入“http://localhost:8080/images/1.jpg”直接访问图片时,过滤器将拦截并阻止访问,将请求跳转到显示一个非法访问信息的提示网页;在浏览器地址栏中输入“http://localhost:8080/images/image.jpg”站内访问图片时,能够显示图片。 (提示:想知道用户是从什么页面链接过来的,要用到referer。它是http协议,在JSP中采用如下方法获得: request.getHeader("referer"); 然后,通过refererr.contains(request.getServerName())语句判断是否本网站内的请求。)
1. 创建一个过滤器类 MyFilter,实现 javax.servlet.Filter 接口。
```
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化方法
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 过滤方法
}
@Override
public void destroy() {
// 销毁方法
}
}
```
2. 在 doFilter 方法中,判断请求是否来自本站。如果是本站请求,直接放行;否则,跳转到非法访问提示页面。
```
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String referer = httpRequest.getHeader("referer");
if (referer != null && referer.contains(request.getServerName())) {
// 来自本站的请求,直接放行
chain.doFilter(request, response);
} else {
// 非法访问,跳转到提示页面
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/illegalAccess.html");
}
}
```
3. 在 web.xml 文件中配置过滤器。
```
<filter>
<filter-name>myFilter</filter-name>
<filter-class>com.example.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/images/*</url-pattern>
</filter-mapping>
```
4. 在项目根目录下创建 illegalAccess.html 文件,用于显示非法访问提示信息。
这样,当用户直接访问图片时,会被 MyFilter 拦截,并跳转到非法访问提示页面;而当用户从本站页面链接过来时,可以正常显示图片。
阅读全文
相关推荐















