赞
踩
【3】HTTP协议详解
【3.1.2】HTTP1.0的会话方式
1)基于http1.0的客户机与服务器的信息交换过程包括4个步骤:建立连接;发送请求信息;回送响应信息;关闭连接;
2)http协议是无状态的:浏览器到web服务器之间的所有通信都是完全独立分开的请求和响应对,当浏览器向服务器发出一个访问请求,web服务器返回html文档给浏览器后,两者不会有任何关系;
3)浏览器与web服务器之间可以加入一个或多个中间代理服务器;在web服务器前端使用多个代理服务器与浏览器进行通信,可以有效减少web服务器的访问负载(因为有缓存);
【3.1.3】HTTP1.1 与 HTTP1.0的比较
1)http1.0规定浏览器与服务器只保持短暂的连接;HTTP1.1 支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少建立和关闭连接的消耗;
2)http1.1允许客户端不用等到上一次请求结果返回,就发出下一次请求(异步);这个功能被称为管道线;
3)http1.1 增加更多的请求头和响应头来改进和扩充HTTP1.0的功能;
如 基于域名的虚拟主机是通过 http1.1中的 Host头字段来实现的;http1.0没有Host头字段;
【3.1.5】http消息头
1)通用信息头:既能用于请求消息,也能用于响应消息,但与被传输的实体内容没有关系的常用消息头;
2)请求头:用于在请求消息中向服务器传递附加信息;
3)响应头:用于在响应消息中向客户端传递附加信息;
4)实体头:用作实体内容的元信息, 描述了实体内容的属性;
补充)元信息指的是描述信息的信息;
【3.2】HTTP/1.1协议中共定义了八种方法,来表明对 Request-URL 指定的资源不同请求方式:
1)OPTIONS:返回服务器对指定资源提供的的 HTTP 请求方法;
2)HEAD:该方法与 GET 方法类似,获取指定的资源,但该方法不返回请求体;
3)GET:向指定资源提交数据进行请求处理;请求参数追加在请求url地址后面;
补充)get方法用于获取指定的资源,而且应该是安全的和幂等的。幂等是一个数学的概念,通俗的讲就是一次请求和多次请求返回的结果是一致的。该方法一般用来查询数据,但是需要考虑查询条件的长度问题,参考HTTP报文结构及请求数据大小,例如:
根据用户ID获取用户信息,该接口只包含固定长度的用户ID信息,因此该接口可以使用 GET 方法提供服务。
根据多个查询条件获取用户列表数据,查询条件可能会包含用户姓名、单位名称、岗位名称等不确定的长度的字段,不建议使用 GET 方法,建议使用 POST 方法。
4)POST:向指定资源提交数据进行请求处理,如:提交表单或者上传文件;请求参数封装在请求实体中;
5)PUT:客户机要更新服务器上的网页内容;
6)DELETE:删除指定的资源;
7)TRACE:回显服务器收到的请求,主要用于测试或诊断;
8)CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器;
【3.2.3】响应状态码
https://blog.csdn.net/pacosonswjtu/article/details/79619759
【3.3】通用消息头
0)介绍:可以用于请求消息,也可以用于响应消息;包括一些与被传输的实体内容没有关系的常用消息头字段;
1)Cache-Control:
1.1)用在请求消息中:通知代理服务器如何使用已缓存页面,取值有 no-cache, no-store, max-age, max-style, min-fresh, no-transform, only-if-cached等;
1.2)用在响应消息中:通知客户机和代理服务器如何使用缓存,取值有 public, private, no-cache, no-store, no-transform, must-revalidate, proxy-revalidate, max-age, s-maxage等;
1.3)可以设置多个值,
如 Cache-Control: no-store,no-cache,must-revalidate
2)Connection:指定在处理完本次请求后,服务器与客户端是否还保持连接;
如Connection: keep-alive
3)Date:用于表示 http 消息产生的当前时间;必须为 GMT 格式;
如Date: Tue, 11 Jul 2018 22:49:33 GMT
4)Pragma:只能设置为 no-cache;
如 Pragma: no-cache
补充)在http1.1中, Cache-Control的no-cache 比 Pragma的no-cache 更为可靠;不过由于浏览器兼容性问题,通常进行如下设置:
- <html>
- <head>
- <!-- base标签表示uri相对路径的基准路径 -->
- <base href="http://localhost:8080/asite6/chapter6/ex6_11/visitor.html"/>
- <title>html template</title>
- <!-- meta 模拟响应消息头:Content-Type 表示内容类型 -->
- <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
- <!-- meta 模拟响应消息头:下面3个响应头都是为了禁用浏览器缓存,因为存在着浏览器兼容问题
- 所以设置了3个响应头以覆盖所有浏览器 -->
- <meta http-equiv="Expires" content="0">
- <meta http-equiv="Cache-Control" content="no-cache">
- <meta http-equiv="Pragma" content="no-cache">
- </head>
- <body>
- <a href="chapter6/ex6_10/validate.jsp">访问validate.jsp页面</a>
- </body>
- </html>
5)Trailer:放置在http消息尾部的头字段,需要用 Trailer字段进行说明;
10)If-Modified-Since:当浏览器再次访问已缓存页面时,只有该页面自某个指定时间以来发生过更改,服务器才会把该页面内容回送给浏览器;If-Modified-Since用于表示这个指定时间;
如果If-Modified-Since时间以来,该页面都没有发生更改,服务器将回送一个 304(Not-Modified)状态码来表示浏览器使用本地缓存;
11)If-None-Match:其作用与 If-Match正好相反;
12)If-Range:和Range一起使用, 设置值可以是实体标签Etag或 http的GMT格式时间;
12.1)实体内容:服务器比较请求页面的Etag 与 If-Range的Etag内容是否相同,若相同,则页面没有更新,则返回Range指定的网页部分内容;若不同,则表明网页已经更新过了,则返回全部内容;
12.2)GMT时间:服务器检测自 该时间以来,请求的页面是否发生过修改;若没有修改,则返回Range指定的部分内容;若修改过,则返回修改后的全部内容;
13)If-Unmodified-Since:一般只用于 PUT方式, 其值为http的GMT时间格式, 作用与 If-Modified-Since正好相反;
14)Max-Forwards:指定当前请求可以途径的代理服务器数量;每经过一个代理服务器,该值就自减1;如果为0,但请求还没有到达最终的web服务器的话,那么代理服务器将终止转发该请求了;
15)Proxy-Authentication:针对代理服务器的用户信息认证,其作用与 Authorization 相同,但仅仅针对代理服务器而言;
16)Range:指定服务器只需要返回部分内容和内容范围,这对较大文档的端点续传非常有用;(干货——这里提到了端点续传)
如
Range: bytes=100-599 返回第100个字节到第599个字节
Range: bytes=100- 返回第100个字节以后的内容
Range: bytes=-100 返回最后100个字节的内容
17)Referer:表示发出请求的超链接所在网页的url地址;即这个请求是通过哪一个url标识的网页所发出来的;
18)TE:指定客户机可以接受的扩展传输编码类型 和 使用 chunked 传输编码类型时是否允许使用 Trailer 头字段;
如 TE: trailers,deflate
19)User-Agent:用于指定浏览器或其他客户端程序的类型和名称,以便服务器对不同类型的浏览器返回不同内容;
如google浏览器, User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36
【3.5】响应头
0)用于服务器在响应消息中向客户端传递附加信息,包括服务程序名,被请求资源需要的认证方式,被请求资源已移动到的新地址等信息;
1)Accept-Range:说明当前web服务器是否接受 Range请求和Range请求中指定的数据单位;
如果服务器不想使用Range请求头,则 Accept-Range: none
如果服务器想使用以 byte为单位的Range请求,则 Accept-Range: bytes
2)Age:用于指定当前网页文档可以在客户机或代理服务器中缓存的有效时间,以秒为单位;
如 Age: 1234783284
当客户机访问服务器时,会使用当前值减去 服务器返回的Date响应值 得到间隔时间,如果间隔时间小于 Age, 则继续使用缓存;如果大于,则本地缓存失效,则需要请求服务器;
3)Etag:用于向客户机传送代表实体内容特征的标记信息,这些标记信息称为实体标签;用于比较在不同时间点获得的同一个url的实体内容是否相等;
4)Location:通知客户机应该到哪个新地址获取文档;
补充1)响应状态码为300~399的响应消息都应该使用 Location头字段把文档的新url告诉浏览器,以便其自动重新连接到新url获取文档内容;
补充2)http消息中不能同时出现 Location 和 Content-Type这两个头字段;
5)Proxy-Authenticate:针对代理服务器的用户信息认证,其作用与 WWW-Authenticate响应头相同;
6)Retry-After:告诉客户机可以在什么时间重复发出刚才的请求,需要与 503(Service Unavailable)响应状态码结合使用;其值为 http的GMT格式;
如 Retry-After: Tue, 11 Jul 2018 23:58:11 GMT
7)Server:指定服务器软件的产品名称;
8)Vary:指定影响了服务器回传的响应内容的请求头字段名;
如 Vary:Accept-Encoding
9)WWW-Authenticate:当客户机试图访问一个受口令和密码保护的页面时,服务器需要结合401 和 WWW-Authenticate,指示客户端应该在 Authorization请求头中以什么样的认证方式提供用户名和密码信息,WWW-Authenticate指定两种认证方式:BASIC 和 DIGEST ;
如 WWW-Authenticate: BASIC realm="baidu"
其中realm属性用于指定当前资源所属的域,域定义了同一个主机内的一个受保护区间,它可以是任意字符串;
补充)401-未经授权;当客户机试图访问一个受口令和密码保护的页面,且在请求中没有使用 Authorization请求头传递用户信息时,服务器返回401状态码;
【3.6】实体头
0)介绍:实体头是实体内容的元信息,描述了实体内容的属性,包括实体信息类型,长度,压缩方法,最后一次修改时间,数据有效期等;
1)Allow:指定客户机请求的资源所支持的请求方法(如GET POST),通常伴随405(Method Not Allowed)状态码一起使用;
补充)405-不允许此请求方式;请求行中的请求方式对指定的资源不使用;如一些资源只能用get方式访问,使用post方式,受到服务器的405状态码;
2)Content-Encoding:指定实体内容的压缩编码方式;注意:Content-Type响应头字段指定的MIME类型是实体内容压缩编码前的类型;其取值同 Accept-Encoding 头字段的值;
3)Content-Language:指定返回的网页文档的国家语言类型,值可取 zh-cn, en-us, ja 等;
4)Content-Length:用于表示实体内容长度(字节数);在持久连接 keep-alive时,这个头字段在非 chunked 传送编码的响应消息中是必不可少的;
5)Content-Location:指定响应消息中所封装的实体内容的实际位置路径,可以是绝对路径,也可以是相对路径,如:
Content-Location: http://www.baidu.com/index.html
6)Content-MD5:指定实体内容的MD5算法算出的数字摘要的 base64 编码结果,以提供实体内容的完整性检查;
7)Content-Range:用于指定服务器返回的部分实体内容的位置信息;只有客户机使用 Range请求头要求服务器返回部分内容时,服务器的响应头中才包含 Content-Range头;
如 Content-Range: bytes 2543-4532/7898 bytes是单位,2543-4532表示从第2532个字节到第4532个字节的内容, 内容总字节数为7898;
8)Content-Type:用于指出实体内容的MIME类型;
【补充】
补充1)MIME类型包含主类型和子类型,用 / 分隔。如主类型为 image,子类型为jpg,则MIME类型表示为 image/jpg;
补充2)*/* 表示所有的MIME类型;
补充3)image/* 表示所有image的子类型;
9)Expires:用于指定当前文档应该在什么时候被认为过期,浏览器在该时间之后不能再使用本地缓存,而是向服务器发出请求;
如 Expires: Tue, 11 Jul 2018 00:23:23 GMT
补充)如果Expires的设置值格式不正确,特别设置为0时,客户端应该认为当前网页已过期,不用缓存;这也是服务器禁止浏览器使用本地缓存的方式之一;
10)Last-Modified:用于指定文档的最后修改时间,GMT格式;客户端发送的请求头 If-Modified-Since中的时间值,正是上次响应消息中接受到的Last-Modified值;
【3.7】扩展头
0)介绍:在http消息中,也可以使用在 http1.1中没有定义的头字段,这些头字段统称为 自定义的http头或扩展头;通常作为实体头来处理;
补充)流行的浏览器都使用如下几个常用的扩展头: Cookie, Set-Cookie, Refresh 和 Content-Disposition 等;
1)Refresh:告诉浏览器过多少秒后自动刷新页面;
如 Refresh: 1
补充)还可以在Refresh的值后面增加一个url参数,
如 Refresh: 1;url=http://www.baidu.com
2)Content-Disposition:指定了客户端接收程序处理数据的方式,有 inline 和 attachment 两种方式;
方式1)inline:直接处理;
方式2)attachment:要求用户干预并控制接收程序如何处理数据内容;在http应用中,只可以使用 attachment方式;且后面跟上 filename,
该参数值是服务器建议浏览器将实体内容保存到 filename为文件名的文件中;(这里是浏览器从服务器下载文件请求的响应头)
补充)在设置 Content-Disposition之前,必须设置 Content-Type头字段;
如
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=aaa.zip
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。