http 基础知识
http 采用了请求/响应模型。
客户端向服务器发送一个请求,请求头包含请求的方法、url 、协议版本、请求修饰符、客户信息、内容的类似于 MIME 的消息结构。
服务器以一个状态行作为响应,响应的内容包括消息协议版本、成功或者错误编码加上服务器信息、实体元信息、可能的实体内容。
一、通用头域
通用头域包含请求和响应都支持的头域。
通用头域包含 Cache-Control 、Connection 、Date 、Prama 、Ttansfer-Encoding 、Upgrade、Via
Cache-Control
功能:指定请求和响应遵循的缓存机制。
请求时的缓存指令:no-cache、no-store、max-age、max-stale、min-fresh、only-if-cache
响应消息中的指令:public、private、no-cache、no-store、no-tramsform、must-revalite、proxy-revalite、max-age
public:响应可被任何缓存区缓存。
private:对于单个用户的整个或部分响应消息,不能被共享处理。这允许服务器仅仅描述当前用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache:请求或响应消息不能缓存。
no-store:在请求消息中发送,将使得请求和响应消息都不能被缓存(用于防止重要消息被无意发布)。
max-age:客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh:客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-store:客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
Connection
Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。
KeepAliveTime 值控制 TCP/IP 尝试验证空闲连接是否完好的频率。
Date
消息发送的时间
Prama
用来包含实现特定的指令,最常用的是 Prama:no-cache。
二、请求消息
Host 头域
指定请求资源的 intenet 主机和端口号,必须表示请求 url 的原始服务器或网关的位置。http/1.1 请求必须包含主机头域,否则系统会以 400 状态码返回。
Referer 头域
Referer 头域允许客户端指定请求 url 的资源地址,这可以允许服务器生成回退链表,可用来登录、优化 cache 等。他也允许废除的或错误的链接由于维护的目的被追踪。如果请求 url 没有自己的 url 地址,Referer 不能被发送。如果指定的是部分 url 地址,则此地址应该是一个相对地址。
Range 头域
Range 头域可以指定请求实体的一个或多个子范围。
服务器可以忽略此请求头,如果无条件 get 包含 Range 请求头,状态会以状态码 206 (PartialContent)返回而不是以 200(OK)返回。
User-Agent 头域
User-Agent 头域的内容包含发出请求的用户(客户端)的信息。
三、响应消息
响应头域允许服务器传递不能放在状态行的附加信息,这些头域主要描述服务器的信息和 Request-Url 进一步的信息。响应头域包含 Age、Proxy-Authenticate、Public、Retry-After、Server、Vary、Warning、WWW-Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般会作为实体头域处理。
Location 响应头
Location 响应头用于接收者重定向到一个新的 URI 地址。
Server 响应头
Server 响应头包含处理请求的原始服务器的软件信息。此头域包含多个产品标识和注释,产品标识一般按照重要性排序。
四、实体消息
请求消息和响应消息都可以包含实体消息,实体消息一般由实体头域和实体组成。
Content-Type 实体头
Content-Type 实体头用于向接收方指示实体的介质类型,指定 HEAD 方法送到接收方的实体介质类型,或 get 方法发送的请求介质类型。
Content-Range 实体头
Content-Range 实体头指定整个实体中的一部分的插入位置,它也指示了整个实体的长度。在服务器向客户端返回一个部分响应,它必须描述响应覆盖的范围和整个实体的长度。
Last-modified 实体头
Last-modified 实体头指服务器上保存内容的最后修订时间。
五、运作方式
在WWW中,“客户”与“服务器”是一个相对的概念,只存在于一个特定的连接期间,即在某个连接中的客户在另一个连接中可能作为服务器。基于HTTP协议的客户/服务器模式的信息交换过程,它分四个过程:建立连接、发送请求信息、发送响应信息、关闭连接。
任何服务器除了包括HTML文件以外,还有一个HTTP驻留程序,用于响应用户请求。你的浏览器是HTTP客户,向服务器发送请求,当浏览器中输入了一个开始文件或点击了一个超级链接时,浏览器就向服务器发送了HTTP请求,此请求被送往由IP地址指定的URL。驻留程序接收到请求,在进行必要的操作后回送所要求的文件。在这一过程中,在网络上发送和接收的数据已经被分成一个或多个数据包(packet),每个数据包包括:要传送的数据;控制信息,即告诉网络怎样处理数据包。TCP/IP决定了每个数据包的格式。如果事先不告诉你,你可能不会知道信息被分成用于传输和再重新组合起来的许多小块。
六、常见的 http 状态码
1xx:信息响应类,表示接收到请求并且继续处理。
100:表示服务器接收到了请求头,如果请求没完成就继续发送,如果完成了则忽略
101:表示切换协议,常用在 WebSocket 协议切换。
2xx:处理成功响应类,表示动作被成功接收、理解和接受。
200:最为常见的状态码,表示请求已成功
203:表示服务器完成了请求但返回的内容经过了代理服务器的修改
204:表示服务器完成了请求但没有返回内容
206:表示服务器完成了请求返回了部分内容以及内容的区间(Range 头)
3xx:生定向响应类,为了完成指定的动作,必须接受进一步的处理。
301:永久重定向,代表请求资源已经永久移动到新位置,一般网站在修改域名之后,对原域名 设置 301 以便搜索引擎收录新地址
302:临时重定向
303:表示资源存在另一个 URI,应使用 GET 访问
304:表示资源未修改,客户端可以使用之前下载的版本,无需重新传输
4xx:客户端错误响应类,客户请求包含语法错误或不能正确执行。
400:请求有明显错误,服务器无法处理请求
401:表示请求需要用户认证,响应中会携带 WWW-Authenticate 头
403:表示服务器理解请求但是拒绝执行
404:最常见的 4XX 状态码,表示请求失败,服务器上找不到相关资源
5xx:服务器错误响应类,服务器不能正确执行一个正确的请求。
500:通用的错误消息,表示服务器出现错误
502:表示服务器在请求一个上游服务器时出错了
503:表示服务器正在维护或是过载了,通常是临时性的
504:表示服务器在请求一个上游服务器时用时过长