关于Http请求header之Referer讲解

刚好把手机银行嵌入办事通的项目写完,该项目http请求较多,期间遇到了不少坑,也学到了不少东西,趁这个机会,简单梳理下!

13566833-b9a0801e8f65e173.png

Http常见请求方式.png

图为http常见的请求方式,经常使用的,就是POST和GET,二者的区别,这里也不多做介绍。项目大致是这样的,提供接口给手机银行,获取请求参数:
request.getQueryString()方法即可取得参数相关信息,随机访问办事通提供的三个接口,最初定的接口,使用https协议,但办事通无法提供CA证书,后放弃(上一篇有提到过,无法绕过ssl验证)

#TO_DO_QRY_URL=https://zwfw.yn.gov.cn/******00003
#TO_DO_LOGIN_URL=https://zwfw.yn.gov.cn/******11002
#TO_DO_QRYLIST_URL=https://zwfw.yn.gov.cn/******05001

随后办事通提供了另外接口,采用http协议:

#TO_DO_QRY_URL=http://ip:port/******00003
#TO_DO_LOGIN_URL=http://ip:port/******11002
#TO_DO_QRYLIST_URL=http://ip:port/******05001

采用Http发个简单Post请求,即可获取相应数据,测试环境很快调试完毕上线,上了生产,发现无论怎么都取不到数据。联系了办事通技术人员,打印了http请求头header,说请求头得有Referer,以前只是知道有这么个东西,但不知道具体有什么用,今天就简单说说。

connection.setRequestProperty("Referer", "url");

加了这么一句话,请求OK了。那么,Referer是什么东西?
Referer是HTTP请求Header的一部分,当浏览器向Web服务器发送请求的时候,请求头信息一般需要包含Referer。该Referer会告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。

13566833-e3f83f36fe64908f.png

Referer解释说明.png

Referer作用是什么?
1)防盗链
比如办事通服务器只允许网站访问自己的静态资源,那服务器每次都需要判断Referer的值是否是zwfw.yn.gov.cn,如果是就继续访问,不是就拦截。

2)防止恶意请求
比如静态请求是.html结尾的,动态请求是.shtml,那么所有的*.shtml请求,必须 Referer为我自己的网站才可以访问,这就是Referer的作用。

空Referer是怎么回事?
空Referer是指Referer头部的内容为空,或者,一个HTTP 请求头中根本不包含Referer,那么什么时候HTTP请求会不包含Referer字段呢?
根据Referer的定义,它的作用是指示一个请求是从哪里链接过来,那么当一个请求并不是由链接触发产生的,那么自然也就不需要指定这个请求的链接来源。

比如,直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含Referer字段的,因为这是一个“凭空产生”的HTTP请求,并不是从一个地方链接过去的。

在防盗链设置中,允许空Referer和不允许空Referer有什么区别?
允许Referer为空,意味着你允许比如浏览器直接访问,就是空。

页面添加Referer元素需要使用meta referrer标签:

1、None:绝不允许referrer data通过
标签写法:<meta name="referrer" content="none">

2、None When Downgrade:发送referrer信息去安全的HTTPS站点,而非不稳定的HTTP站点。
标签写法:<meta name="referrer" content="none-when-downgrade">

3、Origin Only: 发送协议、主机和端口(即子域)没有一个完整的URL作为来源,
即https://moz.com/example.html只会发送https://moz.com
标签写法:<meta name="referrer" content="origin">

4、Origin When Cross-Origin: 当传origin-only来路信息发送给外部站点时,如果目标有相同的协议、主机和端口(即子域),无论它是HTTP或HTTPS,都将全部的URL作为Referrer发送出去。(注解:官方说明书上有一处排印错误,将来的版本应该是"origin-when-cross-origin")
标签写法:<meta name="referrer" content="origin-when-crossorigin">

5、Unsafe URL: 总是将URL字串作为一个referrer通过。
注意:如果你的URL中存在任何敏感信息,这不是最安全的选择。其中URL的片段、用户名、密码被自动剥去。
标签写法:<meta name="referrer" content="unsafe-url">

补充说明: Referer的正确英语拼法是referrer 。由于早期HTTP规范的拼写错误,为了保持向后兼容就将错就错了。其它网络技术的规范企图修正此问题,使用正确拼法,所以目前拼法不统一,还有它第一个字母是大写。

Nginx 是一款高性能、开源、轻量级的 Web 服务器软件,它能够提供静态资源服务、反向代理、负载均衡等多种功能。在本文中,我们将为您详细介绍 Nginx 的配置文件以及常用的配置选项。 ## 配置文件 Nginx 的配置文件通常存放在 /etc/nginx/nginx.conf 中。该文件由多个指令块组成,每个指令块由花括号括起来。以下是一个简单的 Nginx 配置文件示例: ``` user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; gzip on; gzip_disable "msie6"; include /etc/nginx/conf.d/*.conf; } ``` 配置文件由三个指令块构成:user、events 和 http。user 指令块用于设置 Nginx 进程的用户和组,events 指令块用于配置 Nginx 的事件模型(例如 worker_connections),http 指令块则包含了所有 HTTP 相关的配置。 ## 配置选项 以下是一些常用的 Nginx 配置选项: ### worker_processes 用于指定 Nginx 进程的数量。通常情况下,该选项的值应该设置为 CPU 核心数的两倍。 ``` worker_processes auto; ``` ### worker_connections 用于指定每个 Nginx 进程可以同时处理的连接数。 ``` events { worker_connections 1024; } ``` ### access_log 和 error_log 用于指定访问日志和错误日志的路径。 ``` access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log; ``` ### sendfile、tcp_nopush 和 tcp_nodelay 用于优化文件传输性能。 ``` sendfile on; tcp_nopush on; tcp_nodelay on; ``` ### keepalive_timeout 用于指定客户端与服务器之间的 Keep-Alive 连接的超时时间。 ``` keepalive_timeout 65; ``` ### gzip 和 gzip_disable 用于开启 Gzip 压缩和禁用某些浏览器的 Gzip 支持。 ``` gzip on; gzip_disable "msie6"; ``` ### include 用于包含其他配置文件。 ``` include /etc/nginx/conf.d/*.conf; ``` ## 反向代理 Nginx 的反向代理功能可以将请求转发到其他服务器上。以下是一个简单的反向代理配置示例: ``` http { server { listen 80; server_name example.com; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } ``` 该配置将来自 example.com 的请求转发到本地的 8080 端口上。 ## 负载均衡 Nginx 的负载均衡功能可以将请求分发到多个服务器上,从而提高系统的可用性和性能。以下是一个负载均衡配置示例: ``` http { upstream backend { server backend1.example.com; server backend2.example.com; server backend3.example.com; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } ``` 该配置将来自 example.com 的请求分发到 backend1.example.com、backend2.example.com 和 backend3.example.com 三个服务器上。 ## 静态资源服务 Nginx 可以用于提供静态资源服务,例如 HTML、CSS、JS、图片等。以下是一个静态资源服务配置示例: ``` http { server { listen 80; server_name example.com; root /var/www/example.com; location / { index index.html; } } } ``` 该配置将来自 example.com 的请求映射到 /var/www/example.com 目录下,并通过 index.html 文件提供服务。 ## 总结 本文介绍了 Nginx 的配置文件和常用的配置选项,以及反向代理、负载均衡和静态资源服务的配置实例。对于刚开始接触 Nginx 的开发人员来说,这些知识点都是必须掌握的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值