XHR

前端常见跨域解决方案

此生再无相见时 提交于 2020-12-19 06:37:14
什么是跨域? 跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。 广义的跨域: 1.) 资源跳转: A链接、重定向、表单提交 2.) 资源嵌入: <link>、<script>、<img>、<frame>等dom标签,还有样式中background:url()、@font-face()等文件外链 3.) 脚本请求: js发起的ajax请求、dom和js对象的跨域操作等 其实我们通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场景。 什么是同源策略? 同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。 同源策略限制以下几种行为: 1.) Cookie、LocalStorage 和 IndexDB 无法读取 2.) DOM 和 Js对象无法获得 3.) AJAX 请求不能发送 常见跨域场景 URL 说明 是否允许通信 http://www.domain.com/a.js http://www.domain.com/b.js 同一域名,不同文件或路径 允许 http://www.domain.com/lab/c

django 之 CSRF

孤街浪徒 提交于 2020-12-18 00:57:27
CSRF 即:(Cross-site request forgery)跨站请求伪造 , 是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。 django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。引入csrf_token的站点只有站点服务器自身可以解码 在settings.py中开启中间件: MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] 当开启该中间件时

前端压缩上传图片

梦想与她 提交于 2020-12-17 08:15:55
1 <! DOCTYPE html > 2 < html > 3 4 < head > 5 < meta charset ="UTF-8" > 6 < title > 前端压缩上传图片 </ title > 7 < script src ="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js" ></ script > 8 </ head > 9 10 < body > 11 < input type ="file" id ="picFile" onchange ="readFile(this)" /> 12 < img id ="img" src ="" alt ="" /> 13 < script > 14 function readFile(obj) { 15 var file = obj.files[ 0 ]; 16 // 判断类型是不是图片 17 if ( ! / image\/\w+ / .test(file.type)) { 18 alert( " 请确保文件为图像类型 " ); 19 return false ; 20 } 21 var reader = new FileReader(); 22 reader.readAsDataURL(file); 23 reader.onload = function (e) {

java web 之 AJAX用法

蹲街弑〆低调 提交于 2020-12-12 08:24:49
AJAX :Asynchronous JavaScript And XML 指异步 JavaScript 及 XML一种日渐流行的Web编程方式 Better Faster User-Friendly 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的 Web 应用程序的技术,是基于JavaScript、XML、HTML、CSS新用法。 呈上AJAX之父 Jesse James Garrett 大佬帅照, emmm 很有魔性的笑容~ AJAX交互模型 AJAX编码步骤 1、创建XmlHttpRequest对象 2、注册状态监控回调函数 3、建立与服务器的异步连接 4、发出异步请求 如下是一个搜索框提示的JavaScript函数写法 1 window.onload = function(){ 2 // 得到搜索框对象 3 var searchElement = document.getElementById( " name " ); 4 var div = document.getElementById( " context1 " ); 5 searchElement.onkeyup = function(){ 6 // 给文本框注册事件 7 var name = this .value; 8 if (name== "" ){ 9 div.style.display= "

Leetcode CLI小技巧

余生长醉 提交于 2020-12-11 01:54:11
简介 怎么神不知鬼不觉地刷leetcode,尤其在上班的时候?如何排除浏览器的干扰,只用terminal就可以认真练习leetcode编程?如果使用自己最爱的编辑器,而不是网页版做鸡的排版?你需要这么一款神奇的开源软件: Leetcode CLI。 下面贴上项目地址: https://github.com/skygragon/leetcode-cli 小技巧 cookie登陆 如果leetcode-cli的传统账号密码方式登陆出现问题,推荐使用cookie方式登陆leetcode-cli,免除一切烦恼。 这里给出chrome浏览器的方式: ctrl+shift+I进入浏览器Inspect模式 在chrome中打开leetcode网站 在右侧的Inspect选项卡中,点开network。然后再切换到XHR。接着在左侧Search中,填入uid,按Enter搜索 点开任意一项搜索到的cookie,复制长长的cookie字符串。(图片右下角的大片黄色一并复制) 进入命令行,登陆。 leetcode -c # 接下来依次填入账号和刚刚复制的cookie。 成功登录! 来源: oschina 链接: https://my.oschina.net/u/4385225/blog/4787096

原生Ajax的使用——含开放API接口

混江龙づ霸主 提交于 2020-12-04 07:17:39
看了两天关于Ajax的使用,总感觉云里雾里的。 故在此总结梳理一下,如果疏漏错误还请纠正支出。 Ajax能够在向服务器请求额外的数据时,不必重新加载/卸载整个页面,实现一小块区域性的刷新,也是常说的异步更新。 它的核心是XMLHttpRequest对象(简称XMR对象)。 从对服务器的请求到接受返回来的数据,可以从上图简单先了解一下。 第一步,先新建一个XHR对象 //这里新建一个XHR对象 var xhr; //如果你想兼容IE5的浏览器,那你必须先判断 if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); //比较常用的 } else { xhr = new ActiveXObject("Microsoft.XMLHTTP"); //兼容IE的写法 } 第二步,调用XHR对象的方法open()来初始化 open(); 有三个参数 第一个是method,请求的方式: "POST,GET..." 这两个比较常用 第二个是请求的URL,可以是绝对路径或者相对路径,当要遵循同域原则 第三个是true和false,true表示异步请求,false是同步请求。默认是true; xhr.open("GET","example.php",true); //这里只是初始化请求条件!并未发送请求 //这里发送了一次请求。 //send()

Django笔记

☆樱花仙子☆ 提交于 2020-12-01 02:47:14
python版本 3.+ Django version 1.0.1 一、Django基础 Django笔记: 1 、Django请求生命周期 -> URL对应关系(匹配) -> 视图函数 -> 返回用户字符串 -> URL对应关系(匹配) -> 视图函数 -> 打开一个HTML文件,读取内容 2 、创建django projcet django - admin startproject mysite .. mysite mysite - 配置文件 - url.py - settings.py cd mysite python manage.py startapp cmdb mysite mysite - 配置文件 - url.py - settings.py cmdb - views.py - admin.py - models.py # 创建数据库表 3 、配置 模板路径 静态文件路径 # CSRF 4 、编写程序 a. url.py /index/ -> func b. views.py def func(request): # 包含所有的请求数据 ... return HttpResponse( ' 字符串 ' ) return render(request, ' index.html ' , { '' }) retrun redirect( ' URL ' ) c.

接口测试——postman

强颜欢笑 提交于 2020-11-30 20:37:32
一、接口测试的准备工作 做接口测试之前需要有接口文档,请求参数,返回参数 二、使用postman进行接口测试 1.get请求 ①get请求可以直接在URL后面添加问号加参数,不需要使用工具来测试接口: ②将stu_name改成小黑 以上是单个参数的传参,如果是有多个参数的话,使用&来连接多个参数传参:url?name=小黑&sex=女&age=18 2.post请求 ①登录接口: 填写URL,请求方法;在body-->form-data里面填写参数以及value,根据接口说明文档判断返回的对错。 ② 注册接口 :填写URL,请求方法,在body-->form-data里面填写参数以及value。注册一个新的登录用户,然后看看注册的用户能否登录。 ③cookie a. 页面抓包 :浏览器输入https://qun.qq.com/member.html,点击右键--->检查--->network--->XHR,然后刷新页面就能抓到包了。 XHR---------代表发出去的接口的请求 ①get_group_list-------------获取群列表的接口;create---我创建的群;join--我加入的群;manager----我当管理员的群 ②get_friend_list----------获取好友的接口;0_99代表某个分组内的阶值。 ③search_group_member

全方位了解JavaScript实现项目对接短信验证码,Fetch、jQuery、XHR太实用了

£可爱£侵袭症+ 提交于 2020-11-26 15:03:47
短信验证码注册登录就是 验证用户提交的手机验证码, 如果验证码验证错误,就提示“验证码错误”,如果验证正确,那就进入到注册成功的页面。 这几天一直在研究 JavaScript 实现短信验证码注册登录的方法,主要是因为项目需求(现在好像几乎所有的项目都需要验证码注册登录),整理了三种对接方法,可供大家学习和参考: Fetch 方法 var myHeaders = new Headers(); myHeaders.append("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); var urlencoded = new URLSearchParams(); urlencoded.append("appId", "41KYR0EB****"); urlencoded.append("appKey", "IIWCKKSR7NOQ****"); urlencoded.append("phone", "1561894****"); urlencoded.append("templateId", "1043"); urlencoded.append("variables", "1234"); var requestOptions = { method: 'POST', headers: myHeaders,

Chrome 调试技巧

霸气de小男生 提交于 2020-11-03 05:40:55
源自:https://segmentfault.com/a/1190000016256731 alert 这个不用多说了,不言自明。 console 基本输出 想必大家都在用 console.log 在控制台输出点东西,其实console还有其它的方法: console.log("打印字符串"); // 在控制台打印自定义字符串 console.error("我是个错误"); // 在控制台打印自定义错误信息 console.info("我是个信息"); // 在控制台打印自定义信息 console.warn("我是个警告"); // 在控制台打印自定义警告信息 console.debug("我是个调试"); // 在控制台打印自定义调试信息 console.clear(); // 清空控制台(这个下方截图中没有) 注意上面输出的error和throw出的error不一样,前者只是输出错误信息,无法捕获,不会冒泡,更不会中止程序运行。 格式化输出 除此以外,console还支持自定义样式和类似c语言的printf形式: console.log("%s年", 2016); // %s表示字符串 console.log("%d年%d月", 2016, 11); // %d表示整数 console.log("%f", 3.1415926); // %f小数 console.log("%o