请求和响应格式

http是web客户端和服务端的通讯的应用层协议,通常基于TCP/IP。交互方式如下:

1. 客户端和服务端建立连接
2.客户端发送请求
3.服务端响应请求
4.关闭连接
由于创建/关闭连接的代价很大,所以,在HTTP1.1之后,一个连接之内,可发发送多次请求。
下面主要介绍客户端的请求和服务端的响应。

一、请求格式
请求格式包括起始行,请求消息头部和请求消息正文。看下图:
在这里插入图片描述

 **1.起始行**

起始行包含HTTP方法,URI和HTTP版本,格式如下:

http_method URI http_version
HTTP方法有以下几种:
GET : 获取URI表示是资源
POST : 将资源上传到URI指定的位置。
PUT : 上传资源,将资源上传到URI指定的位置。
DELETE : 删除URI指定的资源
HEAD : 和get类似,但是它只返回消息头部,不返回消息正文
TRACE : 回显客户端请求进行调试

OPTIONS : 查询服务器的能力,看服务器能如何处理一个资源。
POST和PUT的主要区别是,PUT是幂等性的,即重复提交多次与提交一次的效果是一样的。POST不是幂等性的。

URI
通常使用URL来表示,包含5个部分:协议,主机名称(或IP名称,端口号可选,默认是80),路径,片段标识符和查询字符串。看下面的例子:
http://abcd/buy/index.html?pay=123456#fragment
http是协议,主机是abcd, 路径是/buy/html.index,片段标识符是fragment,查询字符串是pay=123456。
http版本
即请求的http协议的版本。
2. 请求消息头部
消息头部是由一些key:value的值对组成的,以一个空行结束。key不区分大小写,只能是ASCII符号。有以下几种key:
cache-control: 指定缓存机制
Connection: 两种值,keepalive和close。值为keep-alive时, 客户端到服务器端的连接持续有效。当出现对服务器的后继请求时,keepalive功能避免了建立或者重新建立连接.
date:消息发送的时间
Etag:资源每次修改,Etag都会改变。用于判断资源是否有更改。
If-Match:如果对象的 ETag 没有改变,其实也就意味著对象没有改变,才执行请求的动作。
If-None-Match:如果对象的 ETag 改变了,其实也就意味著对象也改变了,才执行请求的动作。
Accept : 申明自己的接受的数据类型,通常使用MIME类型
Accept-Encoding:申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法 (gzip,deflate)
Accept-Language:申明自己接收的语言语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等。
Authorization:当客户端接收到来自WEB服务器的 WWW-Authenticate 响应时,该头部来回应自己的身份验证信息给WEB服务器
Host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号。
Pramga:主要使用 Pramga: no-cache,相当于 Cache-Control: no-cache。
Range:(比如 Flashget 多线程下载时)告诉 WEB 服务器自己想取对象的哪部分。
Referer:向 WEB 服务器表明自己是从哪个网页/URL 获得/点击当前请求中的网址/URL。
User-Agent: 表明自己的身份

Accept-Charset:申明自己接收的字符集

**3.请求消息正文**

当使用PSOT或PUT的方法时,就需要上传数据给服务器。数据就是在消息正文中。

二、响应格式

响应格式包括:状态行,响应消息头部和响应消息正文。请看下图:

在这里插入图片描述

1.响应行

响应行包括HTTP版本,响应码和响应描述。响应码有以下几类:

1XX : 信息

2XX:请求成功,最常见的是200

3XX:重定位及重定向

4XX:客户端错误

5XX:服务端错误

2.响应消息头部

响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。同样是由key : value组成,以一个空行结束。主要有以下几种key:

cache-control: 指定缓存机制
Connection:值为close,keepalive和keep-alive

Content-Encoding:服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。

Content-Language:服务器告诉浏览器自己响应的对象的语言。

Content-Length: 服务器告诉浏览器自己响应的对象的长度。

Content-Range: 服务器表明该响应包含的部分对象为整个对象的哪个部分。

Content-Type: 服务器告诉浏览器自己响应的对象的类型

Etag :资源每次修改,Etag都会改变。用于判断资源是否有更改。
If-Match:如果对象的 ETag 没有改变,其实也就意味著对象没有改变,才执行请求的动作。
If-None-Match:如果对象的 ETag 改变了,其实也就意味著对象也改变了,才执行请求的动作。

Expired:服务器表明该实体将在什么时候过期,对于过期了的对象,只有在跟WEB服务器验证了其有效性后,才能用来响应客户请求。是 HTTP/1.0 的头部。

If-Modified-Since:如果请求的对象在该头部指定的时间之后修改了,才执行请求的动作(比如返回对象),否则返回代码304,告诉浏览器该对象没有修改。

If-Unmodified-Since:如果请求的对象在该头部指定的时间之后没修改过,才执行请求的动作(比如返回对象)。

Last-Modified:服务器认为对象的最后修改时间,比如文件的最后修改时间,动态页面的最后产生时间等等。

Location:服务器告诉浏览器,试图访问的对象已经被移到别的位置了,到该头部指定的位置去取

Server:服务器表明自己是什么软件及版本等信息。

Transfer-Encoding:服务器表明自己对本响应消息体(不是消息体里面的对象)作了怎样的编码,比如是否分块(chunked)。

WWW-Authenticate:响应报头域必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。

3.响应消息正文

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值