http协议
2022-04-04 本文已影响0人
Markz__
统一资源定位符(URL), 是用来表示从互联网上得到的资源位置和访问这些资源的方法。
URL的一般形式由一下四个部分组成:
<协议>://<主机>:<端口>/<路径>
1. http协议的组成部分
三个部分组成:
- 对报文进行描述的起始行
- 包含属性的首部(header)块
- 可选的包含数据的主体部分
起始行的首部是由行分隔的ASCII文本,每行都以一个由两个字符组成的行终止序列作为结束,即回车换行CRLF
1.1 起始行
1.1.1 请求行
请求报文请求服务器对资源进行一些操作;
请求报文的起始行或称为请求行,包含了一个方法和一个请求URL,此外还包含HTTP的版本,用来告知服务器,客户端使用的哪种http,这些字段由空格分隔.
常用方法:
- GET 从服务器获取一份文档
- HEAD 只从服务器获取文档的首部
- POST 向服务器发送需要处理的数据
- PUT 将请求的主体部分存储在服务器上、
- TRACE 对可能经过代理服务器传送到服务器上去的报文进行追踪
- OPTIONS 决定可以在服务器上进行哪些方法
- DELETE 从服务器上删除一份文档
1.1.2 响应行
响应报文承载了状态信息和操作产生的所有结果数据,将其返回给客户端;
响应报文的起始行称为响应行,包含了响应报文使用的HTTP版本,数字状态码,以及描述操作状态的文本形式的原因短语,所有字段都以空格分隔.
状态码:
方法用来告诉服务器做什么事情,状态码则用来告诉客户端发生了什么事情;
- 100~199 信息提示
- 200~299 成功
- 300~399 重定向
- 400~499 客户端错误
- 500~599 服务器错误
常见状态码:200 成功;401 unauthorized未授权,需要输入用户名密码;404 not Found 服务器无法找到URL中的资源。
1.2 首部
首部分类
- 通用首部:既可以出现在请求报文中,也可以出现在响应报文中
- 请求首部:提供更多有关请求的信息
- 响应首部:提供更多有关响应的信息
- 实体首部:描述主体的长度和内容,或者资源本身
- 扩展首部:规范中没有定义的新首部
- 首部语法:名字后面跟着冒号:,最后CRLF
1.2.1 通用首部
- connection 允许客户端和服务器指定与请求/响应连接有关的选项
- Date 提供日期和时间标志,说明报文是什么时间创建的
- MIME-Version 给出了发送端使用的MIME版本
- Trailer 如果报文采用了分块传输编码方式,就可以用这个首部列出位于报文拖挂(trailer)部分的首部集合
- Transfer-Encoding 告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式
- Update 给出了发送端可能想要"升级"使用的新版本或协议
- Via 显示了报文经过的中间节点(代理、网关)
- Cache-Control 用于随报文传送缓存指示
1.2.2 请求首部
- Client-IP 提供了运行客户端的机器的IP地址
- From 提供了客户端用户的E-mail地址
- Host 给出了接收请求的服务器的主机名和端口号
- Referer 提供了包含当前请求URI的文档的URL
- UA-Color 提供了与客户端显示器的显示颜色有关的信息
- UA-CPU 给出了客户端CPU的类型或制造商
- UA-Disp 提供了与客户端显示器能力有关的信息
- UA-OS 给出了运行在客户端机器上的操作系统名称及版本
- UA-Pixels 提供了客户端显示器的像素信息
- User-Agent 将发起请求的应用程序名称告知服务器
Accept首部
- Accept 告诉服务器能够发送哪些媒体类型
- Accept-Charset 告诉服务器能够发送哪些字符集
- Accept-Encoding 告诉服务器能够发送哪些编码方式
- Accept-language 告诉服务器能够发送哪些语言
- TE 告诉服务器可以使用哪些扩展传输编码
条件请求首部
- Expect 允许客户端列出某请求所要求的服务器行为
- If-Match 如果实体标记与文档当前的实体标记相匹配,就获取这份文档
- If-Modified-Since 除非在某个指定的日期之后资源被修改过,否则就限制这个请求
- If-None-Match 如果提供的实体标记与当前文档的实体标记不相符,就获取文档
- If-Range 允许对文档的某个范围进行条件请求
- If-Unmodified-Since 除非在某个指定日期之后资源没有被修改过,否则就限制这个请求
- Range 如果服务器支持范围请求,就请求资源的指定范围
安全请求首部
- Authorization 包含了客户端提供给服务器,以便对其进行认证的数据
- Cookie 客户端用它向服务器传送一个令牌,它并不是真正的安全首部,但确实隐含了安全功能
- Cookie2 用来说明请求端支持的cookie版本
代理请求首部
- Max-Forward 在通往源端服务器的路径上,将请求转发给其他代理或网关的最大次数,与TRACE方法一同使用
- Proxy-Authorization 与Authorization首部相同,但这个首部是在与代理进行认证时使用的
- Proxy-connection 与connection首部相同,但这个首部是在与代理建立连接时使用的
1.2.3 响应首部
信息性首部
- Age (从最初创建开始)响应持续时间
- Public 服务器为其资源支持的请求方法列表
- Retry-After 如果资源不可用的话,在此日期或事件重试
- Server 服务器应用程序软件的名称和版本
- Title 对HTML文档来说,就是HTML文档的源给出的标题
- Warning 比原因短语中更详细一些的警告报文
协商首部
- Accept-Ranges 对比资源来说,服务器可接受的范围类型
- Vary 服务器查看的其他首部的列表,可能会使响应发生变化,也就是说,这是一个首部列表,服务器会根据这些首部的内容挑选出最合适的资源版本发送给客户端
安全响应首部
- Porxy-authenticate 来自代理的对客户端的质询列表
- Set-Cookie 不是真正的安全首部,但隐含有安全功能,可以在客户端设置一个令牌,一边服务器对客户端进行标识
1.2.4 实体首部
实体首部可以告知报文的接收者它在对什么进行处理
信息性首部
- Allow 列出了可以对此实体执行的请求方法
- Location 告知客户端实体实际上位于何处,用于将接收端定向到资源的位置(URL)上去
内容首部
- Content-Base 解析主体中的相对URL时使用的基础URL
- Content-Encoding 对主体执行的任意编码方式
- Content-language 理解主体时最适宜使用的自然语言
- Content-Length 主体的长度或尺寸
- Content-Location 资源实际所处的位置
- Content-MD5 主体的MD5校验和
- Content-Range 在整个资源中此实体标识的字节范围
- Content-Type 这个主体的对象类型
实体缓存首部
- ETag 此实体相关的实体标记
- Expires 实体不再有效,要从原始的源端再次获取此实体的日期和时间
- Last-Modified 这个实体最后一次被修改的日期和时间
http报文头与实体之间通过一个空行+CRLF分开
2. 代理
web代理服务器是网络的中间实体。代理位于客户端和服务器之间,扮演"中间人"的角色,在各端点之间来回传送HTTP报文。
代理与网关的对比:代理连接的是两个或多个使用相同协议的应用程序;而网关连接的则是两个或多个使用不同协议的端点,网关扮演的是"协议转换器"的角色。
代理的作用
- 儿童过滤器
- 文档访问控制
- 安全防火墙
- web缓存:代理缓存维护了常用文档的本地副本,并将它们按需提供,以减少缓慢且昂贵的因特网通信。
- 反向代理:假扮web服务器,反向代理接收发给web服务器的真实请求,再发起与服务器的通信。
- 内容路由器:根据因特网流量状况以及内容类型将请求导向特定的web服务器。
- 转码器: 代理服务器再将内容发送给客户端之前,可以修改内容的主体格式。