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指令:防止从缓存中返回过期的资源。