开发者学堂课程【Java Web 开发-Web 应用、Tomcat、HTTP 请求与响应第十六课时:常用响应头介绍】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/575/detail/7966
常用响应头介绍
内容简介:
一、响应内容
二、响应码
三、其他响应头
四、HTML 中指定相应头
一、响应内容
1.响应协议的格式如下:
响应首行;
响应头信息;
空行;
响应体。
2. 响应代码如下:
响应内容是由服务器发送给浏览器的内容,浏览器会根据响应内容来显示。
HTTP/1. 1 200 OK
Server: Apache-Coyote/1. 1
Content-Type:text/html;charset=UTF-8
Content-Length: 724
Set-Cookie:JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello
Date: Wed, 25 Sep 2012 04: 15: 03 GMT)
<
IDOCTYPEHTMLPUBUC"-//W3C//DTDHTML4.01Transitional//EN">
<htm
l>
<head>
<base href="http: //localhost: 8080/hello/">
<title> My JSP 'index.jsp'starting page </title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires"content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keywor
d3
”
>
<meta http-equiv="description" content="This is my page">
<!
<link rel="stylesheet"type="text/css"href="styles.css">
>
</head>
<body>
<form
action=""method="post">
3.关键字:
<input type="text"name="keyword"/>
<input type="submit" value="提交"/>
</form>
</body>
</htm
l>
4.解释
HTTP/1. 1 200 OK:
响应协议为 HTTP1. 1,状态码为200,表示请求成功,OK 是对状态码的解释;
Server:Apache-Coyote/1. 1:
服务器的版本信息;Content-Type:text/html;charset=UTF-8:
响应体使用的编码为 UTF-8)
Content-Length:724:
响应体为724字节;Set-Cookie:JSESSIONID=C97E2B4C55553EAB46079A4F263435A4;Path=/hello:
响应给客户端的 Cookie
Date:Wed,25 Sep 2012 04:15:03 GMT:
响应的时间,这可能会有8小时的时区差;
二、响应码
响应头对浏览器来说很重要,它说明了响应的真正含义。例如200表示响应成功了,302表示重定向,这说明浏览器需要再发一个新的请求。
200:
请求成功,浏览器会把响应体内容(通常是 html )显示在浏览器中;
404:
请求的资源没有找到,说明客户端错误的请求了不存在的资源;
500:
请求资源找到了,但服务器内部出现了错误;
302:
重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头 Location ,它指定了新请求的 URL 地址;
304:当用户第一次请求 index.html 时,服务器会添加一个名为 Last-Modified 响应头,这个头说明了 index.html 的最后修改时间,浏览器会把 index.html 内容,以及最后响应时间缓存下来。当用户第二次请求 index.html 时,在请求中包含一个名为 If-Modified-Since 请求头,它的值就是第一次请求时服务器通过 Last-Modified 响应头发送给浏览器的值,即 index.html 最后的修改时间,If-Modified-Since 请求头就是在告诉服务器,这里浏览器缓存的 index.html 最后修改时间是这个,看看现在的index.html 最后修改时间是不是这个,如果还是,那么就不用再响应这个 index.html 内容了,我会把缓存的内容直接显示出来。
而服务器端会获取 If-Modified-Since 值,与 index.html 的当前最后修改时间比对,如果相同,服务器会发响应码304,表示 index.html 与浏览器上次缓存的相同,无需再次发送,浏览器可以显示自己的缓存页面,
如果比对不同,那么说明 index.html 已经做了修改,服务器会响应200。
浏览器第一次请求 index.html
浏览器缓存了 index.html 的内容:以及最后的修改时间
第一次响应:200包含响应头:Last-Modifiedindx.htal 文件的最后
浏览器緩存 index.htnl 内宴,以及最后修改时间。
服务器获取请求中的最后修改时间,与 index.html 当前的最后修改时间比较,发现相同,那公说明这段时间 index.html 没有修改过。
第二次请求 index.html 请求中包含了 If-Modif1ed-Since 头,内容是浏葱器缓存的Index.html 的最后修改时间
浏览器接收到304响应信息,直接从缓存中获取 Index.html 内容显示出来。
响应头:
Last-Modified: 最后的修改时间;
请求头:
If-Modified-Since: 把上次请求的 index.html 的最后修改时间还给服务器;状态码:304,比较 If-Modified-Since 的时间与文件真实的时间一样时,服务器会响应304,而且不会有响正文,表示浏览器缓存的就是最新版本!
三、其他响应头
告诉浏览器不要缓存的响应头:
Expires: -1;
Cathe-Control:no-cache;
Pragma:no-cache;
自动刷新响应头,浏览器会在3秒之后请求http://www.itcast.cn:
Refresh: 3;url=http: //www.itcast.cn
四、 HTML 中指定响应头
在 HTMI 页面中可以使用<meta http-equiv=""content="">
来指定响应头。
例如在 index.html 页面中给出<meta http-
equiv="Refresh"content="3;url=http://www.itcast.cn">,
表示浏览器只会显示 index.html 页面3秒,然后自动跳转到http://www.itcast.cn。