java

位置:IT落伍者 >> java >> 浏览文章

Java网络编程从入门到精通(23):HTTP消息头字段


发布日期:2023年03月13日
 
Java网络编程从入门到精通(23):HTTP消息头字段

专题推荐网络编程基础到进阶教程

通用头字段

Connection

这个字段只在HTTP协议中存在它决定了客户端和服务器进行了一次会话后服务器是否立即关闭网络连接在客户端最直接的表现是使用read方法(readLine方法也是一样)读完客户端请求的Web资源后是否立即返回(readLine返回null)Connection有两个值Close和KeepAlive当使用ConnectionClose时和HTTP协议是一样的当read方法读完数据时立即返回而使用ConnectionKeepAlive时read方法在读完数据后还要被阻塞一段时间直接读取数据超时时间过后还继续往下执行在上一篇文章中讨论的readHttpResponse(……)方法实现的第行可以验证Connection的作用下面让我们来使用HTTP模拟器来做一个实验

)在HTTP模拟器中输入如下的域名

)HTTP模拟器中输入如下的HTTP请求信息

GET/HTTP/

Host:

)按两下回车(输入一个空行)后发送请求消息并得到如图如示的HTTP响应消息头

)输入y或Y后(在显示http响应头后要立刻输入Y或y)显示响应消息的内容在显示完内容后大约过了秒钟才进入hostport>提示符(因为在sendHttpRequest()的实现代码中的行设置了读取数据超时)

)在hostport>提示符下直接按回车输入最近一次使用的域名和端口再次输入如下的HTTP请求

GET/HTTP/

Host:

Connection:close

输入完以上的HTTP请求后重新执行第步操作最后在显示HTTP响应消息内容后直接直入了hostport>提示符除了这种方法将请求的第一行改为GET / HTTP/这样也可以无需等待直接结束

通过设置Connection可以在下载Web资源(如多线程下载工具Web浏览器等)后立即断开网络连接这样可以有效地降低客户机的资源消耗

Date

这个Date头字段描述了请求消息和响应消息被创建的时间这个字段值是一个HTTPdate类型它的格式必须是GMT(格林尼治)时间GMT时间是就是北京时间减小时下面是Date字段的一个例子

Date:TueNov::GMT

ContentLength

指定消息实体的字节数在请求消息中POST方法必须使用ContentLength来指定请求消息的实体内容的字节数在响应消息中这个字段值指定了当前HTTP响应所返回的Web资源的字节数

HTTP请求消息头字段

Host

Host字段用于指定客户端所访问的资源所在的主机名和端口号如果端口号等于连接服务器时所使用的端口号则端口号可以省略下面是一个使用Host字段的一个例子

Host:

这个字段是必须的如果HTTP请求不包含这个字段服务器将返回(Bad Request)响应状态

Accept

Accept字段头确定客户端可以接收的媒体类型一般的格式是*/*类型/子类型这个子段头可以传递多个媒体类型中间用隔开如下面是一个Accept的例子

Accept:image/gifimage/jpg

如果请求头使用上述的Accept字段值则服务器端在动态生成网页的IMG头时将首先包含gif格式的图像如果gif图象不存在则包含jpg格式的图象

UserAgent

这个字段头用于指定客户端是用什么访问的服务器如果是IE浏览器并且本机安装了net 则UserAgent会有如下的值

UserAgent:Mozilla/(compatible;MSIE;WindowsNT;SV;Maxthon;NETCLR;NETCLR;InfoPath;InfoPath)

服务器可以通过这个字段检查客户机的浏览器版本并根据不同的版本来确定向客户端发送的数据

Range

Range字段头通过服务器只传输一部分Web资源这个字段头可以用来实现断点续传功能有很多下载工具就是通过这个字段头进行断点续传的Range字段可以通过三种格式设置要传输的字节范围

)Range bytes=

传输范围从字节

)Range bytes=

传输Web资源中第个字节以后的所有内容

)Range bytes=

传输最后个字节

HTTP响应消息头字段

AcceptRanges

这个字段说明Web服务器是否支持Range(是否支持断点续传功能)如果支持则返回AcceptRanges bytes如果不支持则返回AcceptRanges none

ContentRange

指定了返回的Web资源的字节范围这个字段值的格式是

开始字节位置—结束字节位置/Web资源的总字节数

下面是一个使用ContentRange的例子

ContentRange/

测试

在HTTP模拟器中连接服务器并输入如下的HTTP请求消息

GET /nokiaguy/HttpSimulatorrar HTTP/

Host:

Range:bytes=

返回的响应消息头如图所示

从上图可以看出服务器支持断点继传功能而且还可以验证ContentLength的值是当前会话传过来的字节数并不是Web资源的总的字节数而ContentRange字段值中/后面的数才是Web资源总的字节数

Location

这个字段指定了上哪个新地址获得新的Web资源当Web资源更换URL后而一些老用户不能及时得知这个新的URL因此在老用户访问原来的URL时使用Location将这个新的URL返回给客户端这个地址转换对用户来说是完全透明

上一篇:浅谈Java网站开发过程中的优势

下一篇:Java 封闭之构造函数