[TCP/IP] HTTP概述

HTTP

请求访问文本或图像等资源的一端称为客户端

提供资源响应的一端称为服务器端

请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段、内容实体

响应报文是由协议版本、状态码、原因短语、可选响应首部字段、实体

HTTP是一种无状态协议

HTTP协议自身不具备保存之前发送过的请求或响应的功能

可以通过Cookie技术来实现保持状态的功能

HTTP使用URI让客户端定位到资源

HTTP方法

GET:获取资源

访问服务器的某个资源

GET方法用来请求访问已被URI识别的资源。

POST:传输实体主体

把某条信息告诉服务器

POST用来传输实体的主体。

 

PUT:传输文件

传输文件给服务器

PUT用来传输文件,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置

HEAD:获得报文首都

从服务器获得相关信息

和GET一样只是不返回报文主体部分,用于确认URI的有效性及资源更新的时间等

DELETE:删除文件

从服务器删除文件

和PUT方法相反,DELETE按请求URI删除指定的资源

OPTIONS:询问支持的方法

询问服务器支持哪些方法

OPTIONS用来查询针对请求URI指定的资源支持的方法。

TRACE:追踪路径

TRACE让Web服务器将之前的请求通信环回给客户端的方法。

用来确认连接过程中发送的一系列操作。

CONNECT:要求用隧道协议链接代理

CONNECT要求在与代理服务器通信时建立隧道,实现用隧道技术进行TCP通信

使用Cookie状态管理

Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。

Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器发现客户端发送过来的Cookie后,会去检查服务器上的记录并比对,最后得到之前的状态信息。

HTTP报文

用于HTTP协议交互的信息被称为HTTP报文。请求端(客户端)HTTP报文叫做请求报文,响应端(服务器端)的叫做响应报文。

HTTP报文本身是由多行(用CR+LF作换行符)数据构成的字符串文本。

HTTP报文大致可分为报文首部和报文主体两块。两者由空行(CR+LF)来划分。通常不一定有报文主体。

请求报文结构

报文首部(含请求行、请求首部字段、通用首部字段、实体首部字段、其他)

空行(CR+LF)

报文主体

响应报文结构

报文首部(含状态行、响应首部字段、通用首部字段、实体首部字段、其他)

空行(CR+LF)

报文主体

请求行:包含用于请求的方法,请求URI和HTTP版本

状态行:包含表明响应结果的状态码,原因短语和HTTP版本

首部字段:包含表示请求和响应的各种条件和属性的各类首部,一般有4种首部,分别是:通用首部、请求首部、响应首部和实体首部

其他:可能包含HTTP的RFC里未定义的首部

报文:是HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输

实体:作为请求或响应的有效载荷数据被传输,其内容由实体首部和实体主体组成

HTTP报文的主体用于传输请求或响应的实体主体。

通常,报文主体等于实体主体。只有当在传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。

内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。

常见内容编码:gzip、compress、deflate、identity

分块传输编码:把实体主体分块进行传输。每一块都会用十六进制标记块的大小,而实体主体的最后一块会使用0(CR+LF)标记。

MIME,多用途因特网邮件机制,它允许邮件处理文本、图片、视频等多个不同类型的数据

HTTP状态码

状态码:告知从服务器返回的请求结果。

2XX 成功

200 OK

表示从客户端发来的请求在服务器端被正常处理了。

204 No Content

代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分,也不允许返回任何实体的主体。

206 Partial Content

表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。

3XX重定向

301 Moved Permanently

永久性重定向。表示请求的资源已被分配到了新的URI,以后应使用资源现在所指向的URI。

302 Found

临时性重定向

表示请求的资源已被分配了新的URI,希望用户能使用新的URI访问。

303 See Other

表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。

304 Not Modified

表示客户端发送附带条件的请求时,服务器允许请求访问资源,但因发生请求未满足条件的情况后,直接返回304 Not Modified。

4XX客户端错误

400 Bad Request

表示请求报文中存在语法错误。

401 Unauthorized

表示发送的请求需要有通过HTTP认证的认证信息。

返回含有401的响应必须包含一个适用于被请求资源的WWW-Authenticate首部用于询问用户信息。当浏览器初次接收到401响应时,会弹出认证用的对话窗口。

403 Forbidden

表示对请求资源的访问被服务器拒绝了。

404 Not Found

表明在服务器上无法找到请求的资源。

还可以在服务器拒绝请求且不想说明理由时使用。

5XX服务器错误

500 Internal Server Error

表明服务器端在执行请求时发生了错误。

503 Service Unavailable

表明服务器暂时处于超负荷或正在进行停机维护现在无法处理请求。

HTTP/1.1允许一台HTTP服务器搭建多个Web站点。

在相同的IP下,由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI。

HTTP通信时,除了客户端和服务器外,还有一些用于通信数据转发的应用程序,例如代理、网关和隧道。它们可以配合服务器工作。

代理

代理是一种有转发功能的应用程序,它接收客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。

代理不改变URI,会直接发送给前方持有资源的目标服务器。

代理服务器级联。转发时需要附加Via首部字段以标记出经过的主机信息。

使用代理服务器的理由有:

利用缓存技术减少网络带宽的流量

组织内部针对特定网站的访问控制,以获取访问日志为主要目的等。

网关

网关是转发其他服务器通讯数据的服务器,接收从客户端发送过来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。

网关使通信线路上的服务器提供非HTTP协议服务,以提高通信的安全性。

隧道

隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。

目的是确保客户端与服务器可以通过SSL等加密手段进行安全通信。

缓存

缓存是指代理服务器或客户端本地磁盘内保存的资源副本。

缓存服务器是代理转发从服务器返回的响应时保存一份资源的副本。

客户端缓存

客户端缓存称为临时网络文件,其中也包含缓存有效期的问题。

HTTP报文首部

报文首部:在客户端和服务器处理时起至关重要作用的信息几乎都在这边

报文主体:所需要的用户和资源的信息都在这边

4种HTTP首部字段类型

通用首部字段

请求报文和响应报文两方都会使用的首部

请求首部字段

从客户端向服务器发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息

响应首段字段

从服务器向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容消息

实体首部字段

针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的消息

通用首部字段:请求报文和响应报文双方都会使用的首部。

Cache-Control

操作缓存的工作机制

Cache-Control

public指令:表明其他用户也可利用缓存。

private指令:响应只以特定的用户作为对象,与public相反。

no-cache指令:防止从缓存中返回过期的资源。

原文地址:https://www.cnblogs.com/immjc/p/7761702.html