http

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%%%'  )       哈哈

原文地址:https://www.cnblogs.com/yxiaoqian/p/6009718.html