Fe-9 http&ajax

1, HTTP 协议 和 AJAX
2, DOM 事件机制, 事件冒泡和事件捕获

  • 电脑通信靠IP地址,IP地址记不住就发明了域名(domain name)
    然后电脑自动向DNS服务器(domain name server)查询域名
    对应的IP地址

  • 比如g.cn这样的网址,可以通过电脑的ping程序查出对应 IP 地址
    ➜ ping g.cn
    PING g.cn (74.125.69.160): 56 data bytes

  • 端口是什么?
    一个比喻:
    用邮局互相写信的时候,ip相当于地址(也可以看做邮编,地址是域名)
    端口是收信人姓名(因为一个地址比如公司、家只有一个地址,但是却可能有很多收信人)
    端口就是一个标记收信人的数字。
    端口是一个 16 位的数字,所以范围是 0-65535(2**16)
    0000 0000 0000 0000
    1111 1111 1111 1111

HTTP协议

  • 一个传输协议,协议就是双方都遵守的规范。
    为什么叫超文本传输协议呢,因为收发的是文本信息。
    1,浏览器(客户端)按照规定的格式发送文本数据(请求)到服务器
    2,服务器解析请求,按照规定的格式返回文本数据到浏览器
    3,浏览器解析得到的数据,并做相应处理

  • 请求和返回是一样的数据格式,分为4部分:
    1,请求行或者响应行
    2,Header(请求的 Header 中 Host 字段是必须的,其他都是可选)
    3,\r\n\r\n(连续两个换行回车符,用来分隔Header和Body)
    4,Body(可选)

浏览器访问这个网址的时候
https://list.jd.com/list.html?cat=670%2C677%2C11303&go=0
实际上发的请求如下
请求的格式,注意大小写(这是一个不包含Body的请求):
原始数据如下
'GET /list.html?cat=670%2C677%2C11303&go=0 HTTP/1.1\r\nhost:list.jd.com\r\n\r\n'
打印出来如下
GET /list.html?cat=670%2C677%2C11303&go=0 HTTP/1.1
Host: list.jd.com
Gua: hello

gua=1

其中
1, GET 是请求方法(还有POST等,这就是个标志字符串而已)
2,/ 是请求的路径(这代表根路径)
3,HTTP/1.1 中,1.1是版本号,通用了20年

具体字符串是 'GET / HTTP/1.1\r\nhost:g.cn\r\n\r\n'

返回的数据如下
HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=UTF-8
Location: http://www.google.cn/

<html>
很好
</html>

Body部分太长,先不贴了
其中响应行(第一行):
1,HTTP/1.1 是版本
2,301 是「状态码」,参见文末链接
3,Moved Permanently 是状态码的描述
浏览器会自己解析Header部分,然后将Body显示成网页

——前端掌握 HTTP 协议有什么用——

可以用 JS 动态抓取内容构建页面
比如动态评论、加载数据
比如天气预报程序
比如壁纸图片库
浏览器提供了使用 HTTP 协议收发数据的接口,名为 AJAX
这是一个重要的技术

——浏览器安全问题——

跨域请求

// 事件冒泡
var id1 = document.querySelector('#id1')
var id2 = document.querySelector('#id2')
var id3 = document.querySelector('#id3')
id1.addEventListener('click', function(event){
console.log('click id1', event)
})
id2.addEventListener('click', function(event){
console.log('click id2', event)
})
id3.addEventListener('click', function(event){
console.log('click id3', event)
// 吃掉冒泡事件
// event.cancelBubble = true
})

// 事件捕获是 addEventListener 的第三个参数 useCapture
// id1.addEventListener('click', function(event){
// console.log('capture click id1', event)
// }, true)
// id2.addEventListener('click', function(event){
// console.log('capture click id2', event)
// }, true)
// id3.addEventListener('click', function(event){
// console.log('capture click id3', event)
// }, true)

//
//
// // 获取登录页面
// // 创建 AJAX 对象
// var r = new XMLHttpRequest()
// // 设置请求方法和请求地址
// r.open('GET', '/login', true)
// // 注册响应函数
// r.onreadystatechange = function() {
// if(r.readyState == 4) {
// console.log('请求成功', r.responseText.length)
// }
// }
// // 发送请求
// r.send()
//
//
//
// // 发送登录数据
// // 创建 AJAX 对象
// var r = new XMLHttpRequest()
// // 设置请求方法和请求地址
// r.open('POST', '/login', true)
// // 设置发送的数据的格式
// r.setRequestHeader('Content-Type', 'application/json')
// // 注册响应函数
// r.onreadystatechange = function() {
// if (r.readyState === 4) {
// console.log('state change', r, r.status, r.response)
// var response = JSON.parse(r.response)
// console.log('response', response)
// } else {
// console.log('change')
// }
// }
// // 发送请求
// var account = {
// username: 'gua',
// password: '123',
// }
// var data = JSON.stringify(account)
// r.send(data)
//
//
// // 可以封装成这样的一个函数
// var ajax = function(method, path, headers, data, reseponseCallback) {
// var r = new XMLHttpRequest()
// // 设置请求方法和请求地址
// r.open(method, path, true)
// // 设置发送的数据的格式
// r.setRequestHeader('Content-Type', 'application/json')
// // 注册响应函数
// r.onreadystatechange = function() {
// if(r.readyState === 4) {
// reseponseCallback(r)
// }
// // if (r.readyState === 4) {
// // console.log('state change', r, r.status, r.response)
// // var response = JSON.parse(r.response)
// // console.log('response', response)
// // } else {
// // console.log('change')
// // }
// }
// // 发送请求
// r.send(data)
// }
//
// ajax('GET', '/login', null, '', function(r){
// console.log(r.status, r.response)
// })
//
// ajax('GET', 'https://api.douban.com/v2/book/1220562', null, '', function(r){
// // console.log(r.status, book)
// var book = JSON.parse(r.response)
// var imgUrl = book.image
// var body = document.querySelector('body')
// var img = // <img src=${imgUrl}> //
// body.insertAdjacentHTML('beforeend', img)
// })
//
//
// // GET /v2/movie/subject/1764796
// ajax('GET', '/v2/movie/subject/1764796', null, '', function(r){
// // console.log(r.status, book)
// var movie = JSON.parse(r.response)
// console.log(movie)
// // var imgUrl = book.image
// // var body = document.querySelector('body')
// // var img = // // <img src=${imgUrl}> // //
// // body.insertAdjacentHTML('beforeend', img)
// })

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容