http

一、HTTP协议简介

HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。

HTTP协议是学习JavaWEB开发的基石,不深入了解HTTP协议,就不能说掌握了WEB开发,更无法管理和维护一些复杂的WEB站点。

HTTP协议的版本:HTTP/1.0、HTTP/1.1

二、HTTP1.0和HTTP1.1的区别

在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源。

HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。

一个好多同学搞不清楚的问题:

一个web页面中,使用img标签引用了三幅图片,当客户端访问服务器中的这个web页面时,客户端总共会访问几次服务器,即向服务器发送了几次HTTP请求。

三、HTTP请求

客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括如下内容: 一个请求行、若干消息头、以及实体内容,如下所示 :

四、HTTP请求的细节——请求行

请求行中的GET称之为请求方式,请求方式有:

POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT

常用的有: GET、 POST 用户如没有设置,默认情况下浏览器向服务器发送的都是get请求,例如在浏览器直接输地址访问,点超链接访问等都是get,用户如想把请求方式改为post,可通过更改表单的提交方式实现。

不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上: 如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如: GET /mail/1.html?name=abc&password=xyz HTTP/1.1

GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。 如请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,Post方式的特点:传送的数据量无限制。

五、HTTP请求的细节——消息头

用于HTTP请求中的常用头

Accept: text/html,image/* --支持数据类型

Accept-Charset: ISO-8859-1 --字符集

Accept-Encoding: gzip --支持压缩

Accept-Language:zh-cn --语言环境

Host: www.itcast.com:80 --访问主机

If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT --缓存时间

Referer: http://www.itcast.com/index.jsp --来自哪个页面、防盗链

User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)

Cookie

Connection: close/Keep-Alive --链接状态

Date: Tue, 11 Jul 2000 18:23:51 GMT --时间

六、MIME类型

多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件消息 内容类型 :Content-Type: [type]/[subtype]; parameter

type有下面的形式。

Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;

Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据;

Application:用于传输应用程序数据或者二进制数据;

Message:用于包装一个E-mail消息;

Image:用于传输静态图片数据;

Audio:用于传输音频或者音声数据;

Video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。

七、MIME类型:常用的subtype值

text/plain(纯文本)

text/html(HTML文档)

application/xhtml+xml(XHTML文档)

image/gif(GIF图像)

image/jpeg(JPEG图像)【PHP中为:image/pjpeg】

image/png(PNG图像)【PHP中为:image/x-png】

video/mpeg(MPEG动画)

application/octet-stream(任意的二进制数据)

application/pdf(PDF文档)

application/msword(Microsoft Word文件)

message/rfc822(RFC 822形式)

multipart/alternative(HTML邮件的HTML形式和纯文本形式,相同内容使用不同形式表示)

application/x-www-form-urlencoded(使用HTTP的POST方法提交的表单)

multipart/form-data(同上,但主要用于表单提交时伴随文件上传的场合)

此外,尚未被接受为正式数据类型的subtype,可以使用x-开始的独立名称(例如application/x-gzip)。vnd-开始的固有名称也可以使用(例:application/vnd.ms-excel)。

八、HTTP响应

一个HTTP响应代表服务器向客户端回送的数据,它包括: 一个状态行、若干消息头、以及实体内容 。

九、HTTP响应的细节——状态行

状态行

格式: HTTP版本号 状态码 原因叙述

举例:HTTP/1.1 200 OK

状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:

十、HTTP响应细节——常用响应头

HTTP请求中的常用响应头

Location: http://www.it315.org/index.jsp --跳转方向

Server:apache tomcat --服务器型号

Content-Encoding: gzip --数据压缩

Content-Length: 80 --数据长度

Content-Language: zh-cn --语言环境

Content-Type: text/html; charset=GB2312 --数据类型

Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT --最后修改时间

Refresh: 1;url=http://www.it315.org --定时刷新

Content-Disposition: attachment; filename=aaa.zip --下载

Set-Cookie:SS=Q0=5Lb_nQ; path=/search

Expires: -1 --缓存

Cache-Control: no-cache --缓存

Pragma: no-cache --缓存

Connection: close/Keep-Alive --连接

Date: Tue, 11 Jul 2000 18:23:51 GMT --时间

十一、HTTP响应细节

Content-Disposition名称使用中文 new String("中文显示".getBytes("GB2312"),"ISO-8859-1") 需要注意特殊字符:空格、/、\、&、*、”、:、?

最新文章

  1. Linux修改oracle 10g的字符集
  2. Solr整合中文分词组件IKAnalyzer
  3. July 23rd, Week 30th Saturday, 2016
  4. C语言警告:warning C4018: “<”: 有符号/无符号不匹配
  5. Boost下载安装编译配置使用指南
  6. 超越luabind的luaBridge
  7. sql语句having子句用法,很多时候你曾忘掉
  8. 大数据架构:flume-ng+Kafka+Storm+HDFS 实时系统组合
  9. Python学习笔记整理(五)Python中的列表.
  10. Live555 分析(二):服务端
  11. JenKins 环境搭建 for Centos6.5
  12. 导入项目 idea
  13. CentOS7 安装 jexus-5.8.2-x64
  14. 自学PHP的正确方法与经验
  15. 在web项目中搭建一个spring mvc + spring + mybatis的环境
  16. ImportError: libcublas.so.9.0: cannot open shared object file: No such file or directory
  17. 七种RAID技术
  18. JavaScript位运算符 2
  19. Windows 安装 MySQL 5.7.18
  20. union和union all的并集(相加)区别

热门文章

  1. DropBox 超实用的免费文件网络同步、备份、分享工具
  2. printDocument设置适应边框打印 特重要 找了半天 设置一个属性即可
  3. 实时信号与sigqueue函数
  4. django带后台管理功能的网站
  5. 在centos7中用mariadb代替了mysql数据库吗
  6. (部署)使用kubernetes的deployment进行RollingUpdate
  7. IO模型-java版
  8. Animator根运动清除刚体速率问题测试
  9. [k8s]kubeadm k8s免费实验平台labs.play-with-k8s.com,k8s在线测试
  10. 对Android的恶意吐槽(勿看,有毒)