Java后台之路(07)-HTTP

在学习Servlet之前我们有必要了解一下http协议。


HTTP简介

HTTP协议是超文本传输协议,它是用于服务器将文本传送到浏览器的传输协议,HTTP是一个应用层协议,一次HTTP通信由请求和响应构成。

在请求中包含:请求的方法,URL,用户信息,协议版本等信息;
在响应中包含:响应时间,请求成功或失败的标识,协议版本,回复的内容;

HTTP协议是无连接无状态的。

无连接:每次连接只处理一个请求,服务器处理完客户的请求并收到客户的应答后即断开连接。
无状态:协议对于请求没有任何记忆能力,每次请求都是独立的,请求的结果不会受其它请求的影响。

每一次HTTP的请求都是由请求(request)和响应(response)构成,我们来分别谈谈。


HTTP请求

HTTP请求由三部分组成:请求消息行,请求消息头,请求消息体。

1. 请求消息行

GET /HelloWeb/index.html HTTP/1.1

  • 请求方式,此例中的GET;
  • 资源URI,此处的/HelloWeb/index.html;
  • 协议及版本号,HTTP协议,版本1.1;

2. 请求消息头

Host:localhost
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Charset: UTF-8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.6
Cache-Control: max-age=0
Cookie:JSESSIONID=97C4302F3350676F65B5E4409ABA87CF
Referer: http://blog.csdn.net/lfdfhl
Content-Type:application/x-www-form-urlencoded
If-Modified-Since: Wed, 02 Feb 2011 12:04:56 GMT
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36
Connection: keep-alive
Date: Tue, 15 Nov 2017 01:12:31 GMT

  • Host:发起请求的主机名及其端口号;
  • Accept:客户端可接收的文档类型。其中,*/*表示可接收任何类型;
  • Accept-Charset: 客户端可接受的字符编码集;
  • Accept-Encoding: 客户端支持的压缩格式;
  • Accept-Language:客户端可接受的语言;
  • Cache-Control:设置请求和响应遵循的缓存机制;
  • Cookie:HTTP请求发送时会把保存在该请求域名下的所有cookie值一起发送至服务器;
  • Referrer:发起HTTP请求的页面的URL;
  • Content-Type:请求时所传递的内容的类型;
  • Content-Length:请求时所传递的内容的长度;
  • If-Modified-Since:该值与响应消息头的Last-Modified字段相对应。Last-Modified与If-Modified-Since都是用来记录页面的最后修改时间。当客户端访问页面时,服务器会将页面最后修改时间通过Last-Modified由服务器发往客户端,客户端会记录下该值;当客户端再次发起请求时,客户端会通过 If-Modified-Since将此前服务器端发过来的最后修改时间戳发送回去;服务器通过这个时间戳判断客户端的页面是否是最新的,如果不是最新的则返回新的内容,如果是最新的则返回304告诉客户端其本地cache的页面是最新的,于是客户端就可直接从本地加载页面;
  • User-Agent:表示发出该请求的客户端的相关信息,比如操作系统及版本、CPU类型、浏览器及版本、浏览器渲染引擎、浏览器语言等等;
  • Connection: 表示是否需要持久连接,HTTP 1.1默认进行持久连接;
  • Date: 请求发送的日期和时间;

其实,从这里可以看出来:在每次请求时,客户端需要告诉服务器:自身支持的字符集,压缩格式,语言;请求的消息内容,长度等等众多信息,从而尽量清楚地表达自身的条件和需求以便服务器做出相应的响应。

3. 请求消息体

localhost:8080/MyServlet/servlet/HelloServlet?name=qdl&age=25
消息体:name=qdl&age=25

当请求方式是POST方式时可见消息正文,假若是GET方式则请求消息体中无内容。


HTTP响应

HTTP响应同样由三部分组成:响应消息行,响应消息头,响应消息体。

1. 响应消息行

HTTP/1.1 200 OK

  • 协议及其版本号,HTTP/1.1;
  • 响应状态码,此处的200;
    200,正常
    02/307,临时重定向
    304,未修改,表示客户端缓存的版本是最新的,无需请求
    404,找不到
    500,服务器内部出错
  • 响应码的描述,此处的OK。

2. 响应消息头

Accept-Ranges: bytes
Content-Encoding: gzip
Content-Length: 4533
Content-Language: en,zh
Content-Type: text/html
Date: Sun, 06 Sep 2015 07:56:07 GMT
Last-Modified: Fri, 04 Sep 2015 13:37:55 GMT
Server: apache tomcat
Location: http://blog.csdn.net/lfdfhl
Refresh: 5; url=http://www.csdn.net/
Content-Disposition: attachment; filename=test.zip
Set-Cookie: UserID=tom; Max-Age=3600; Version=1
Expires: Thu, 01 Dec 2015 12:20:00 GMT
Cache-Control: no-cache
Pragma: no-cache
Connection: keep-alive

  • Accept-Ranges: 表明服务器是否支持指定范围请求及哪种类型的分段请求;
  • Content-Encoding: 服务器的返回内容的压缩编码类型;
  • Content-Length: 服务器的返回内容的的长度;
  • Content-Language: 服务器的返回内容的语言;
  • Content-Type: 服务器的返回内容的类型;
  • Date:服务器发出响应的时间;
  • Last-Modified: 返回的内容的最后修改时间;
  • Server: 服务器的类型;
  • Location:指示被请求的资源的位置,常和请求消息头一起使用完成请求重定向;
  • Refresh:延时跳转到某个页面或者定时刷新本页面;
  • Content-Disposition: 指示客户端下载文件;
  • Set-Cookie: 服务器端发送给客户端的Cookie;
  • Expires: 响应过期的时间;
  • Cache-Control: 指定响应遵循的缓存机制;
  • Pragma: 用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同;
  • Connection: 表示是否需要持久连接,HTTP 1.1默认进行持久连接。

3. 响应消息体

响应消息体中表示响应的的具体内容。比如,响应的内容是网页,那么响应消息体的内容和网页右键”查看网页源代码”所看到的内容一样。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值