数据交互的四种方式/表单实现/AJAX 原理与原生GET方式请求的实现/跨域

数据交互

1. 表单---最简单、最基本的、HTTP所有的数据请求都是表单
2. ajax---最常用的、不用刷新页面;默认不可跨域提交,可以使用CORS进行跨域
3. JSONP---常用来跨域,因为安全性太差基本被淘汰
4. WebSocket---性能比ajax高、速度快、双向、可跨域
    ajax是单向的:浏览器向服务器发送请求、默认不可以跨域
    WebSocket是双向的:浏览器与服务器之间可以相互发送请求、默认可以跨域

表单

    //当用户网络环境比较差时,表单提交的成功率比AJAX要好
    <form action="" method="get/post">
        <input type="text" name="" value="">//提交的数据,根据name
        <input type="submit" >//提交
    </from>

document.querySelectorAll 与 document.querySelector

    //语法:elementList = document.querySelectorAll(selectors); 
        1. elementList 是一个静态的 NodeList 类型的对象.
        2. selectors 是一个由逗号连接的包含一个或多个CSS选择器的字符串.
    //下面的例子返回了HTML文档中的body元素的所有p后代元素:
        var matches = document.body.querySelectorAll('p');
    //下面的例子返回了id为'test'的元素的所有class属性为'highlighted'的所有div后代元素的p子元素:
        var el = document.querySelector('#test');
        var matches = el.querySelectorAll('div.highlighted > p');
    //手动写$用法的两种方式
        const $ = function(...args){
            return document.querySelectorAll(...args)
        }
    //第二种需要将this绑定在document上;
        const $ = document.querySelectorAll.bind(document);

AJAX 原理与原生GET方式请求的实现

    //AJAX 请求与表单的请求是一样的效果。
    //AJAX 常用写法 
        $.ajax({
            url:'1.php',//1.php内容<?php echo $_GET['a']+$_GET['b']; ?>
            data:{a:12,b:5},
            type:'get',
            dataType:'text',
            success(str){
                alert(str)
            },
            error(){
                alert("失败")
            },
            finish(){
                //无论成功失败只要AJAX完成就走这个方法。
            }
        }); 
    //AJAX实现
        if(window.XMLHttpRequest){
            var xhr = new XMLHttpRequest();//不兼容IE6 此时状态码为0:初始化
        }else{
            var xhr = new ActiveXObject('Microsoft.XMLHttp');//兼容IE6
        }
    //开启连接
        xhr.open('get','1.php?a=4&b=6',true);//连接方法、URL、true开启异步,false关闭异步,此时状态码为1:已连接
    //发送数据
        xhr.send();//post请求的情况下,此处参数为请求体里的内容。本demo中用的get请求,数据应当在URL中,所以此处没参数。
    //接受
        xhr.onreadystatechange = function (){
            var state = xhr.readyState);//xhr.readyState 0:初始化;1:已连接;2:已发送;3:已接收-头信息;4:已接收-体信息
            if(xhr.readyState==4){
                alert(xhr.status)//HTTP状态码;1xx:消息;2xx:成功;3xx:重定向;4xx:客户端错误;5xx:服务器错误;6+:扩展状态;
                if(xhr.status>=200&&xhr.status<300||shr.status==304){
                    alert("成功"+xhr.responseText);//返回的文本;JSON需要自己去解析,responseXML,返回的XML数据;
                }else{
                    alert("失败")
                }
            }
        }

扩展

跨域

只要域名、端口、协议(http与https),有一个不同就会产生跨域。
常用的跨域解决方案:表单、AJAX、jsonp、WebSocket

http前世今生

http0.9
    HTTP 0.9是第一个版本的HTTP协议,确定了HTTP是无状态通信,已过时。
    它的组成极其简单,只允许客户端发送GET这一种请求,且不支持请求头。
    由于没有协议头,造成了HTTP 0.9协议只支持一种内容,即纯文本。
    不过网页仍然支持用HTML语言格式化,同时无法插入图片。
http1.0
    新增如下功能:
    请求与响应支持头域
    响应对象以一个响应状态行开始
    响应对象不只限于超文本
    开始支持客户端通过POST方法向Web服务器提交数据,支持GET、HEAD、POST方法
    支持长连接(但默认还是使用短连接),缓存机制,以及身份认证
http1.1
    是目前使用最广泛的协议版本。HTTP 1.1 所有的连接默认都是长连接。
    允许HTTP设备在事务处理结束之后将TCP连接保持在打开的状态,
    以便未来的HTTP请求重用现在的连接,直到客户端或服务器端决定将其关闭为止。
    在GET、POST请求之外新增加了OPTIONS,PUT, DELETE, TRACE, CONNECT方法。
http2.0    
    下一代版本,主要功能有
    强制HTTPS、自带双相通信、多路复用
http协议
    基本的互联网通信协议都有在RFC文件内详细说明,所以任何一个协议都是RFC
    http是RFC 2016  
    原文地址:https://datatracker.ietf.org/doc/rfc2616/?include_text=1
    https是RFC 2818

GET与POST

get请求发送在请求头中,有大小限制,有缓存,当链接会被分享、收藏时,用get请求(例如淘宝购物页面)
post请求发送在请求体中,无大小限制,没有缓存

TCP协议与UDP协议

TCP协议--传输控制协议
    该协议保证数据传输到达,保证质量,保证顺序。
    应用场景:对质量要求高,对实时性要求不高的需求(HTTP协议通常基于TCP协议)
UDP协议--用户数据报协议
    该协议不保证数据传输到达,不保证质量,不保证顺序。
    应用场景:对质量要求不高,对是实时性要求高的需求,(IP电话、视频直播)

OSI七层交换"参考"模型

实际为五层模型,表现层与会话层不实际存在

  1. 物理层 建立、维护、断开物理连接。
  2. 链路层 建立逻辑连接、进行硬件地址寻址、差错校验等功能。例如ARP、ICMP协议
  3. 网络层 进行逻辑地址寻址,实现不同网络之间的路径选择。 例如IP协议
  4. 传输层 负责通信稳定性,定义传输数据的协议端口号,以及流控和差错校验。 例如TCP协议
  5. 表现层 (×五层模型中合并到应用层)数据的表示、安全、压缩。
  6. 会话层 (×五层模型中合并到应用层)建立、管理、终止会话。
  7. 应用层 处理应用细节,网络服务与最终用户的一个接口。 例如 HTTP协议

HTTP状态码

1xx:消息;
2xx:成功;
3xx:重定向;
    301 永久重定向(浏览器永远不会再次请求老地址);
    302 临时重定向(浏览器下次还会重新请求老地址-常用);
    304 缓存:
        浏览器向服务器发送请求,并发送浏览器缓存的文件版本,
        服务器判断有没有更新,若没有就返回304; 
4xx:客户端错误;
5xx:服务器错误;
6xx+:扩展状态;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容