http协议规定的数据格式

HTTP协议--超文本传输协议
浏览器与服务端之间的应用层协议使用的就是HTTP协议,HTTP协
议要求建立在可靠传输协议基础上进行。而通常传输层协议使用
的是TCP协议。

HTTP协议规定了客户端与服务端传输的数据内容格式,以及通讯
的方式。
HTTP协议要求客户端与服务端之间的通讯方式为:一次请求一次响
应,即:客户端发送一个HTTP请求(request)给服务端,而服务端
处理该请求后会给客户端发送一个HTTP响应(response)。
在这个通讯的过程中不允许服务端主动发送内容给客户端。

HTTP协议现在常用的版本为HTTP1.1
HTTP1.0协议与1.1协议有一个比较大的改变
1.0协议中:客户端与服务端建立TCP连接后会发送一个请求,当
服务端处理并予以响应后就断开连接。
1.1协议中:客户端与服务端建立TCP连接后可以进行多次的请求
与响应操作后再断开连接(对于传输复杂数据时,这样做速度快,
资源占用小)。

HTTP协议可以参考万维网(w3c),有相关定义和解释。

HTTP协议要求请求与响应中的内容只能出现ISO8859-1字符集规
定的字符(字母,数字,符号),不得直接出现如中文这样的字符。


HTTP请求(Request)
请求是客户端发送给服务端的内容

请求包含三部分信息
请求行,消息头,消息正文


1:请求行
请求行是由一行字符串组成,用空格分割为三部分。
格式:
Method Url Protocol(CRLF)
请求方式 请求路径 协议版本
如:
GET /index.html HTTP/1.1(CRLF)

注:CR是回车符,ASC编码对应为:13
   LF是换行符,ASC编码对应为:10
   HTTP协议中以CRLF结尾被规定为一行字符串结束。
     本身回车符,换行符都是空白字符,不可见。这里使用CR表示
     一个回车符,LF表示一个换行符。

2:消息头
消息头由若干行组成,是客户端发送给服务端的一些附加信息
有的用来说明客户端信息(浏览器版本,所使用的操作系统等)
有的用来说明与服务端交互数据的细节方式
有的用来说明消息正文内容等等
消息头的格式:
name: value(CRLF)
消息头的名字: 消息头对应的值(CRLF)

最后一个消息头发送完毕后,要单独发送一个CRLF,表示消息头
部分结束。

例如:
Host: localhost:8088(CRLF)
Connection: keep-alive(CRLF)
Upgrade-Insecure-Requests: 1(CRLF)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36(CRLF)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8(CRLF)
Accept-Encoding: gzip, deflate, br(CRLF)
Accept-Language: zh-CN,zh;q=0.9(CRLF)(CRLF)


3:消息正文
消息正文是纯2进制数据,是用户提交给服务端的数据。一个请求
中不一定包含消息正文部分。


一个请求的完整内容如:
GET /index.html HTTP/1.1
Host: localhost:8088
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
1010010101010010101000......


HTTP响应(Response)
响应是服务端回复客户端的内容。HTTP协议规定了响应的格式。
一个HTTP响应也包含三部分:
状态行,响应头,响应正文

1状态行
状态行也是由一行字符串构成(CRLF结尾)
格式:
protocol statusCode statusReason(CRLF)
协议版本 状态代码 状态描述(CRLF)

状态代码是由一个三位数组成,包含5类
1xx:保留,将来使用
2xx:成功 - 操作被接收、理解、接受(received, understood, accepted)。
3xx:重定向(Redirection)- 要完成请求必须进行进一步操作。
4xx:客户端出错 - 请求有语法错误或无法实现。
5xx:服务器端出错 - 服务器无法实现合法的请求。

常见状态代码与对应描述:
"200"    OK
"201"    Created
"202"    Accepted
"204"    No Content
"301"    Moved Permanently
"302"    Moved Temporarily
"304"    Not Modified
"400"    Bad Request
"401"    Unauthorized
"403"    Forbidden
"404"    Not Found
"500"    Internal Server Error
"501"    Not Implemented
"502"    Bad Gateway
"503"    Service Unavailable

2:响应头
响应头与请求中的消息头格式一致,是服务端发送给客户端的
附加信息。
比较常见的头:
Content-Type:用于说明响应正文的数据类型
Content-Length:用于说明响应正文的数据长度(字节量)


3:响应正文
响应正文也是2进制数据,是服务端发送给客户端实际要响应
的数据,通常是客户端实际请求的资源数据。比如图片,页面
等等。
一个响应中也不一定必须包含响应正文部分。
若要让浏览器能够正确理解该响应正文内容,必须设置上述对应
的两个响应头。


一个响应的内容大致为:
HTTP/1.1 200 OK(CRLF)
Content-Type: text/html(CRLF)
Content-Length: 12398(CRLF)(CRLF)
10010101010101010101010010110000111.....

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值