图解HTTP协议(二)

简介: 一、HTTP报文首部结构:报文首部+空行(CR+LF)+报文主体HTTP请求报文:由方法(get,post等)+URI+HTTP版本(http1.

一、HTTP报文首部

结构:报文首部+空行(CR+LF)+报文主体

HTTP请求报文:由方法(get,post等)+URI+HTTP版本(http1.1)+http首部字段(请求首部字段,通用首部字段,实体首部字段)组成

HTTP响应报文:由 HTTP版本,状态码(200 OK 数字和原因语句),HTTP首部字段(响应首部字段,通用首部字段,实体首部字段)组成

4中首部类型:

    通用首部字段:Cache-control =>控制缓存行为   VIA:代理服务器的相关信息  Pragma:报文指令(Pragma:no-cache)等

    实体首部字段:Allow: 资源可支持的HTTP方法  Content-Encoding:实体主题适用的编码方式 Expires:实体主题过期时间   Last-Modified:资源的最后修改日期

 1.通用首部字段

(1)Cache-control :no-cache的含义是分两种情况:

目的是:防止从缓存中返回过期的资源。

   一、 客户端发送的请求中如果包含no-cache指令,则表示客户端将不会接受缓存过的响应。于是,“中间”的缓存服务器必须把客户端请求转发给资源服务器。

    二、服务器返回的响应中包含以后也将不再对缓存服务器请求中提出的资源有效性进行确认,且禁止对其响应资源进行缓存控制。

(2)Cache-control :public指令:则明确表明其它用户也可以利用缓存

(3)Cache-control :private指令:响应只以特定的用户作为对象,缓存服务器会对特定用户提供资源缓存的服务,对于其它用户发过来的请求,代理服务器则不会缓存。

(4)Cache-control :no-store表示不能在本地存储请求或者响应的任一部分。

(5)s-maxage指令:只适用于供多位用户使用的公共缓存服务器,优先级高于Expires和max-age指令,加入缓存小于这个时间那么就接受缓存。如果max-age=0那么直接将请求转发给源服务器。


Connection首部字段:

作用:①控制不再转发给代理的首部字段②管理持久连接:http1.1是默认持久连接。若要关闭,则使用Connection:close

Date字段:表示创建HTTP报文的日期和时间

Transfer-Encoding规定了传输报文主体时,采用的编码方式。

Upgrade:用于检测HTTP协议及其他协议是否可使用更高的版本通信,其参数可以用来指定一个完全不同的通信协议。

via:为了追踪客户端与服务器之间的请求与响应报文传输路径。报文经过代理或网关,会先在首部字段Via中附加该服务器的信息,然后再进行转发。不仅可以追踪报文,还可以避免请求回环发生。

Warning:

 2. 请求首部字段

请求首部字段主要是从客户端往服务器发送请求报文中所使用的字段,用于补充请求附加信息,客户端信息,对响应内容相关的优先级等内容。

Host:告知服务器,请求资源所处的互联网主机名和端口号

Referer:告知服务器请求的原始资源的URI

USER-AGENT:

TE:告知服务端客户端能够处理响应的传输编码方式以及相对优先级

Accept:通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。可使用type/subtype这种形式,以此制定多种媒体类型。

Accept-Charset:通知服务器用户代理支持的字符集,及优先顺序

Accept-Encoding:告知服务器用户代理支持的内容编码及内容编码的优先级顺序。(gzip,compress等)

Accept-Language:告知服务器用户代理能够处理的自然语言集,及优先级

Authorization:用来告知服务器,用户代理的认证信息(证书值)

Except:告知服务器,期望出现的某种特定的行为

From:告知服务器使用用户代理的用户电子邮件地址。目的就是显示搜索引擎等用户代理人的负责人的电子联系方式

IF-Match:条件请求

Max-Forwards:通过Trace方法或者Opions方法,发送包括首部字段Max-Forwards请求时,指定经过服务器最大数目。服务器往下一个服务器转发请求之前,会将Max-Forwards的值减1后重新赋值。当值为0后就不再转发。

3.响应首部字段

(1)Accept-Ranges:告知客户端是否处理范围请求,以指定获取服务端某个部分的资源。当可处理范围请求时值为bytes,反之则指定为none;

(2)Age,告知客户端,源服务器在多久前创建了响应。字段的值为秒。

(3)Etag:告知客户端实体标识。它是一种资源可以将字符串形式做唯一标识的方式。例如资源被缓存时,就会分配唯一标示,同一个网站的中英文版本,就会有不同的标识。

(4)强Etag和弱Etag:

强Etag:不论实体发生多么微妙的变化都会改变其值。弱Etag:只是用于提示资源是否相同。只有资源发生根本改变时,才会改变Etag值。字段值最开始处会附加/w

(5)location:将响应的接收方引导至某个请求URI位置不同的资源。会配合3XX:重定向响应;

(6)Proxy-Authenticate:会把代理服务器所要求的认证信息发送给客户端。

(7)Retry=After:告知客户端应该在多久之后再次发送请求。配合503或者3XX,字段值可以是具体日期,或者秒

(8)Server:告知客户端当前服务器上安装HTTP服务器应用程序的信息。

(9)Vary:可对缓存进行控制,原服务器会向代理服务器传达关于本地缓存使用方法命令,从代理服务器接受到源服务器返回包含Vary指定项的响应之后,若要再进行缓存,仅对请求中含有相同Vary指定的首部字段的请求返回缓存,即使对相同的资源,但由于指定的首部字段不同,因此必须从源服务器获取;例如Vary:Accept-Language,就只能对保持相同Accept-Language值的请求返回缓存。

(10)WWW-Authenticate:用于HTTP访问认证。告知客户端适用于访问请求URI所指定资源的认证方案(Basic和Digest)和带参数提示的质询。

4.实体首部字段:

(1)Allow:用于告知客户端能够支持Request-URI指定资源的所有HTTP方法。,当服务器收到不支持的HTTP方法会以状态码405 作为响应返回,同时还会将支持的HTTP方法写入首部字段Allow后返回。

(2)Content-Ecoding:告知客户端服务器对实体的主体部分选用的内容编码方式。内容编码:是指不丢失实体信息下的进行压缩。

(3)Content-Language:告知客户端的实体使用的自然语言,中文 英文……

(4)Content-Length:表明实体的大小,单位为字节。当对主体内容进行详细的编码的时候,就不在使用该字段了。

(5)Content-Location:给出报文主体部分相对应的URI。和首部字段Location不同,Content-LOCATION表示报文主体返回资源对应的URI(比如访问http://baidu.com,返回的对象却是http://baidu.com/index.html)

(6)Content-MD5:一串由MD5算法生成的值,其目的在于检查报文主体在传输过程中是否完整,以及确认传输到达。 

(7)Content-range:针对请求范围,返回响应时使用的首部字段Content-Range,能告知客户端作为响应返回实体的哪个部分符合范围的请求,字段值,以字节为单位,表示当前发送部分及整个实体大小。

(8)Content-type:说明实体内对象的媒体类型。和首部Accept一样,字段值有type/subtype形式赋值。

(9)Expires:将资源失效日期告知到客户端。缓存服务器在接收到含有首部字段Expires的响应之后,会以缓存来应答请求

(10)Last-Modified:指明资源最终修改时间。

Cookie服务的首部字段:

工作机制,用户状态及状态管理

set-cookie:开始状态管理所使用的Cookie信息,响应首部字段

cookie:服务器接收到的Cookie,请求首部字段


相关文章
|
17天前
|
网络协议 Linux iOS开发
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
推荐:实现RTSP/RTMP/HLS/HTTP协议的轻量级流媒体框架,支持大并发连接请求
38 1
|
1月前
|
网络协议 Linux
HTTP协议基本原理简介(二)
HTTP协议基本原理简介(二)
23 1
|
1月前
|
前端开发
webpack如何设置devServer启动项目为https协议
webpack如何设置devServer启动项目为https协议
136 0
|
1月前
|
缓存 前端开发
HTTP协议基本原理简介(三)
HTTP协议基本原理简介(三)
14 1
|
1天前
|
缓存 网络协议
【计算机协议】第一章——HTTP协议详解
【计算机协议】第一章——HTTP协议详解
|
3天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
5天前
|
缓存 安全 网络协议
Http协议是什么
【4月更文挑战第12天】HTTP是用于从WWW服务器传输超文本到浏览器的协议,基于TCP/IP,特点包括无连接、无状态、面向对象、无阻塞和可缓存。它的工作原理是客户端发送请求,服务器处理后返回响应。自1989年创建以来,HTTP已发展支持多媒体内容传输,并通过HTTPS提供安全保护。学习更多可参考计算机网络技术文献。
15 6
|
7天前
|
存储 JSON 前端开发
网络原理(4)HTTP协议(下)
网络原理(4)HTTP协议
20 0
|
17天前
|
XML JSON JavaScript
推荐一个比较好用的c++版本http协议库-cpp-httplib
推荐一个比较好用的c++版本http协议库-cpp-httplib
36 1
|
25天前
|
运维 监控 算法
slb监听协议http
SLB的HTTP监听器用于处理HTTP请求,配置时选择协议类型为HTTP和前端端口(如80)。SLB根据负载算法将请求转发至健康后端服务器,并支持会话保持。通过`X-Forwarded-For`和`X-Forwarded-Proto`头处理请求信息。由于不涉及SSL/TLS,数据传输不安全,推荐升级至HTTPS以加密通信。SLB提供性能监控和故障排查工具,帮助运维管理。
22 5