HTTP协议详解文章
HTTP协议详解(一)
一.HTTP请求头
图:
If-Modified-Since:把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容,客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中。
If-Modified-Since: Thu,09 Feb 2012 09:07:01 GMT
If-None-Match:If-None-Match与ETag一起起作用,工作原理是在HTTP Response中添加ETag信息。当用户再次请求该资源时,将在HTTP Request中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变,将返回一个304状态告诉客户端使用本地缓存文件,否则将返回200状态码和新的资源和ETag。
Cache-Control:指定请求和响应遵循的缓存机制。缓存指令是单向的,且是独立的,Cache-Control不会修改另一个消息处理过程中的缓存处理。
Cache-Control:Public可以被任何缓存所缓存
Cache-Control:private内容只缓存到私有缓存中
Cache-Control:no-cahce所有内容都不会被缓存
Cache-Control:no-store用于防止重要的信息被无意的发布,在请求消息中发送将使得请求和响应消息都不使用缓存
Cache-Control:max-age客户端可以接收生存期不大于指定时间的响应
Cache-Control:min-fresh客户端可以接收响应时间小于当前时间加上指定时间的响应
Cache-Control:max-stale客户端可以接收超出超时期间的响应消息,如果指定max-stale消息的值,那么客户端可以接收超出超时指定值之内的响应消息
Accept:浏览器可以接受的MIME类型,例如Accept:text/html代表浏览器可以接受服务器回发的类型为text/html,也就是我们常说的HTML文件,如果服务器无法返回text/html类型的数据,服务器应该返回一个406错误。通配符*代表任意类型,例如:Accept:*/* 代表浏览器可以处理所有类型。
Accept-Encoding:浏览器申明自己可以接收的编码方法。通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate)。Servlet能够向支持gzip的浏览器返回gzip编码的HTML页面。
Accept-Encoding:gzip,deflate
Accept-Language:浏览器申明自己可以接收的语言,语言跟字符集的区别,中文是语言,中文有很多字符集,例如:gbk,gb2312
Accept-Charset:浏览器可以接收的字符集。
User-Agent:告诉HTTP服务器,客户端使用的操作系统和浏览器的名称和版本,示例截图如下:
Refer:包含一个URL,用户从该url代表的页面出发访问当前请求的页面。提供了Request的上下文信息的服务器,告诉服务器我是 从哪个链接过来的。
Connection:Keep-Alive当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭。如果客户端再次访问这个服务器的网页,会继续使用这条已经建立的连接。HTTP 1.1默认进行持久连接,利用持久连接的优点,当页面包含多个元素时,显著减少下载所需的时间,要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的做法是先把内容写入ByteArrayOutputStream,然后再正式写出内容之前计算它的大小。
Connection:Close代表一个Request完成后,客户端和服务器之间用于传输HTTP 数据的连接会关闭,当客户再次发送Request,需要重新建立TCP连接。
Host:主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来,HTTP 1.1请求必须包含主机头域,否则会以400状态码返回。
Cookie:最重要的请求之一
Content-Length:表示请求消息正文的长度。
UA-Pixels,UA-Color,UA-OS,UA-CPU:由于某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。
Range:可以请求实体的一个或多个子范围
bytes=0-499 表示头500个字节
bytes=500-999 表示第二个500字节
bytes=-500 表示最后500个字节
bytes=500- 表示500字节以后的范围
bytes=0-0,-1 表示第一个和最后一个字节
但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206返回而不是200.
原文地址:https://www.cnblogs.com/xiaowangzi1987/p/9115299.html