Http协议
HTTP 超文本传输协议,是一个基于请求与响应模式的、无状态的、应用层协议。
Http报文介绍
Http请求报文�由请求行(request line
)、请求头部(header
)和请求数据组成,下图给出了请求报文的一般格式。
-
1、请求行
由3部分组成,分别为:请求方法
、URL
以及协议版本
,之间由空格分隔
请求方法包括GET
、HEAD
、PUT
、POST
、TRACE
、OPTIONS
、DELETE以及扩展方法,当然并不是所有的服务器都实现了所有的方法,部分方法即便支持,处于安全性的考虑也是不可用的
协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1
HTTP1.0定义了三种请求方法:GET
,POST
和HEAD
方法。
HTTP1.1新增了五种请求方法:OPTIONS
,PUT
,DELETE
,TRACE
和CONNECT
方法。
-
2,请求头部
请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔
常见请求头:
请求头部的最后会有一个空行,表示请求头部结束,对于请求报文的组成有另一种说法:请求报文由请求行
、请求头
、空行
和请求体
四个部分组成。
-
3、请求正文
可选部分,比如GET请求就没有请求正文
GET请求示例:
POST请求示例:
Http响应报文
Http响应报文由状态行、响应头部、响应正文3部分组成
1、状态行
由3部分组成,分别为:协议版本,状态码,状态码描述,之间由空格分隔
状态代码为3位数字,200299的状态码表示成功,300399的状态码指资源重定向,400499的状态码指客户端请求出错,500599的状态码指服务端出错(HTTP/1.1向协议中引入了信息性状态码,范围100~199)
状态码可参考HTTP状态码响应头部
常见响应头部:
响应头 | �说明 |
---|---|
Allow | 服务器支持哪些请求方法(如GET、POST等) |
Content-Encoding | 文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader("Accept-Encoding"))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。 |
Content-Length | 表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入 ByteArrayOutputStream,完成后查看其大小,然后把该值放入Content-Length头,最后通过byteArrayStream.writeTo(response.getOutputStream()发送内容。 |
Content-Type | 表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。 |
Server | 服务器应用程序软件的名称和版本 |
Content-Charset | 响应正文使用的编码 |
Content-Language | 响应正文使用的语言 |
响应示例:
Content-Type
Content-Type,http内容类型,一般是指网页中存在Content-Type。用于定义网络文件的类型和网页编码,决定文件接收方以什么样的形式,什么编码读取这个文件。
Content-Type默认类型是“text/html”。
Content-type类型有很多种,具体可参考HTTP content-type 对照表。
URL
URL全名为Uniform Resource Locator(统一资源定位),通过描述资源的位置来标识资源
-
URI、URL和URN之间的区别
URI全名为Uniform Resource Indentifier(统一资源标识),用来唯一的标识一个资源,是一个通用的概。URI由两个主要的子集URL和URN组成。
URL全名为Uniform Resource Locator(统一资源定位),通过描述资源的位置来标识资源
URN全名为Uniform Resource Name(统一资源命名),通过资源的名字来标识资源,与其所处的位置无关,这样即使资源的位置发生变动,其URN也不会变化
HTTP规范将更通用的概念URI作为其资源标识符,但是实际上,HTTP应用程序处理的只是URI的URL子集