Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 348|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-4 00:02:27 | 显示全部楼层 |阅读模式
    一、通用头字段

      
       
        1. Connection
       
       
        这个字段只在HTTP1.1
        协议中存在。它决定了客户端和服务器进行了一次会话后,服务器是否立即关闭网络连接。在客户端最直接的表现是使用read
        方法(readLine
        方法也是一样)
        读完客户端请求的Web
        资源后,是否立即返回-1
        (readLine
        返回null
        )。Connection
        有两个值:Close
        和Keep-Alive
        。
    当使用Connection
        :Close
        时,和HTTP1.0
        协议是一样的,当read
        方法读完数据时立即返回;而使用Connection
        :Keep-Alive
        时,read
        方法在读完数据后还要被阻塞一段时间。直接读取数据超时时间过后
        ,还继续往下执行。在上一篇文章中讨论的
        readHttpResponse(...)
        方法实现的第011行可以验证Connection的作用。下面让我们来使用HTTP模拟器来做一个实验。
       
       
        (1)在HTTP模拟器中输入如下的域名:
       
       
         
        www.baidu.com
       
       
        (2)HTTP
        模拟器中输入如下的HTTP
        请求信息:
       
       
         
        GET
        /
         HTTP
        /
        1.1
          
    Host: www.baidu.com
       
      
       
       
         
       

         
       
      
       


      

      

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

       
       
       

         
       
      
       图1
       

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

       
      
       (5)在"host:port>"提示符下直接按回车,输入最近一次使用的域名www.baidu.com和80端口。再次输入如下的HTTP请求:
       
       
       
       GET
       /
        HTTP
       /
       1.1
          
    Host: www.baidu.com
    Connection: close

       
      
       输入完以上的HTTP请求后,重新执行第3、4步操作。最后在显示HTTP响应消息内容后,直接直入了"host:port>"提示符。除了这种方法,将请求的第一行改为GET / HTTP/1.0。这样也可以无需等待直接结束。
       
      
       通过设置Connection,可以在下载Web资源(如多线程下载工具、Web浏览器等)后,立即断开网络连接,这样可以有效地降低客户机的资源消耗。

       
      
       2.
       Date
       
      
          
       这个Date
       头字段描述了请求消息和响应消息被创建的时间。这个字段值是一个HTTP-date
       类型,它的格式必须是GMT
       (格林尼治)时间,GMT
       时间是就是北京时间减8
       小时。下面是Date
       字段的一个例子:
       
       
       
       Date: Tue,
       15
        Nov
       2007
       
       08
       :
       12
       :
       31
        GMT
       
       
      
       3.
       Content-Length
       
      
       指定消息实体的字节数。在请求消息中POST
       方法必须使用Content-Length
       来指定请求消息的实体内容的字节数。在响应消息中这个字段值指定了当前HTTP
       响应所返回的Web
       资源的字节数。
       
      
       二、
       HTTP
       请求消息头字段
       
      
       1.
       Host
       
      
       Host
       字段用于指定客户端所访问的资源所在的主机名和端口号。如果端口号等于连接服务器时所使用的端口号,则端口号可以省略。下面是一个使用Host
       字段的一个例子:
       
       
       
       Host: www.sina.com.cn
       
      
       这个字段是必须的,如果HTTP
       请求不包含这个字段,服务器将返回
       400(Bad Request)
       响应状态。
       
      
       2.
       Accept
       
      
       Accept
       字段头确定客户端可以接收的媒体类型。一般的格式是"*/*"
       或"
       类型/"
       子类型"
       。这个子段头可以传递多个媒体类型,中间用"
       ,"
       隔开。如下面是一个Accept
       的例子:
       
       
       
       Accept::image
       /
       gif,image
       /
       jpg
       
       
      
       如果请求头使用上述的Accept
       字段值,则服务器端在动态生成网页的IMG
       头时将首先包含gif
       格式的图像,如果gif
       图象不存在,则包含jpg
       格式的图象。
       
      
       3.
       User-Agent
       
      
       这个字段头用于指定客户端是用什么访问的服务器,如果是IE6
       浏览器,并且本机安装了.net 2.0
       ,则User-Agent
       会有如下的值:
       
       
       
       User
       -
       Agent: Mozilla
       /
       4.0
        (compatible; MSIE
       6.0
       ; Windows NT
       5.2
       ; SV1; Maxthon; .NET CLR
       1.1
       .
       4322
       ; .NET CLR
       2.0
       .
       50727
       ; InfoPath.
       1
       ; InfoPath.
       2
       )
       
      
       服务器可以通过这个字段检查客户机的浏览器版本,并根据不同的版本来确定向客户端发送的数据。
       
      
       4.
       Range
       
      
            Range
       字段头通过服务器只传输一部分Web
       资源。这个字段头可以用来实现断点续传功能。有很多下载工具就是通过这个字段头进行断点续传的。Range
       字段可以通过三种格式设置要传输的字节范围:
       
      
       (1)Range: bytes=1000-2000
       
      
       传输范围从1000
       到2000
       字节。
       
      
       (2)Range: bytes=1000-
       
      
       传输Web
       资源中第1000
       个字节以后的所有内容。
       
      
       (3)Range bytes=1000
       
      
       传输最后1000
       个字节。
       
      
       三、
       HTTP
       响应消息头字段
       
      
       1.
       Accept-Ranges
       
      
       这个字段说明Web
       服务器是否支持Range
       (是否支持断点续传功能),如果支持,则返回Accept-Ranges: bytes
       ,如果不支持,则返回Accept-Ranges: none
       。
       
      
       2.
       Content-Range
       
      
       指定了返回的Web
       资源的字节范围。这个字段值的格式是:
       
      
       开始字节位置―
       结束字节位置/Web
       资源的总字节数
       
      
       下面是一个使用Content-Range
       的例子:
       
      
       Content-Range
       :1000-3000/5000
       
      
       测试
       
      
       在HTTP
       模拟器中连接服务器files.cnblogs.com
       ,并输入如下的HTTP
       请求消息:

       
       
       
       GET /nokiaguy/HttpSimulator.rar
        HTTP
       /
       1.1
       
    Host:
       files.cnblogs.com
       

       Range: bytes
       =
       1000
       -
       

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

       
         
          
       
       
        图2
       

       
       
       
         
        从上图可以看出,服务器
        files.cnblogs.com
        支持断点继传功能。而且还可以验证Content-Length
        的值是当前会话传过来的字节数,并不是Web
        资源的总的字节数。而Content-Range
        字段值中"/"
        后面的数才是Web
        资源总的字节数。
       
       
        3.  
        Location
       
       
        这个字段指定了上哪个新地址获得新的Web
        资源。当Web
        资源更换URL
        后,而一些老用户不能及时得知这个新的URL
        ;因此,在老用户访问原来的URL
        时,使用Location
        将这个新的URL
        返回给客户端。这个地址转换对用户来说是完全透明。

       
       
       
      
    请务必保留此出处http://androidguy.blog.51cto.com/974126/214416



      
      
       
       

         
       

         
       
      
    复制代码
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-25 13:05 , Processed in 0.351787 second(s), 34 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表