Apache日志分割
1.原因
1.随着网络的访问量的增加,默认情况下Apache的单个日志文件也会越来越大。
2.日志文件占用磁盘空间很大
3.查看相关信息不方便
2.对日志文件进行分割
1.Apache自带rotatelogs分割工具实现
2.第三方工具cronolog 分割
3.配置日志分割(我用的phpstudy)
ErrorLog "| rotatelogs命令的绝对工具 -| 日志文件路径/网站名-error_%Y%m%d.log 86400"
CustomLog "| rotatelogs命令路径 -| 日志文件路径/网站名-access_%Y%m%d.log 86400" combined
86400表示日志分割的时间间隔为1天,单位是秒。480是北京时间 +8小时的意思
Referer与XMLHttpRequest整理
Referer
Referer 是 HTTP 请求header 的一部分,当浏览器(或者模拟浏览器行为)向web 服务器发送请求的时候,头信息里有包含 Referer
例如,在www.csdn.cn 里有一个report.js,那么点击后,它的headers 里就有: Referrer Policy: strict-origin-when-cross-origin
url是report.js
状态是304,说明是临时缓存
禁用缓存以后
状态变成 200
Referrer Policy:strict-origin-when-cross-origin
referer一定程度上可以防御CSRF
防盗链的工作原理
通过Referer或者签名,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以追踪到显示它的网页地址 一旦检测到来源不是本站,即进行阻止或者返回指定的页面
绕过图片防盗链的方法
1.本网站。
2.无referer信息的情况。(服务器认为是从浏览器直接访问的图片URL,所以这种情况下能正常访问)
3.授权的网址。
1.3不太现实,只能从设置Referer入手
1.利用https网站盗链http资源网站,refer不会发送
只适用于旧版本的浏览器,https降为http 是一种非常不安全的行为,该操作浏览器会自动禁止。
虽然降级失败但是可以成功访问/src/img/1.jpg.因为referer为空且白名单命中了192.168.174.132:8080 字段
whiteList.indexof(referHostName) == 1 ,返回了正确的图
实际上能访问正确的图是依靠了白名单,而不是https降级.
2.设置head头
<meta name="referrer" content="no-referrer" />
3.设置referrerpolicy="no-referrer"
<img src = "aaaa" referrerpolicy="no-referrer">
4.用iframe来实现隐藏referer
构造了一个<iframe>标签,就相当与
id = frameimg加上一个随机数
src = https://tiebapic.baidu.com/forum/w%3D580%3B/sign=f88eb0f2cf82b9013dadc33b43b6ab77/562c11dfa9ec8a135455cc35b203918fa1ecc09c.jpg
<iframe id=frameimg.qa3w4es5tfg7y8hui src="javascript:parent.img" alt="图片加载失败,请稍后再试"/ >
5.利用XMLHttpRequest
XMLHttpRequest中[setRequestHeader方法,用于向请求头添加或修改字段.
XMLHttpRequest
XMLHttpRequest`对象是 AJAX 的主要接口,用于浏览器与服务器之间的通信。
JSON和XML的区别
1.JSON是JavaScript Object Notation;XML是可扩展标记语言。
2.JSON是一种表示对象的方式;XML是一种标记语言
3.JSON支持数组;XML不支持数组
4.XML的文件相对难以阅读和解释;与XML相比,JSON的文件非常易于阅读
5.JSON的安全性较低;XML比JSON更安全
6.JSON仅支持UTF-8编码;XML支持各种编码
7.JSON相对于XML来说, 数据的体积小,传递速度更快
XMLHttpRequest.readyState`返回一个整数,表示实例对象的当前状态。
- 0,表示 XMLHttpRequest 实例已经生成,但是实例的
open()
方法还没有被调用。 - 1,表示
open()
方法已经调用,但是实例的send()
方法还没有调用,仍然可以使用实例的setRequestHeader()
方法,设定 HTTP 请求的头信息。 - 2,表示实例的
send()
方法已经调用,并且服务器返回的头信息和状态码已经收到。 - 3,表示正在接收服务器传来的数据体(body 部分)。这时,如果实例的
responseType
属性等于text
或者空字符串,responseText
属性就会包含已经收到的部分信息。 - 4,表示服务器返回的数据已经完全接收,或者本次接收已经失败。