[toc]
- 基于
HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。
- HTTP"客户端" 请求者
一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。
- HTTP"服务器" 反馈者
一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。
- URL作用
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。
一旦建立连接后,数据消息就通过类似Internet邮件所使用的格式[RFC5322]和多用途Internet邮件扩展(MIME)[RFC2045]来传送。
- HTTP协议的报文格式
客户端发送的HTTP报文,我们称为请求链;中介服务器或Web服务器发送的HTTP报文,称为响应链。两种报文都遵循以下格式:
- 一般开始行,即请求报文的请求行和应答报文的状态行;
- 总头;
- 报文头;
- 一个空行;
- 报文体
- 示例结构

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部俗称报头(header)、空行和请求数据四个部分组成,如下图所示:

1 2 | POST / orgid / idtoken / conditional HTTP / 1.1
[请求方法] [url] [版本] (空格其分割区分作用)
|
1 2 3 4 5 6 7 8 9 10 | Host :请求的资源在哪个主机的端口上
Connection:该请求支持长连接(heep_alive)
Content - Length:正文内容长度
Content - Type :数据类型
User - Agent:声明用户的操作系统和浏览器版本信息
Accent:发起了请求
Referer:当前页面是从哪个页面跳转过来的
Accept - Encoding:接受的编码
Accept - Language:接受的语言类型
Cookie:用于在客户端存储少量信息,通常用于实现会话(session)功能
|
- 空行
它的作用是通过一个空行,告诉服务器请求头部到此为止。
- 请求数据
注意:若方法字段是GET,则此项为空,没有数据
若方法字段是POST,则通常来说此处放置的就是要提交的数据
举例:比如要使用POST方法提交一个表单,其中有user字段中数据为“admin”, password字段为123456,那么这里的请求数据就是 user=admin&password=123456,使用&来连接各个字段。
HTTP响应也由四个部分组成,分别是:响应行、响应报头、空行和响应正文。
- 响应行
响应行一般由协议版本、状态码及其描述组成 比如 HTTP/1.1 200 OK
其中协议版本HTTP/1.1或者HTTP/1.0,200就是它的状态码,OK则为它的描述。
- 响应头
响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。
常见的响应头字段含义:
1 | Allow:服务器支持哪些请求方法(如GET、POST等)。
|
1 | Content - Encoding:文档的编码(Encode)方法。只有在解码之后才可以得到Content - Type 头指定的内容类型。
|
1 | Content - Length:表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。
|
1 | Content - Type :表示后面的文档属于什么MIME类型。
|
1 | Date:当前的GMT时间,例如,Date:Mon, 31Dec200104 : 25 : 57GMT 。
|
1 | Expires:告诉浏览器把回送的资源缓存多长时间, - 1 或 0 则是不缓存。
|
1 | Last - Modified:文档的最后改动时间。客户可以通过If - Modified - Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个 304 (Not Modified)状态。Last - Modified也可用setDateHeader方法来设置。
|
1 | Location:这个头配合 302 状态码使用,用于重定向接收者到一个新URI地址。表示客户应当到哪里去提取文档。
|
1 | Refresh:告诉浏览器隔多久刷新一次,以秒计。
|
1 | Server:服务器通过这个头告诉浏览器服务器的类型。Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。Servlet一般不设置这个值,而是由Web服务器自己设置。
|
1 | Set - Cookie:设置和页面关联的Cookie。
|
1 | Transfer - Encoding:告诉浏览器数据的传送格式。
|
1 | WWW - Authenticate:客户应该在Authorization头中提供什么类型的授权信息?在包含 401 (Unauthorized)状态行的应答中这个头是必需的。
|
1 | setContentType:设置Content - Type 头。大多数Servlet都要用到这个方法。
|
1 | setContentLength:设置Content - Length头。对于支持持久HTTP连接的浏览器来说,这个函数是很有用的。
|
1 | addCookie:设置一个Cookie(Servlet API中没有setCookie方法,因为应答往往包含多个 Set - Cookie头)。
|
- 空行
它的作用是通过一个空行,告诉响应端响应头部到此为止。
- 响应体
响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。