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入门到精通教程
查看: 658|回复: 0

开发交流:HTTP协议详解-张孝祥

[复制链接]

该用户从未签到

发表于 2011-10-24 09:44:00 | 显示全部楼层 |阅读模式
HTTP协议详解
一、        了解HTTP协议
1.     HTTP简介
WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议。
HTTP是超文本传输协议(hypertext transfer protocal)的简写,是TCP/IP协议的应用层的协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程以及数据本身的格式。
HTTP协议的版本
HTTP/1.0    HTTP/1.1   HTTP/N-G
2.     HTTP/1.0的会话方式
浏览器与WEB服务器连接的时间是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。
浏览器到WEB服务器之间的每次请求都是完全独立分开的请求对。
支持代理服务器(可以有效减轻服务器的压力,但是要注意缓存中页面的有效期):
3.     浏览器访问多图网页的过程
4.     HTTP/1.1与HTTP/1.0的比较
HTTP/1.1的特点
在一个TCP连接上可以传送多个HTTP请求和响应
多个请求和响应过程可以重叠进行。
增加了更多请求头和响应头。
5.     HTTP请求信息
请求消息的结构:
一个请求行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。
6.     HTTP响应信息
响应信息的结构:
一个状态行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。
7.     HTTP消息其它细节
响应消息的实体内容就是网页文件的内容,也就是在浏览器中使用查看源文件的方式所看到的内容。
一个使用GET方式请求消息中不能包含实体内容,只有使用POST、PUT、DELETE方式的请求消息中才可以包含实体内容。
对于HTTP 1.1来说,如果HTTP消息中包含实体内容,且没有采用chunked传输编码方式,那么消息头部分必须包含内容长度的字段,否则,客户和服务程序就不知道实体内容何时结束。
在HTTP协议中,还可以使用简单的请求信息和响应信息,它们都没有消息头部分。简单的请求消息只能使用GET方式,且请求行中不用指定HTTP协议版本号,对于简单的请求消息,服务器返回简单的响应消息,简单的响应消息中只返回实体内容。
8.     HTTP消息头
使用HTTP消息头,可以实现HTTP客户机和服务器之间的条件请求和应答,消息头相当于服务器和浏览器之间的一些暗号指令。
每个消息头包含一个头字段名称,容纳后依次是冒号、空格、值、回车和换行符。例如:Accept-Language: en-us
消息头字段名是不区分大小写的,但是习惯上将每个单词的第一个字母大写。
整个消息头部分中的各行消息头可按任意顺序排列。
消息头又可以分为通用信息头、请求头、响应头、实体头等四类。
许多请求头字段都同意客户端在值部分指定多个可接受的选项,多个选项之间以逗号分隔。如:Accept-Encoding:gzip, compress
有些字段可以出现多次,例如,响应信息中可以包含有多个“warning”头字段。
9.     实例讲解
二、        请求行与状态行
1.     请求行与状态行
1)     请求行
格式:请求方式 资源路径 HTTP版本号<CRLF>
                 举例:GET /test.HTML HTTP/1.1
                 请求方式:POST HEAD OPTIONS DELETE TRACE PUT
2)     状态行
格式:HTTP版本号 状态吗 原因叙述<CRLF>
举例:HTTP/1.1 200 OK
           实例:启动Tomcat,在命令行中输入:telnet localhost 8080,连接服务器。然后如图所示:
           
      
      
        
2.     使用GET和POST方式传递参数
1)     在URL地址后面可以附加一些参数
举例:http://www.baidu.com/servlet/Par ... =abc&param2=xyz
2)     GET方式
举例:GET /Servlet/ParamsServlet?param1=abc&param2=xyz HTTP/1.1
特点:传送的数据量是有限制的,一般在1KB一下。
3)     POST方式
举例:POST /servlet/ParamsServlet HTTP/1.1
      Host:
      Content-Type:application/x-www-form-urlencoded
      Content-Length:28
      Param1=abc&param2=xyz
特点:传送的数据量要比GET方式大得多。
3.     响应状态吗
1)     响应状态码用于表示服务器对请求的各种不容处理结果和状态,它是一个三位的十进制数。响应状态码为5中类别,使用最高位为1到5来进行分类:
2)     响应状态码-》特殊情况
三、        通用信息头
1.     通用信息头
通用信息头字段既能用于请求消息,也能用于响应消息,它包括一些与被传输的实体内容没有关系的常用消息头字段。
Cache-Control: no-cache  (*)
Connection: close (*)
Date: tue, 11 Jul 2000 18:23:51 GMT
Pragma: no-cache (*)
Trailer: Date
Transfer-Encoding: chunked  (*)
Upgrade: HTTP/2.0,SHTTP/1.3
Via: HTTP/1.1 Proxy1,HTTP/1.1 Proxy2
Warning: any text
比如股票信息要实时信息,不能有缓存。
四、        请求头
1.     请求头字段用于客户端在请求消息中向服务器传递附件信息,主要包括客户端可以接受的数据类型、压缩方法、语言、以及发出请求的超链接所属网页的URL地址等信息。
Accept: text/html,image/*  (*)
Accept-Charset: ISO-8859-1,Unicode-1-1  (*)
Accept-Encoding: gzip,compress   (*)
Accept-Language: en-gb,zh-cn     (*)
Authorization: Basic enh4OjEyMzQ1Ng==   (*)
Expect: 100-continue
From: zxx@126.com
Host: www.baidu.com:80   (*)
If-Match: “xyzzy”,”r2d2xxx”
2.     If-Modified-Since: Tue,11 Jul 2000 18:23:51 GMT   (*)
If-None-Match: “xyzzy’,”r2de2xxx”
If-Range: Tue,11 Jul 2000 18:23:52 GMT
If-Unmodified-Since: Tue 11 Jul 2000 18:23:23 GMT
Max-Forwards: 1
Proxy-Authorization: Basic enh4OjEyMzQ1Ng==
Range: bytes=100-599 [bytes=100-]  [bytes=-100]  (*)
Referer: http://www.baidu.com   (*)
TE: trailers,deflate
User-Agent: Mozilla/4/0(compatible; MSIE5.5;Windows NT-5.0) (*)
五、        响应头
六、        实体头
1.     实体头用作实体内容的元信息,描述了实体内容的属性,包括实体信息类型、长度、压缩方法、最后一次修改时间、数据有效期等。
Allow: GET POST
Content-Encoding: gzip  (*)
Content-Language: zh-cn
Content-Length: 80
Content-Location: http://www.baidu.com/index.html
Content-MD5: ABCDKJFAKLDJFLKDJFLKDSJFL==
Content-Range: text/html;charset=GB2312
Expires: Tue,11 Jul 2000 18:23:51 GMT
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT
七、        扩展头
1.     在HTTP消息中,也可以使用一些在HTTP 1.1正式规范里没有定义的头字段,这些头字段统称为自定义的HTTP头或者扩展头,它们通常被当做是一种实体头处理。
2.     现在流行的浏览器实际上都支持Cookie,Set-Cookie,Refresh,Content-Dispositon等几个常用的扩展头字段。
Refresh头字段:
      Refresh: 1
      Refresh: 1;url=http://www.baidu.com
Content-Disposition头字段:
      Content-Type: application/octet-stream
      Content-Disposition: attachment; filename=aaa.zip
对于Java Web 编程来说,最核心的是要熟悉和掌握HTTP协议,这个就和java无关了,在熟悉HTTP协议之后,就需要熟悉Java的实现HTTP协议的类库,也就是Servlet API,所以最重要的东西就是Servlet API。当然对于初学者而言,直接通过Servlet API来学习Web编程有很大的难度,我推荐O′reilly的《Java Server Pages 》这本书来学习Web 编程。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 22:41 , Processed in 0.370663 second(s), 50 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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