从发请求到AJAX到同源政策
1 发请求的各种方法
- 使用form标签(会在当前页面刷新或者新开一个页面刷新)
<form action="" method=post/get> <input type="submit"> </form> - 使用a标签(会在当前页面刷新或者新开一个页面刷新)
<a id=x href="">click</a>
//让浏览器帮你自动点击
<script>x.click</script> - 使用image标签(只能以图片的形式展示)
- 使用link标签(只能以 CSS、favicon 的形式展示)
<script>
var link = document.createElement('link')
link.rel = 'stylesheet'
link.href = ' '
//必须要放到head中
document.head.appendChild(link)
</script> - 使用script标签(只能以脚本的形式运行)
<script>
var script = document.createElement('script')
script.src = ' '
//必须要放到head或者body中
document.head.appendChild(script)
</script> - 等其他几种
2 新的请求方式AJAX
- AJAX的产生
- 以上发请求的各种方法都有缺点,那么有什么方式可以实现无论什么请求都行,想用什么形式展示就用什么形式展示?
- IE5在JS中引入activeX对象(API),使 JS 可以直接发起 HTTP 请求(IE从IE6就开始骄傲堕落了。。)
- 随后 Mozilla、 Safari、 Opera 也跟进(抄袭)了,取名 XMLHttpRequest,并被纳入 W3C 规范(AJAX奠定了前端的基础)
- 什么是AJAX?
- AJAX(异步的JavaScript和XML)四个字母的含义(A:异步 J:JavaScript A:and X:XML)
- AJAX需要满足三个条件
- 使用 XMLHttpRequest 发请求
- 服务器返回 XML 格式的字符串
- JS 解析 XML,并更新局部页面(AJAX默认异步)
- 简单说就是用JS发请求用JS处理响应
- XML格式的字符串太麻烦了,目前使用JSON
- 什么是JSON?
- JavaScript Object Notation, JS 对象简谱,是一种轻量级的数据交换格式(抄袭JS的一门语言,是一门数据格式化语言)
- 和JS相比数据结构中没有抄袭undefined、function、symbol
- 和JS相比,JSON的字符串的首尾必须是双引号,格式如{""}(⚠️:JSON中用的都是双引号,没有单引号)
- 写一个AJAX
myButton.addEventListener('onclick',function(){
let request = new XMLHttpRequest()
request.open('GET','/xxx') //想怎么请求就怎么请求
request.send()
request.onreadystatechange=function(){
if(request.readyState === 4){
console.log('请求响应完毕了')
if(request.status >= 200 && request.status < 300){
//console.log('说明请求成功')
//console.log(request.responseText)
let string = request.responseText
//把符合JSON语法的字符串,转化成JS对应的值
//JSON.parse是浏览器提供的。document.getElementById也是浏览器提供的(也有很久以前用js自己写过叫json3.js)
let object = window.JSON.parse(string)
//console.log(object)
}else if(request.status >= 400){
//console.log('说明请求失败')
}
}
}
}) //题外话,怎么看一句执行用了多长的时间?
//console.time();
//var a=1;
//console.timeEnd(); //readyState的五种状态是(0、1、2、3、4)
//如果状态是4,表示整个请求过程已经完毕 - 用AJAX设置请求的四个部分
let request = new XMLHttpRequest() //第一部分:open('请求的方式','请求协议&Host')
request.open('GET','/xxx') //想怎么请求就怎么请求 //第二部分:request.setRequestHeader('设置的类型','设置的内容')
request.setRequestHeader('Content-Type','x-www-form-urlencoded') //第三部分是空格不用设置 //第四部分:request.send('第四部分内容')
request.send('第四部分') request.onreadystatechange=function(){} - 用AJAX获取响应的四个部分
request.onreadystatechange=function(){
if(request.readyState === 4){
console.log('请求响应完毕了') //响应的第一部分获取
console.log(request.status) //
console.log(request.statusText) //OK if(request.status >= 200 && request.status < 300){
console.log('说明请求成功') //所有响应的Header获取
console.log(request.getAllResponseHeaders()) //响应的第二部分获取
console.log(request.getResponseHeader(Content-Type)) //响应的第三部分是空格 //响应的第四部分获取
console.log(request.responseText) }
} - 响应的四个部分是在服务器的node.js里设置的
//如下为server.js中的代码
//path==='你的路径'
if(path === '/'){
//根据路径造一个字符串
let string = fs.readFileSync('./index.html', 'utf8')
//设置响应的第一部分。statusCode,200/400
response.statusCode = 200
//设置响应的第二部分
response.setHeader('Content-Type', 'text/html;charset=utf-8')
//设置响应的第四部分
response.write(string)
//然后结束
response.end()
}
3 同源政策
- 同源政策简单说就是:
- 是浏览器安全的基石(只要你不是不是某个页面的JS,就不能向这个页面发起AJAX请求(除了AJAX,其他的请求都可以))
- 起源:
- 1995年由 Netscape 公司引入浏览器。目前,所有浏览器都实行这个政策
- 目的:
- 是为了保证用户信息的安全,防止恶意的网站窃取数据。(因为AJAX可以读取浏览器响应的内容,如果没有同源政策的限制,就可以随便get、post,则互联网即没有隐私可言)
- 同源政策的内容:
- 随着互联网的发展,"同源政策"越来越严格。目前,如果非同源,共有三种行为受到限制。
- Cookie、LocalStorage 和 IndexDB 无法读取
- DOM 无法获得
- AJAX 请求不能发送。
- "同源"即"三个相同",只有 协议+端口+域名 一模一样才允许发 AJAX 请求
- 如:http://baidu.com 不可以向 http://www.baidu.com 发请求
- 如http://baidu.com:80 不可以向 http://baidu.com:81 发请求)
- 随着互联网的发展,"同源政策"越来越严格。目前,如果非同源,共有三种行为受到限制。
4 如何规避同源
- 向另一个协议+端口+域名不一样的网页发起请求
- 方法一:用JSONP (不能post)
- 方法二:用CORS(全称:跨源资源共享 Cross-Origin Resource sharing)
- 在后台加一句允许http://xxxx这个网站请求,如:response.setHeader('Access-Control-Allow-Origin','http://xxxx')
从发请求到AJAX到同源政策的更多相关文章
- 偷偷发请求的ajax
概述 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操作需要 ...
- 浏览器-同源政策(same-origin policy)
浏览器安全的基石是“同源政策”(same-origin policy). 1995年,同源政策由 Netscape 公司引入浏览器.目前,所有浏览器都实行这个政策. 何为同源? 协议相同 域名相同 端 ...
- 解决Ajax同源政策的方法【JSONP + CORS + 服务器端解决方案】
解决Ajax同源政策的方法 使用JSONP解决同源限制问题 jsonp是json with padding的缩写,它不属于Ajax请求,但它可以模以Ajax请求.\ 步骤 1.将不同源的服务器端请求地 ...
- Ajax中的同源政策
Ajax中的同源政策 Ajax请求限制 Ajax只能向自己的服务器发送请求.比如现在有一个A网站.有一个B网站,A网站中的HTML文件只能向A网站服务器中发送Ajax请求,B网站中的HTML文件只能向 ...
- ajax是怎么发请求的和浏览器发的请求一样吗?cookie
下午设置cookie时出现了个问题 用ajax发的post请求php,在php的方法里设置了cookie,然后在浏览器请求的php里打印cookie值但是一直获取不到cookie的值 分析: 1.aj ...
- 破解浏览器同源政策利器之JSONP
本文是在了解了浏览器的同源规则之后,学习了破解这个规则的一个简单有效的方法->JSONP.主要通过阮一峰老师的博客学习 浏览器的同源规则 有这样一个背景,如果你通过银行的网站进行的取钱的交易,而 ...
- JS实现的ajax和同源策略
一.回顾jQuery实现的ajax 首先说一下ajax的优缺点 优点: AJAX使用Javascript技术向服务器发送异步请求: AJAX无须刷新整个页面: 因为服务器响应内容不再是整个页面,而是页 ...
- Django【第24篇】:JS实现的ajax和同源策略
JS实现的ajax和同源策略 一.回顾jQuery实现的ajax 首先说一下ajax的优缺点 优点: AJAX使用Javascript技术向服务器发送异步请求: AJAX无须刷新整个页面: 因为服务器 ...
- PHP处理Ajax请求与Ajax跨域
PHP判断是否为Ajax请求 我们知道,在发送ajax请求的时候,可以通过XMLHttpRequest这个对象,创建自定义的header头信息, 在jquery框架中,对于通过它的$.ajax, $. ...
随机推荐
- PHP实现几秒前、几分钟前、几小时前、几天前
/** * @Description: 将时间转换为几秒前.几分钟前.几小时前.几天前 * @Author: Yang * @param $the_time 需要转换的时间 * @return str ...
- 08 Django组件-Forms组件
Django的Forms组件主要有以下几大功能: 页面初始化,生成HTML标签 校验用户数据(显示错误信息) HTML Form提交保留上次提交数据 一.小试牛刀 1.定义Form类 from dja ...
- 想要远程服务器长时间挂机不断开ssh连接的技巧
使用top命令挂着就好了,top命令执行的“查看系统进程和资源占用”的任务会一直输出动态的数据,一直有数据传输就不会因为长时间挂机而断开ssh链接了,尤其针对于海外服务器,因为高延迟经常出现挂机久了自 ...
- [luogu2319 HNOI2006] 超级英雄 (匈牙利算法)
传送门 Description 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目,只有当选 ...
- VMware无法安装故障总结
暂时遇到如下问题,并按此步骤可以解决,后续如有其它相关问题将继续更新: 1.无法获得 VMCI 驱动程序的版本: 句柄无效.如下图: 找到.vmx后缀配置文件 将如下白标""TRU ...
- 那么再会吧!OI!(HNOI2019退役记)
现在是4月7号7点. 退役了. 至此,整个LSOI17届全部毕业. 想说些什么呢?不知道啊. day1紧张过头,真正开始了解题意是在11点以后.半路忘了kmp怎么打,第一题计算几何根本没管,好啊,第三 ...
- 模型概念--MVC-MVVM
MVVM 第一个M是数据访问曾,第二个v是view视图页面,第三个vm是ViewModel视图模型
- POJ 1379
模拟退火算法. 随机MAX个点,然后,退火移动,选取距离所有点中最短中最长者即可.理解和我上一篇一样. #include <iostream> #include <cstdio> ...
- POJ 3130
这题,加了精度错了,不加精度反而对了... #include <iostream> #include <cstdio> #include <cstring> #in ...
- Android传统HTTP请求get----post方式提交数据(包括乱码问题)
1.模仿登入页面显示(使用传统方式是面向过程的) 使用Apache公司提供的HttpClient API是面向对象的 (文章底部含有源码的连接,包括了使用async框架) (解决中文乱码的问题.主要 ...