【1】普通请求和AJAX请求
一次网络请求过程如下图所示(GET):
注意:GET请求无请求体,POST才有请求体。
一次AJAX网络请求过程如下图所示(POST):
注意:POST请求有请求体,故与GET请求相比,请求头中多了Content-Length和Content-Type属性。
【2】HTTP消息头简要
(1)通用信息头
即能用于请求消息中,也能用于响应信息中,但与被传输的实体内容没有关系的信息头,如Data,Pragma。
主要: Cache-Control , Connection , Data , Pragma , Trailer , Transfer-Encoding , Upgrade。
(2)请求头
用于在请求消息中向服务器传递附加信息,主要包括客户机可以接受的数据类型,压缩方法,语言,以及客户计算机上保留的信息和发出该请求的超链接源地址等。
主要: Accept , Accept-Encoding , Accept-Language , Host 。
(3)响应头
用于在响应消息中向客户端传递附加信息,包括服务程序的名称,要求客户端进行认证的方式,请求的资源已移动到新地址等。
主要: Location , Server , WWW-Authenticate(认证头)。
(4)实体头
用做实体内容的元信息,描述了实体内容的属性,包括实体信息的类型,长度,压缩方法,最后一次修改的时间和数据的有效期等。
主要: Content-Encoding , Content-Language , Content-Length , Content-Location , Content-Type。
(5)扩展头
主要:Refresh, Content-Disposition。
【3】General
① Request URL:http://localhost:8080/AJAX/index2.jsp
- 表示请求的地址(网络资源位置)
② Request Method:GET
- 表情请求的方法类型:get , post , put , delete …
③ Status Code:200 OK
- 响应状态码:200表示成功返回响应
④ Remote Address:127.0.0.1:8080
- 表示远程服务器地址
【4】Response Headers
① Content-Length:1432
- 响应体的长度(响应内容的字节数)
② Content-Type:text/html;charset=UTF-8
- 返回的响应MIME类型与编码–告诉浏览器它发送的数据属于什么文件类型。
③ Content-Disposition
当Content-Type 的类型为要下载的类型时 , 这个信息头会告诉浏览器这个文件的名字和类型。
Content-Disposition中指定的类型是文件的扩展名,并且弹出的下载对话框中的文件类型图片是按照文件的扩展名显示的,点保存后,文件以filename的值命名,保存类型以Content中设置的为准。
注意:在设置Content-Disposition头字段之前,一定要设置Content-Type头字段。
④ Content-Encoding:gzip
内容编码方式。内容编码方式与字符编码方式不同,字符编码方式由Content-type首部或文档内部的信息确定,指出如何将字符编码为字节。内容编码方式则指出字节如何编码为其他字节。
⑤ Date:Mon, 20 Feb 2017 01:13:51 GMT
- 原始服务器消息发出的时间
④ Server:Apache-Coyote/1.1
- web服务器软件名称
【5】Request Headers
① Accept:text/html,application/xhtml+xml, application/xml;q=0.9,image/webp,
/;q=0.8
Accept表示浏览器支持的 MIME 类型。
MIME的英文全称是 Multipurpose Internet Mail Extensions(多功能 Internet 邮件扩充服务)。它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。text/html,application/xhtml+xml,application/xml 都是 MIME 类型,也可以称为媒体类型和内容类型。
斜杠前面的是 type(类型),斜杠后面的是 subtype(子类型)。type 指定包含的时何种数据,subtype 标识数据的特定类型,即大类中的小类。例如,image/jpeg,类型是image,子类型是jpeg。
已经定义了8个顶级类型:
text/*:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;
image/*:表示图片;
model/*:表示3D模型,如VRML文件;
audio/*:表示声音;
video/*:表示视频,可能包括声音;
message/*:表示协议特定的信封,如email消息和HTTP响应;
application/*:用于传输应用程序数据或者二进制数据;
multipart/*:表示多个文档和资源的容器;
类型最新列表可以参考:Media Types
当你有如下Accept头,将遵守如下规则进行应用:
1.Accept:text/html,application/xml,application/json
将按照如下顺序进行produces的匹配 ①text/html ②application/xml ③application/json
2.Accept:application/xml;q=0.5,application/json;q=0.9,text/html
将按照如下顺序进行produces的匹配 ①text/html ②application/json ③application/xml
参数为媒体类型的质量因子,越大则优先权越高(从0到1)
3.Accept:*/*,text/*,text/html
将按照如下顺序进行produces的匹配 ①text/html ②text/* ③*/*
② Accept-Encoding:gzip, deflate, sdch, br
- 指定浏览器可以支持的web服务器返回内容压缩编码类型。
Accept-Encoding表示浏览器有能力解码的编码类型。
gzip是 GNU zip 的缩写,它是一个 GNU 自由软件的文件压缩程序,也经常用来表示 gzip 这种文件格式。
deflate是同时使用了 LZ77 算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法。
③ Accept-Language:zh-CN,zh;q=0.8
- 浏览器支持的语言分别是中文和简体中文,优先支持简体中文。
Accept-Language表示浏览器所支持的语言类型。
zh-cn表示简体中文;zh 表示中文;
q是权重系数,范围 0 =< q <= 1,q 值越大,请求越倾向于获得其“;”之前的类型表示的内容。
若没有指定 q 值,则默认为1,若被赋值为0,则用于提醒服务器哪些是浏览器不接受的内容类型。
④ Cache-Control:max-age=0
- 指定请求和响应遵循的缓存机制
max-age>0 :直接从流览器缓存中提取
max-age<=0 :向server 发送http 请求确认 ,该资源是否有修改。有的话 返回200 ,无的话 返回304.
⑤ Connection:keep-alive
- 表示是否需要持久连接。(HTTP 1.1默认进行持久连接)
Connection表示客户端与服务连接类型;Keep-Alive表示持久连接;即,重用先前打开的socket。
设置http.keepAlive为true或者false,表示启用/禁用HTTP Keep-Alive(默认是启用的)。
设置http.maxConnections为你希望同时保持打开的socket数。默认为5。
⑥ Cookie:JSESSIONID=37FDBFB5E02C9DF3F94BDCE1F75D5291
- HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。
⑦ Host:localhost:8080
- 指定请求的服务器的域名和端口号
⑧ Upgrade-Insecure-Requests:1
- 向服务器指定某种传输协议以便服务器进行转换(如果支持)
告诉服务器,自己支持这种操作,也就是我能读懂你服务器发过来的上面这条信息,并且在以后发请求的时候不用http而用https
⑨ User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36
User-Agent(用户代理),简称 UA,它是一个特殊字符串头,使得服务器能够识别客户端使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
⑩ Authorization
Authorization的作用是当客户端访问受口令保护时,服务器端会发送401状态码和WWW-Authenticate响应头,要求客户机使用Authorization来应答。
例如:
<%@ page pageEncoding="UTF-8" contentType="text/html;charset=utf-8" import="java.util.*,java.text.*" %>
<%=DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.CHINA).format(new Date())%>
<%
response.setStatus(401);
response.setHeader("WWW-Authenticate", "Basic realm=\"Tomcat Manager Application\"");%>