终端开发所必知道的计算机网络知识(三)

前言

今天这篇主要讲应用层相关内容,应用层是TCP/IP五层模型的最顶层,也是我们终端开发同学接触最多、最频繁的一层,说到应用层,自然就想到HTTP和HTTPS这一对兄弟,这篇文章作为《终端开发所必知道的计算机网络知识》系列的最后一篇文章,将为大家细细讲述应用层的点点滴滴。

应用层

直接为用户的应用程序提供服务,常见的应用层协议有HTTP、HTTPS、DNS、Telnet、FTP、WWW、SMTP、NFS等等。

HTTP

超文本传输协议,规定了客户端与服务器之间的传输规则。永远是客户端发起请求,服务器返回响应,默认端口是80。

1、特点

1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径,通信速度很快;
2、灵活:HTTP允许传输任意类型的数据对象,正在传输的类型由Content-Type加以标识;
3、无状态:HTTP协议是无状态协议,无状态是指协议对于事务处理没有记忆能力,同一个客户端的这次请求和上次请求是没有对应关系;
4、支持B/S及C/S模式;

2、请求URL

URL一般用于标识一个请求的路径,访问这个服务对应的资源地址,首先我们先理解以下几个概念:URI、URL、URN。

URI

URI是统一资源标识符,标识一个资源。

URL

URL是统一资源定位符,是URI的子集, 除了确定一个资源,还提供一个路径去访问这个资源(如其网络地址)。

URN

URI可以分为URL和URN,URN作用就好像一个人的名字,URL就像一个人的地址。换句话说:URN确定了东西的身份,URL提供了找到它的方式。
通俗地讲,不管用什么方法表示,只要能定位一个资源,就叫URI,使用两种方法来定位:1,URL,用地址定位;2,URN ,用名称定位。举个例子:去村子找个具体的人(URI),如果用地址,某村多少号房子第几间房的主人就是URL, 如果用身份证号+名字去找就是URN了。

URL组成

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<fragment>

3、请求方法

GET:请求指定的页面信息,并返回实体主体。
HEAD:类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头。
POST:向指定资源提交数据请求(例如提交表单或者上传文件),数据被包含在请求体中,POST请求可能会导致新的资源的建立或已有资源的修改。
PUT:从客户端向服务器传送的数据取代指定的资源。
DELETE:请求服务器删除指定的资源。
CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS:允许客户端查看服务器的性能。
TRACE:回显服务器收到的请求,主要用于测试或诊断。

4、请求request组成

请求由请求行、请求头部、请求体三个部分组成。

请求行

请求的方法(GET or POST etc) + 请求的URI(统一资源标识符,资源在服务器本地上的路径) + HTTP的版本号
eg: POST /lk./kkmj.png HTTP1.1

请求头

Accept:指定客户端能够接收的内容类型。
Accept-Charset:客户端可以接受的字符编码集。
Accept-Encoding:客户端支持的数据压缩格式。
Cache-Control:指定请求和响应遵循的缓存机制。
Content-Length:请求体的长度,该字段一般在POST请求中才会有。
Connection:keep-alive,该字段是从HTTP 1.1才开始有的,用来告诉服务端这是一个持久连接。
Content-Type:body中的数据类型。
Cookie:保存在本地的用户信息。
Host:指定请求的服务器的域名和端口号。
If-Modified-Since:请求的时候会客户端将本地缓存的最后修改时间发给服务器,服务器进行匹对,如果服务器中文件最后修改时间与客户端发过来的时间一致,则返回304,客户端就直接用本地的缓存。否则返回200,将最新的资源发给客户端,客户端丢弃旧缓存,将新的资源缓存。
If-None-Match:如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变(Etag是URL的Entity Tag,用于标示URL对象是否改变,客户端的查询Etag,如果ETag没改变,则返回状态304然后不返回)。
If-Range:如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag。
User-Agent:客户端的软件环境。

请求体

真正需要发给服务器的数据,上传请求中,里面放二进制文件,GET请求请求体为空,普通的POST请求中的请求体就是一些表单数据。

5、响应response构成

响应由响应行、响应头和响应体三部分组成。

响应行

HTTP版本号 + 状态码 + 状态码对应的英文名称
1xx(临时响应)
2xx(成功)
3xx(已重定向)
301 永久重定向
302 临时重定向
4xx(请求错误)
404 找不到网页
403 已禁止
401 未授权
400 请求失败;服务器不理解请求语法
5xx: 服务器错误,504网关超时
eg: HTTP/1.1 200 OK

响应头

Age:从原始服务器到代理缓存形成的估算时间。
Cache-Control:告诉所有的缓存机制是否可以缓存及哪种类型。
Content-Location:请求资源的备用地址。
Content-MD5:资源的MD5校验值。
Content-Type:返回内容的MIME类型。
ETag:请求变量的实体标签的当前值。
Last-Modified:请求资源的最后修改时间。
Set-Cookie:设置Http Cookie。
Transfer-Encoding:文件传输编码。
WWW-Authenticate:表明客户端请求实体应该使用的授权方案。

响应体

响应的具体内容

6、Cookie和Session

Cookie和Session都为了保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力。
当服务器接收到 cookie 后,会根据 cookie 中的 SessionID 来找到这个客户的 session。如果没有,则会生成一个新的 SessionID 通过setCookie发送给客户端。

知识点

1、Cookie保存在客户端,Session保存在服务器。
2、Cookie不是很安全,别人可以分析存放在本地的Cookie并进行Cookie欺骗,考虑到安全应当使用Session。
3、单个Cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie。
4、客户端每次都会把 cookie 发送到服务端,因此服务端可以知道 cookie,但是客户端不知道 session。
5、session 可以设置超时时间,超过这个时间后就失效,以免长期占用服务端内存。

7、HTTP 1.0 与 HTTP 1.1 区别

缓存处理

HTTP1.0使用Expire缓存机制,使用If-Modified-Since来做为缓存判断的标准;

top Created with Sketch.