计算机网络知识点

2021-08-05  本文已影响0人  书虫大王X

一、Http的特点:

1.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、PUT、DELETE、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

2.灵活:HTTP允许传输任意类型的数据对象。

3.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

4.无状态HTTP协议是无状态的,HTTP 协议自身不对请求和响应之间的通信状态进行保存。任何两次请求之间都没有依赖关系。直观地说,就是每个请求都是独立的,与前面的请求和后面的请求都是没有直接联系的。协议本身并不保留之前一切的请求或 响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成如此简单的。

二、Http报文

Http报文包括请求报文和响应报文两大部分,其中请求报文由请求行(request line)、请求头(header)、空行和请求体四个部分组成。而响应报文由状态行、响应头部、空行和响应体四个部分组成。接下来我们详细介绍下请求报文的各个部分及其作用。

请求报文

1.请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本。

POST /chapter17/user.html HTTP/1.1

以上代码中“POST ”代表请求方法,“/chapter17/user.html”表示URI,“HTTP/1.1”代表协议和协议的版本。现在比较流行的是Http1.1版本

2.请求头由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。

请求头部通知服务器有关于客户端请求的信息。它包含许多有关的客户端环境和请求正文的有用信息。其中比如: Host,表示主机名,虚拟主机;Connection,HTTP/1.1增加的,使用keepalive,即持久连接,一个连接可以发多个请求;User-Agent,请求发出者,兼容性以及定制化需求。

3.最后一个请求头之后是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。

4.请求体,可以承载多个请求参数的数据

name=tom&password=1234&realName=tomson

上面代码,承载着name、password、realName三个请求参数。

三、HTTP请求方法

五、Http状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

比如我们平时常见两种出错的状态码:
403 Forbidden //对被请求页面的访问被禁止
404 Not Found //请求资源不存在,比如:输入了错误的URL</pre>

六、持久连接

1.为什么需要持久连接

HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。以当年的通信情况来说,因为都是些容量很小的文本传输,所以即使这样也没有多大问题。可随着 HTTP 的 普及,文档中包含大量图片的情况多了起来。比如,使用浏览器浏览一个包含多张图片的 HTML 页面时,在发送请求访问 HTML 页面资源的同时,也会请 求该 HTML 页面里包含的其他资源。因此,每次的请求都会造成无谓的 TCP 连接建立和断开,增加通信量的 开销。

2.持久连接的特点

持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。
持久连接的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。另外, 减少开销的那部分时间,使 HTTP 请求和响应能够更早地结束,这样 Web 页面的显示速度也就相应提高了。 在 HTTP/1.1 中,所有的连接默认都是持久连接,但在 HTTP/1.0 内并未标准化。虽然有一部分服务器通过非 标准的手段实现了持久连接,但服务器端不一定能够支持持久连接。毫无疑问,除了服务器端,客户端也需 要支持持久连接。

七、管线化

持久连接使得多数请求以管线化(pipelining)方式发送成为可能。从前发送请求后需等待并收到响应,才能 发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求。 这样就能够做到同时并行发送多个请求,而不需要一个接一个地等待响应了。通俗地讲,请求打包一次传输过去,响应打包一次传递回来。管线化的前提是在持久连接下。

视频讲解:

get一般用来获取服务器的数据,post一般用来向服务器端发送数据
get参数一般在URL中,post参数在请求的body中
get参数的数据最大为2kb,post理论是不受限制的(80kb)
get的执行效率比post要高,但是post相对来说要安全一些
get的请求会被浏览器主动的缓存,而post不会,除非手动设置
get请求只会产生一个包,而post会产生两个

Apache:可以运行在Linux, Windows, Mac
IIS:是微软的软件,只能运行在Windows电脑上
NGINX:只能运行Linux/Unix

COOKIE和SESSION

Cookie

Cookie技术是客户端的解决方案:服务器在用户登陆后会按照一定规律生成的标志位,将这个标志发送给客户端,客户端存储此标志,以后请求带上此标志告诉服务器自己的身份。
cookie的内容主要包括:名字,值,过期时间,路径和域
客户端提交个人信息后,服务端返回数据的同时会在Response Header中返回Cookie信息,客户端保存在固定的位置(Set-Cookie: 设置返回的Cookie)
客户端在下次请求的时候会在Request Header中携带Cookie信息,服务端根据Cookie确认用户身份(如:自动登陆)(Cookie: 设置上传携带的Cookie)

cookie的设置以及发送过程分为以下四步:

  1. 客户端发送一个http请求到服务器端
  2. 服务器端发送一个http响应到客户端,其中包含Set-Cookie头部
  3. 客户端发送一个http请求到服务器端,其中包含Cookie头部
  4. 服务器端发送一个http响应到客户端

Session

Session技术是服务端的解决方案,通过服务器来保持状态;当客户端第一次请求时服务器首先检查这个客户端的请求里是否已包含了一个session标识,称为session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,发送给客户端,客户端储存,客户端再次发送请求的时候,会将这个Session id带上,服务器根据SessionID查找用户身份

  1. cookie:信息保存在本地容易被第三方或其他获取,发起恶意请求
  2. session:信息保存在服务端的内存中,本地只使用cookie保存sessionId

Http缓存

(一)强缓存:

(二)协商缓存:

浏览器缓存过程:

上一篇 下一篇

猜你喜欢

热点阅读