1、跨域
2、自定义请求头或请求头中的content-type是application/x-www-form-urlencoded,multipart/form-data,text/plain之外的格式
满足上面两点,浏览器就会在发送数据请求之前,先发送OPTIONS请求。
那跨域的项目,每次请求都会先发送OPTIONS请求,是不是很浪费宽带?影响性能?怎么优化?
我们可以在nginx
或后台项目中设置Access-Control-Max-Age
属性(单位为秒),以减少OPTIONS请求
在不同的浏览器中,Access-Control-Max-Age
的值会有所不一样,firefox
中为24小时 (即86400秒),chrome
中为10分钟(即600秒)
如果Access-Control-Max-Age
设置为-1
,则表示禁用缓存,每次都会在发送数据请求前,发送preflight
(即OPTIONS请求)
设置Access-Control-Max-Age
,并不代表全局就不发送OPTIONS
请求了,它是针对具体请求的一个局部属性,当设置Access-Control-Max-Age
后,我们请求/user/info
时,第一次还会发送OPTIONS
请求的,但第二次请求/user/info
时就不会发送OPTIONS
请求了,这就达到了优化的目的
贴一段nginx
代码吧
location / {
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' "http://test.imqianduan.com";
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
add_header 'Access-Control-Allow-Credentials' true;
add_header 'Access-Control-Max-Age' 86400;
return 200;
}
add_header 'Access-Control-Allow-Origin' "http://test.imqianduan.com";
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
add_header 'Access-Control-Allow-Credentials' true;
add_header 'Access-Control-Max-Age' 86400;
proxy_pass http://127.0.0.1:7001;
proxy_set_header Access-Control-Max-Age 86400;
proxy_set_header Host $host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 60;
proxy_read_timeout 60;
proxy_send_timeout 60;
}
MDN: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Access-Control-Max-Age
http或https不带www的域名301跳转到带www的URL
需要跨域的项目,很多时候每次都会发送OPTIONS请求,能不能优化呢?
win10下安装nginx,配置返向代理
以腾讯云为例,配置nginx,实现https访问
nginx设置二级域名指向子目录
发现ip访问比nginx快多了,知道nginx出问题了~ 得给他优化优化。优化后由原来的2.7s打开,到600ms打开~nginx优化还是有用的
通过nginx开启gzip设置
nginx服务端实现CORS跨域配置
今天想对一个问题进行分析和讨论,就是关于爬虫对网站页面爬取的问题,有些网站通过爬虫去采集其它的网站页面信息作为己用,大量的爬取行为会对web服务器有比较性能有影响,主要的表现就是会变得很慢。