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到同源政策的更多相关文章

  1. 偷偷发请求的ajax

    概述 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操作需要 ...

  2. 浏览器-同源政策(same-origin policy)

    浏览器安全的基石是“同源政策”(same-origin policy). 1995年,同源政策由 Netscape 公司引入浏览器.目前,所有浏览器都实行这个政策. 何为同源? 协议相同 域名相同 端 ...

  3. 解决Ajax同源政策的方法【JSONP + CORS + 服务器端解决方案】

    解决Ajax同源政策的方法 使用JSONP解决同源限制问题 jsonp是json with padding的缩写,它不属于Ajax请求,但它可以模以Ajax请求.\ 步骤 1.将不同源的服务器端请求地 ...

  4. Ajax中的同源政策

    Ajax中的同源政策 Ajax请求限制 Ajax只能向自己的服务器发送请求.比如现在有一个A网站.有一个B网站,A网站中的HTML文件只能向A网站服务器中发送Ajax请求,B网站中的HTML文件只能向 ...

  5. ajax是怎么发请求的和浏览器发的请求一样吗?cookie

    下午设置cookie时出现了个问题 用ajax发的post请求php,在php的方法里设置了cookie,然后在浏览器请求的php里打印cookie值但是一直获取不到cookie的值 分析: 1.aj ...

  6. 破解浏览器同源政策利器之JSONP

    本文是在了解了浏览器的同源规则之后,学习了破解这个规则的一个简单有效的方法->JSONP.主要通过阮一峰老师的博客学习 浏览器的同源规则 有这样一个背景,如果你通过银行的网站进行的取钱的交易,而 ...

  7. JS实现的ajax和同源策略

    一.回顾jQuery实现的ajax 首先说一下ajax的优缺点 优点: AJAX使用Javascript技术向服务器发送异步请求: AJAX无须刷新整个页面: 因为服务器响应内容不再是整个页面,而是页 ...

  8. Django【第24篇】:JS实现的ajax和同源策略

    JS实现的ajax和同源策略 一.回顾jQuery实现的ajax 首先说一下ajax的优缺点 优点: AJAX使用Javascript技术向服务器发送异步请求: AJAX无须刷新整个页面: 因为服务器 ...

  9. PHP处理Ajax请求与Ajax跨域

    PHP判断是否为Ajax请求 我们知道,在发送ajax请求的时候,可以通过XMLHttpRequest这个对象,创建自定义的header头信息, 在jquery框架中,对于通过它的$.ajax, $. ...

随机推荐

  1. jQuery+pjax简单示例汇总

    pjax 是一个jQuery插件,它使用 ajax 和 pushState 来实现快速的浏览体验,包括真正的固定链接,页面标题和工作返回按钮. ajax缺点是破坏了浏览器的前进后退,因为ajax的请求 ...

  2. CorelDRAW关于使用鼠标的5个技巧分享

    CorelDRAW重度依赖者对快捷键和技巧性的操作爱不释手.本文我们介绍使用CorelDRAW关于鼠标操作的5个技巧,这是五种超快,非常有效,特别实用的技巧,如果每天的工作结合这些技巧的使用,效率会大 ...

  3. React Native未来导航者:react-navigation 使用详解

    该库包含三类组件: (1)StackNavigator:用来跳转页面和传递参数 (2)TabNavigator:类似底部导航栏,用来在同一屏幕下切换不同界面 (3)DrawerNavigator:侧滑 ...

  4. 安卓 九宫格 GridView 的表格布局

    首先,请大家理解一下“迭代显示”这个概念,这个好比布局嵌套,我们在一个大布局里面重复的放入一些布局相同的小布局,那些重复的部分是由图片和文字组成的小控件,图片在上方,文字在下方,之后我们只需要把这些小 ...

  5. 通俗易懂之SpringMVC&Struts2前端拦截器详解

    直接进入主题吧!一,配置Struts2的拦截器分两步走1配置对应的拦截器类:2在配置文件Struts.xml中进行配置拦截器同时在Strust2中配置拦截器类有三种方法1实现Interceptor接口 ...

  6. scrapy-redis 之处理异常

    今天心情不好 不想多打字 自己看注释吧 from scrapy.http import HtmlResponse from twisted.internet import defer from twi ...

  7. 利用perf排查sys高的问题

    思路 perf top perf record -C 44,48,60,63 -g -o a.data perf report -i a.data --call-graph 查看调用链,可以确定,基本 ...

  8. 使用tomcat搭建Jenkins环境(centos7.3)

    1.从官网下载最新版本的tomcat下载地址:https://tomcat.apache.org/2.Jenkins 官方网站下载最新版本war包Jenkins官网地址:http://jenkins- ...

  9. Docker理解与使用(转)

    2013年发布至今, Docker 一直广受瞩目,被认为可能会改变软件行业. 但是,许多人并不清楚 Docker 到底是什么,要解决什么问题,好处又在哪里?本文就来详细解释,帮助大家理解它,还带有简单 ...

  10. hdu 1384 查分约束

    #include<stdio.h> /* 要善于挖掘隐含条件 dis[v]-dis[u]>=bian[i].w;一个条件(u,v,bian[i].w); dis[i+1]>=d ...