HTTP概念:超文本传输协议,是一种通信协议,它允许将超文本标记语言html文档从web服务器传送到客户端的浏览器。是一个应用层协议,承载与TCP之上;有请求和响应构成;主要规定了客户端和服务器端之间的通信格式,默认使用的端口80
协议:两台计算机进行通信,所遵循的规定或规则。
TCP/IP协议的分层:
应用层:HTTP协议。处理特定的应用程序。TCP/IP协议族内预存了各类通用的应用服务: FTP DNS HTTP
传输层: TCP协议。对上层应用层提供处于网络连接中两台计算机之间的数据传输。:TCP和UDP
网络层:IP协议。处理网络上流动的数据包 :IP ICMP IGMP如何闯送给用户
数据链路层:以太网协议。处理连接网络的硬件部分,包括操作系统、硬件设备驱动、网卡、光纤
IP协议:把各类数据包传送给对方,需满足各类条件:ip地址(指明子节点被分配到的地址,可变)和Mac 地址是指网卡所属的固定地址,不可变。
ARP协议:用于解析地址的协议,根据通信方的IP地址就可以翻查到对应的MAC地址。
TCP协议:传输控制协议,提供可靠的字节流服务。;如何保证提供可靠的服务?采用三次握手策略
DNS:域名系统,提供域名到IP地址之间的解析服务。
URI:统一资源标示符,是一个用于标示某一互联网资源名称的字符串。
URL:统一资源定位符,描述一台特定服务器上某特定资源的特定位置。URI包含URL和URN。
http事务:请求命令+响应结果;
报文流:向下。抓包软件:
状态码:100-199 信息提示 200-299请求成功 300-399 请求资源被移走 400-499 请求出错了 500-599 服务器出错
一次完整的HTTP事务的过程:
1域名解析 :浏览器搜索DNS缓存,查看是否有记录 》 没找到,搜索操作系统自身的DNS缓存 > 没找到,读取HOSt文件 > 没找到,浏览器发起一个DNS的系统调用,域名请求 > 获得域名对应的IP地址后,发起HTTP三次握手
2 发起TCP的三次握手
3发起HTTP请求 TCP/IP 连接建立起来后,用HTTP的GET方法请求一个根域里的一个域名。
4 服务器响应HTTP请求,返回给浏览器
5浏览器解析HTML代码 并请求HTML中的资源JS、CSS、图片
6浏览器对页面进行渲染呈现给客户。
三次握手:客户端 发送请求至服务器(客户端等待服务器回应);若同意链接,则向客户端发送确认问答(表示服务器已经收到请求,等待客户端确认);客户端发送请求 带数据(表示客户端可以发送http请求了)
TeLnet :为用户提供本地计算机完成远程主机工作能力。
400:客户端的请求语法错误 服务器无法理解
401:请求未经过授权
403:服务端拒绝提供请求 ,没有权限
404:
503:服务器当前时间 还不能处理 要等一段时间
参考 http://www.ruanyifeng.com/blog/2016/08/http.html
请求的格式:
GET / HTTP/1.0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
Accept: */* 声明自己可以接受的哪些数据格式
Accept-Encoding: gzip,default,compress
服务器响应的格式:
HTTP/1.0 200 OK
Content-Type: text/plain 服务器回应的时候,需告诉客户端,数据是什么格式
Content-Length: 137582 在传送多个回应时,区分数据包是属于哪一个回应的,
Transfer-Encoding:chunked 表明回应由数量未定的数据块组成,没有content-length字段
Content-Encoding:gzip
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84
connection:keep-alive 要求服务器不要关闭TCP连接,以便其他请求复用
Host:指定服务器的域名
最新版本HTTP/2 新规定:1 二进制协议;2 多工,可以同时发送多个请求或回应,不用按照顺序一一对应;3 数据流 4 头信息压缩 5 服务器推送
通常cookie是用来保存用户登录状态的。
浏览器特性与安全策略:同域与不同域,
url.parse('url') 解析URL地址 为JSON对象 可加参数1:true 将query ‘name=1&name=2’字符串解析成{}对象
参数2:true 正确解析//www.imooc.com/ 未写协议的路径
http://www.imooc.com/video/6710
protocol 协议 ‘http’
slashes 是否有双斜线 //
host IP地址或域名 imooc.com
port 端口
hostname 主机名
hash 锚
pathname /video/6710 访问资源路径名
href 完整超链接
url.format({...}) 将对象转换为url href
url.resolve('http://imooc.com/','/course/list') //连接url
querystring
序列化 .stringify
querystring.stringify({name:'scott',course:'node',form:''}) 解析为 字符串 ‘name=scott&cource=jade&from=’
querystring.stringify({name:'scott',course:'node',form:''}, ',') 第一个参数 ‘name=scott,cource=jade,from=’
querystring.stringify({name:'scott',course:'node',form:''}, ',',':') 第二个参数 ‘name:scott,cource:jade,from:’
反序列化 .parse
querystring.parse(‘name=scott&course=jade&course=1’) 将字符串 解析为 对象{name:'scott',cource:['jade','1']}
querystring.parse('‘name=scott,cource=jade,from=',',') 第二个参数 将以,连接的字符串解析成对象
querystring.parse( ‘name:scott,cource:jade,from:’ , ',' , ':') 第三个参数 将以:连接的字符串解析成对象
转译 .escape
querystring.escape('哈哈') '%3c%e5%ff%%%'
反转译 .unescape
querystring.unescape( '%3c%e5%ff%%%' ) 哈哈