HTTP协议
- URL
结构
协议+主机名称+目录结构+文件名
http://cdn.tmooc.cn/bsfile/imagad/A.jpg
完整url结构
<scheme>://<user>:<pwd>@<host>:<port>/<path>;<params>?<query>#<frag>
scheme:方案,协议。以哪种方式获取服务器资源,不区分大小写,常见的协议http/https/ftp
常见协议 | 默认端口号 | 协议基本作用 |
---|---|---|
FTP | 21 | 文件上传、下载 |
SSH | 22 | 安全的远程登录 |
TELNET | 23 | 远程登录 |
SMTP | 25 | 邮件传输 |
DNS | 53 | 域名解析 |
HTTP | 80 | 超文本传输 |
POP3 | 110 | 邮件接收 |
HTTPS | 443 | 加密传输的HTTPS |
DNS FTP HTTP/HTTPS
< user>用户名
< pwd>密码
host: 主机名localhost 、127.0.0.1/域名、IP
port:端口号
path:路径
params:参数,session/cookie 跟踪状态的参数
query:查询字符
frag:锚点 01.html#NO1
- HTTP协议
(1)什么是HTTP协议
HyperText Transfer Protocol 超文本传输协议
规范了数据是如何打包的
(2)HTTP历史
HTTP/0.9 | 1991年制定,有严重的设计缺陷,只支持GET方法,不支持MIME类型,很快被HTTP/1.0取代 |
---|---|
HTTP/1.0 | 1996年制定,支持多种请求方法,支持多媒体对象,得到广泛应用。 |
HTTP/1.0+ | 支持持久连接,虚拟主机、代练连接等新特性,成为非官方的事实标准。 |
HTPP/1.1 | 1999年制定,矫正HTTP中设计缺陷,性能优化,删除一些不好的特性。 |
HTTP-NG(或HTTP/2.0) | 关注HTTP协议的性能优化及更强大的服务逻辑远程执行框架,研究工作仍在进行中 |
(3)详解
Message,消息/报文,是在HTTP客户端与服务器间传递的数据块。
HTTP协议规定,消息必须符合特定的格式才能被彼此理解。
Request Message:客户端向服务器发送的请求消息。
Response Message:服务器端根据客户端的请求消息,返回给客户端的响应消息。
HTTP的消息
Request请求消息
是客户端带给服务器的数据
由三部分组成,请求起始行,请求头,请求主体
Response响应消息
服务端发送给客户端的数据
由三部分组成,响应起始行,响应头,响应主体
Request请求消息
请求起始行
- get:客户端向服务器要数据时使用,靠地址栏明文传输字符串,无请求主体(form data)
- post:客户端向服务器提交数据的时候使用,隐式传输,有请求主体form data
- delete:客户端想要删除服务器内容(一般禁用)
- put:客户端想要放数据到服务器(一般禁用)
- connect:测试连接
- trace:追踪请求路径
- option:选项,预请求
- head:表示客户端只获取响应头信息
(2)请求的url
(3)协议版本 HTTP/1.1
请求头信息
- Host:告诉服务器请求的主机
- Connection:keep-alive:告诉服务器,进行持久连接
- User-agent:用户代理,告诉服务器,我自己(浏览器)的类型
- Accept-Encoding:gzip,告诉服务器,自己能接收的压缩文件的类型
- Accept-Language:zh-CN,zh。告诉服务器,自己能够接收的自然语言类型。
- Referer:引用。告诉服务器,请求来自于哪个网页。
请求主体
form data
Response响应消息
(1)响应起始行
1.http协议版本 http/1.1
2.响应状态码
3.原因短句,对状态码的简短的解释说明
(2)响应头信息
1.Date:告诉浏览器,服务器的响应时间点
格林威治时间 北京+8小时
2.Connection:keep-alive;
告诉浏览器,已经启动了持久连接
3.Content-Type:响应主体类型是什么
取值
text/html 响应回来的数据是html文本
text/plain 响应回来的是普通文本(不包含特殊符号)
text/css 响应回来的是样式文件
application/javascript 响应回来的js脚本文件
application/xml 响应回来的是xml格式的字符串
application/json 响应回来的是json格式的字符串
images/jpg.png… 响应回来的是图片
(3)响应主体
响应状态码
告诉浏览器,服务器的响应状态是什么
1XX:100-199 提示信息
2XX:成功响应 200 ok
301:永久重定向
302:临时重定向
304:请求未被修改,命中缓存
4XX:客户端请求错误
404 NOT Found 请求资源不存在
403 Forbidden 权限不够
405 Method not Allowed 请求方法不被允许
5XX:服务器运行错误
500 服务器内部错误
缓存
客户端将服务器响应回来的数据进行自动保存
当再次访问的时候,直接使用保存的数据
缓存的优点和缺点
1.减少了冗余数据的传输,节省客户端流量
2.节省了服务器带宽
3.降低了对服务器资源的消耗和运行要求
4.降低了由于远程传输而造成的延时加载
1.请求–无缓存–连服务器–存缓存–客户端得到
2.请求–有缓存–够新鲜–使用缓存–客户端得到
3.请求–有缓存–不新鲜–连接服务器查看是否过期–没过期–更新缓存的新鲜度–客户端得到
4. 请求–有缓存–不新鲜–连接服务器查看是否过期–已过期–连服务器–存缓存–客户端得到
与缓存相关的消息头
1.Cache-Control http/1.1的用法
与缓存相关的消息头
1.Cache-Control http/1.1的用法
从服务器将文档传到客户端计时器,
此文档处于新鲜的秒数,是一个相对时间
max-age=新鲜的秒数/0 不缓存
2.Expires http/1.0的用法
指定过去的确切时间点,是一个具体的时间点
Expires:Tue,31 Jul 2019 02:56:16 GMT;
在网页中添加缓存
<meta http-equiv="消息头" content="值">
<meta http-equiv="Cache-Control" content="max-age=3600">
HTTP性能优化
1.HTTP连接的过程
发送请求—>建立连接—>处理请求—>访问资源—>构建响应—>发送响应—>记录日志
2.HTTP连接性能的优化
减少连接的创建次数(开启持久连接)
减少请求次数
提高服务器端运行速度
尽可能减少响应数据的长度
安全的HTTP协议
HTTPS协议,安全版本的HTTP
SSL,为数据通信提供安全支持
1.客户端发送请求消息时,在ssl层加密
服务器接收加密文件,在ssl层解密
得到请求明文,对请求进行处理
2.服务器发送响应消息时,在SSL层进行加密
客户端接收加密文件,在SSL层进行解密
得到响应明文,解析相应内容
DOM操作
完整的JavaScript的组成
1.js核心:ECMA Script ES5~ES6
2.DOM:Document Object Model 文档对象模型
让js动态操作页面元素
3.BOM:Browser Object Model 浏览器对象模型
让js动态操作浏览器
简化的获取元素对象
var elem1=document.getElementById("d1"); H5支持直接使用id表示标签对象获取/修改双标签的内容
console.log(d1.innerHTML)
d1.innerHTML=""
获取/修改input标签的值
t1.value
总结
dom操作标签内容(简化版)的总结
1.要操作的标签,必须有id
2.通过id直接调用innerHTML或者value属性
双标签 id.innerHTML
input标签 id.value
HTML元素的事件
允许通过用户的行为来激发的操作就是事件
onclick
文本框或者密码框失去焦点的事件 onblur
文本框或者密码框获取焦点的事件 onfocus
Ajax
- 名词解释
(1)同步Synchoronous
在一个任务进行中时,不能开启其它任务。
同步访问:浏览器向服务器发送请求时,浏览器只能等待服务器的响应,不能做其它的任何事情
出现场合 |
---|
地址栏输入网址访问网页(网速不好时,更明显) |
用户名的验证 |
聊天室 |
- 异步Asynchronous
在一个任务开启时,可以开启其他的任务。
异步访问:浏览器在向服务器发送请求时,不耽误用户在网页的其他操作
出现场合 |
---|
用户名的验证 |
聊天室 |
搜索建议 |
股票走势图 |
- Ajax
Asynchronous javascript and Xml(现在使用json居多)
本质:使用js提供的异步对象(XMLHttpRequest)
异步向服务器发送请求,并接收响应回来的数据。
ajax可以无刷新的效果更改页面的布局内容
-
异步请求的步骤
(1)创建异步对象
(2)绑定监听事件(接收请求)
(3)打开链接(创建请求)
(4)发送请求 -
创建异步对象
标准创建 ie8以上的版本支持的创建方式
var xhr=new XMLHttpRequest();
IE8以下版本创建
通过判断window.XMLHttpRequest来判断浏览器是否支持标准创建
if(window.XMLHttpRequest){
var xhr=new XMLHttpRequest();
}else{
var xhr=new ActiveXObject("Microsoft.XMLHttp");
}
- 异步对象的属性和方法
(一)readyState属性
值0~4,5个状态
- 0:请求未初始化
- 1:已经打开到服务器的连接,正在发送请求
- 2:接收响应头
- 3:接收响应主体
- 4:响应数据接收成功
(二)status服务器的响应状态码
当status的值为200时,表示服务器正确处理了请求,并给出了响应
(三)onreadystatechange
当xhr对象的readyState属性值发生改变时自动的激发
xhr.onreadystatechange=function(){
//此方法会被调用4次
//最后一次,readyState==4
//并且响应状态码为200时,才是我们要的响应结果 xhr.status==200
if(xhr.readyState==4 && xhr.status==200){
//把响应数据存储到变量result中
var result=xhr.responseText;
}
}
- 创建请求,打开连接
xhr.open(method,url,isAsyn);
method:请求的方法(get/post…),一个string格式
url:访问的服务器的地址(接口),string
isAsyn:是否采用异步的方式请求 boolean (true异步/false同步)
-
发送请求
xhr.send(body)
使用get方法,body为null,或者不写
使用post方法,要创建请求主体 -
使用get,发送带参数的请求
常见错误总结
Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
跨域错误,页面是在本地打开,要使用访问服务器的方式打开
127.0.0.1:3000/**.html
AJAX发起post请求
第一步获取ajax异步对象,与get一样
var xhr=new XMLHttpRequest();
第二步绑定监听,获取响应数据,与get一样
xhr.onreadystatechange=function(){
if(xhr.readyState==4&& xhr.status == 200){
var result=xhr.responseText;
alert(result);
}
}
第三步,创建请求,打开连接。
post不需要在url后面拼接参数,所以,直接写接口
var url="/demo/postlogin";
xhr.open(“post”,url,true);
第四步,发送请求,注意:post的参数放在请求主体中,需要先定义请求主体
var formdata=“uname=”+uname.value+"&upwd="+upwd.value;
请求主体的格式,与get方法,地址栏中?后面的格式一致
uname=dangdang&upwd=123456
注意*******:由于默认的请求参数类型是text/plain,要求参数是没有特殊符号的字符。但是主体中有特殊符号"&",text/plain传递不了,需要把content-type修改成application/x-www-form-urlencoded,支持所有字符
xhr.setRequestHeader(“Content-type”,“application/x-www-form-urlencoded”);
xhr.send(formdata);
注意:setRequesetHeader必须在xhr的open方法与send方法之间
JSON数据格式
JS对象数据格式
var 对象名称={
属性1:值,
属性2:值,
属性3:值
}
var stu={
name:‘tom’,
age:18,
height:175
}
JSON数据的格式
什么是json
javascript object Notation
js 对象 表现形式
以js对象的数据格式表示出来的字符串
服务器查询数据库得到result是js对象数组
响应传输给前台ajax后,被自动转换成json字符串
Json的语法
1.JSON中用一对{}表示一个对象
2.json中的属性名称,必须使用"“引起来(不要用单引号)
如果属性的值也是字符串,也必须使用”"引起来
3.表现出来的是一个字符串,所有最外面加引号(使用单引号)
普通的字符串
var tom=“汤姆”;
var jsontom=’{“name”:“tom”,“age”:18}’;
普通数组
var arr=[“tom”,“lilei”,“hanmeimei”];
var jsonarr=’[
{“name”:“tom”,“age”:18},
{“name”:“lilei”,“age”:20},
{“name”:“hanmeimei”,“age”:21}
]’;
将JSON字符串转换成js对象/数组
使用JSON.parse()将json字符串解析成js对象或者数组
XML
XML: eXtensible markup language
可扩展的 标记 语言
XML的标签,是没有被预定义过的,需要自行定义
XML的宗旨,是做数据传递用的。而不是数据展示
XML标记的语法
1.xml文件最顶端做声明
2.所有的标记必须成对出现(没有单标记)
<name></name>正确
<name/>错误
3.严格区分大小写
<Name></Name>正确
<Name></name>错误
4.xml允许嵌套,注意嵌套顺序
<student>
<name>TOM</name>
<age>18</age>
</student>
5.每个标签允许自定属性,格式与html一致,属性值,必须使用“”括起来
<name type="EN">TOM</name>
6.每一个xml文档,有且只有一个根元素
ajax请求xml数据
var result=xhr.responseXML获取xml文件
result等同于根目录(studentlist)
var students=result.getElementsByTagName(“下一级标签”);
getElementsByTagName的返回值是类数组,可以使用for循环操作
返回值只能用for循环操作,但是数组所有的api都不能用