11 http网络协议

一 Http协议的简介

image.png

物理层、数据链路层、网络层、传输层、应用层【TCP/IP五层模型的协议】

一个超文本传输标准,底层是TCP协议

1、一些基本概念
1)协议:指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则
2)HTTP协议:超文本传输协议是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器

2、URI和URL的区别
URI:是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源
file://a:1234/b/c/d.txt
URI的三个组成部分:1.访问资源的命名机制;2.存放资源的主机名;3.资源自身的名称,由路径表示,着重强调于资源

URL:是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。
www.baidu.com
三个组成部分:1.协议;2.存在该资源的主机ip地址;3.主机资源的具体地址

二 Http协议特点
1)简单快速
2)无连接,限制每次连接只处理一个请求
3)无状态

三 request/response:原理

打开浏览器,在地址栏中输入URL,然后我们就看到了网页。原理是怎么样的?
【当用户在浏览器输入一个URL时,访问的大致流程如下:
1.首先浏览器会向DNS服务器查询输入的URL对应的ip地址;
2.然后DNS返回该URL对应网站的ip地址;
3.浏览器再向根据网站的ip地址与目标web服务器的80端口进行TCP连接;
4.浏览器获取请求网站页面的HTML代码;
5.浏览器在显示窗口内渲染HTML;
6.窗口关闭时,浏览器终止与web服务器的连接;】

四 容易混淆的知识点

1、Http1.1和1.0的区别?????

1)1.0产生的背景
超文本传输协议伴随着计算机网络和浏览器的诞生,Http1.0也随之而来,处于计算机网络中的应用层。
早在我们http1.0建立的开始的时候主要是为了将我们的html文档从我们的web服务器传输到客户端浏览器。

2)1.0所做的优化
带宽:现阶段已经解决
延迟:1.浏览器阻塞:浏览器对于同一个域名,同时只能有4个连接
2.DNS查询:浏览器需要知道目标服务器的IP才能建立连接
3.建立连接:三次握手

3)1.1和1.0的具体区别
1.缓存处理:1.0使用头部的If-Modified-Since来作为判断标准。
而1.1引入了更多缓存策略,Etag和If-None-Match
2.带宽优化及网络连接的使用
HTTP/1.1加入了一个新的状态码100(Continue)。客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码401(Unauthorized);如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。100 (Continue) 状态代码的使用,允许客户端在发request消息body之前先用request header试探一下server,看server要不要接收request body,再决定要不要发request body。
1.1中引入范围range的区域【断点续传】
3.Host头处理
【HTTP 1.1增加host字段】
在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。
HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。此外,服务器应该接受以绝对路径标记的资源请求。
4.长连接
HTTP 1.0不支持长连接,每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接。还有不支持断点续传。
HTTP 1.1则支持持久连接, 并且默认使用持久连接. 在同一个tcp的连接中可以传送多个HTTP请求和响应. 多个请求和响应可以重叠,多个请求和响应可以同时进行。
【1.1支持长连接,减少建立和关闭连接的时间】

4)1.1和1.0存在的问题

1.Http1.0在传输数据时,每次都需要重新建立连接,无疑增加了大量的延迟时间【这个主要针对1.0】
2.Http1.x在传输数据时,所有传输的内容都是明文,客户端和服务端都无法验证对方的身份【解决方法,通过Https来保证我们的数据和内容安全】
3.Http1.x在使用时,header里携带的内容过大,在一定程度上增加了传输的成本
4.虽然Http1.1支持了keep-alive,来弥补多次创建连接产生的延迟,但是

keep-alive使用多了同样会给服务端带来大量的性能压力【1.1】

2、get/post方法的区别
1)提交的数据位置:get放在url后面,post放在 body中
2)提交数据的大小是否有限制:因为浏览器对Url的大小有限制,
3)取得变量的值,get通过Request.QueryString来获取,post通过Request.Form来获取
4)安全问题,URL可以被浏览器缓存,内可能包含敏感信息

3、cookie和session的区别


06http.JPG

07http.JPG

1)Cookie
Cookie技术是客户端的解决方案,Cookie就是由服务器端发送给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息

  1. Session
    Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。

session的工作原理:
1.第一步当然是创建session了
2.在创建了session的同时,服务器会为该session生成唯一的session id
3.在session被创建之后,就可以通过session相关的方法往session中增加内容
4.当客户端再次发送请求的时候,会将这个session id 带上,服务器接受到请求之后就会一句session id 找到相应的session

  1. 区别
    1.存放位置不同。Cookie存储在客户端,session存储在服务端
    2.存取方式不同。cookie存储的ask??字符串,session存储任何类型的数据
    3.安全性不同。cookie对客户端是可见的可以被修改,session存储在服务器,
    隐私性优于cookie.
    4.有效期。cookie的有效期一般较长。session,当设置为-1的时候,关闭浏览器后session即失效。
    5.对服务器造成的压力不同。
    并发多的时候cookie是个很好的选择。

4 Etag/if-one Match referer
而ETag/If-None-Match则是上文大话中说的第二种check服务端文件是否更新的方式,也要配合Cache-Control使用。实际上ETag并不是文件的版本号,而是一串可以代表该文件唯一的字符串(Apache中,ETag的值,默认是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。),当客户端发现和服务器约定的直接读取缓存的时间过了,就在请求中发送If-None-Match选项,值即为上次请求后响应头的ETag值,该值在服务端和服务端代表该文件唯一的字符串对比(如果服务端该文件改变了,该值就会变),如果相同,则相应HTTP304,客户端直接读取缓存,如果不相同,HTTP200,下载正确的数据,更新ETag值。

你可能感兴趣的:(11 http网络协议)