http 结束符
来源:互联网 发布:mysql设置中文编码 编辑:程序博客网 时间:2024/05/15 05:44
HTTP协议浅析
(2013-08-12 19:48:14)http协议
pipeline
web协议
短连接
长连接
分类: 其他
1、
浏览器和Web服务器之间一问一答的交互过程遵守一定的规则,这个规则就是HTTP协议。HTTP协议时TCP/IP协议集中的一个应用层协议,定义了浏览器和Web服务器之间交换数据过程和数据本身的格式。现在广泛应用的有HTTP/1.0和HTTP/1.1两个版本,1.1和1.0相比最大的特点就是增加对长连接的支持。
2、
2.1 HTTP/1.0的通信过程
图1:HTTP1.0通信过程
2.2 HTTP /1.1的通信过程
图2:HTTP 1.1通信过程
3、
完整的HTTP请求包括:一个请求行、若干HTTP头域和可选的实体内容三部分:
3.1 请求行
(6)TRACE
(7)CONNECT 保留将来使用
(8)OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
3.2.1 通用头域
(1)
(2)
(3)
3.2.2 请求头域
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
BAIDUID=27C48D40C9CDCF48CEAAFCFD
3.2.3 响应头域
3.2.4 实体头域
(1)
(2)
(3)
(4)
3.2 可选实体内容
POST /deal_post.php HTTP/1.1
Referer: http://网站域名/post.php
Accept-Language: zh-cn
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/4.0
Host: 网站域名
Content-Length: 43
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: BAIDUID=27C48D40C9CDCF48CEAAFCFD
data1=a&data2=b&data3=c&Submit=�ύ
4、
HTTP应答包括:一个状态行、若干消息头和实体内容三部分组成。
4.1 状态行
(1)1xx:信息,请求收到,继续处理;
(2)2xx:成功,行为被成功地接受、理解和采纳;
(3)3xx:重定向,为了完成请求,必须进一步执行的动作;
(4)4xx:客户端错误,请求包含语法错误或者请求无法实现;
(5)5xx:服务端错误,服务器不能正确执行一个正确的请求。
下表中是检索前段Web服务器测试中常见的几种返回状态码:
状态码
含义
200
正确返回结果
302
页面跳转
304
页面未改动
400
请求错误,不符合协议
404
请求的页面未找到
405
方法不允许
501
未被使用
503
服务不可用
4.2 HTTP头域
(1)
(2)
(3)
BAIDUID=B589E67D8A2C6B15C2FDD8F2
(4) P3P:设置允许Cookie的跨域访问
4.3 实体内容
(1)
(2)
(3)
4.3.1 Content-Length类型
HTTP/1.1 200 OK
Date: Wed, 26 Aug 2009 02:45:57 GMT
Server: Apache/2.0.63 (Unix) PHP/5.2.6
Content-Length: 20
Content-Type: text/html
Content-Language: en
<html>content</html>
4.3.2 Chunked类型
chunked编码的基本方法是将大块数据分解成多块小数据,每块都可以自指定长度,其具体格式如下:
Chunked-Body
Chunked-Body表示经过chunked编码后的报文体。报文体可以分为chunk, last-chunk,trailer和结束符四部分。chunk的数量在报文体中最少可以为0,无上限;每个chunk的长度是自指定的,即起始的数据必然是16进制数字的字符串,代表后面chunk-data的长度(字节数)。这个16进制的字符串第一个字符如果是“0”,则表示chunk-size为0,该chunk为last-chunk,无chunk-data部分。可选的chunk-extension由通信双方自行确定,如果接收者不理解它的意义,可以忽略。
trailer是附加的在尾部的额外头域,通常包含一些元数据(metadata, meta means "about information"),这些头域可以在解码后附加在现有头域之后。
<html>
<head>
<title>Hi</title>
<link rel="stylesheet" href="style.css" type="text/css"
media="all" />
</head>
<?php flush(); sleep(5); ?>
<body onload="loaded();">
<h1>Hi</h1>
</body>
</html>
在测试机上通过echo –ne
HTTP/1.1 200 OK
Date: Thu, 27 Nov 2008 05:51:25 GMT
Server: Apache/2.0.63 (Unix) PHP/5.2.6
X-Powered-By: PHP/5.2.6
Transfer-Encoding: chunked
Content-Type: text/html
74
<html>
<head>
<title>Hi</title>
<link rel="stylesheet" href="style.css" type="text/css" media="all" />
</head>
29
<body>
<h1>Hi</h1>
</body>
</html>
0
查看应答的二进制内容如下:
由应答报文可以看出,在头域结束符“\r\n\r\n”之后是ASCII码74,表示第一个chunk的chunk-size,转换为十进制是116字节,74后面紧接着“\r\n”是chunk-size和chunk-data的分隔符,因此这里没有chunk-extension,这里我们可以看出头域结束符“\r\n\r\n”之后紧接的地址是000000E7,在000000E7后面是37 34 0d 0a,也就是“74\r\n”,74表示第一个chunk-data的十六进制长度,那么第一个chunk-data的起始地址就是000000EB,下一个chunk的起始地址就是000000EB + 74 + 2 = 00000161,在0000015F的位置我们可以看到0d 0a 32 39 0d 0a,也就是“\r\n29\r\n”,前一个“\r\n”表示上一个chunk的结束, 然后29表示十六进制的下一个chunk-data的长度,后一个“\r\n”是chunk-size和chunk-data的分隔符。
从0000015F+ 2 + 2 + 2 = 00000165开始为第二个chunk-data的数据,长度为41个字节,于是下一个chunk的起始位置就是00000165 + 29 = 0000018E,这个地方的数据是0d 0a 30 0d 0a,也就是“0\r\n\r\n”,0作为chunk-size表示这个chunk为最后一个chunk,第一个“\r\n”表示最后一个chunk的结束,而第二个“\r\n”表示没有tailer部分,整个chunk-body结束。
4.3.3 特殊类型
HTTP/1.1 413 Request Entity Too Large
Date: Wed, 26 Aug 2009 05:16:39 GMT
Server: Apache/2.0.63 (Unix) PHP/5.2.6
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>413 Request Entity Too Large</title>
</head><body>
……
- http 结束符
- 结束符 (EOF)
- 文件结束符
- EOF结束符
- 文件结束符EOF
- 文件结束符
- 字符串结束符'\0'
- 文件结束符EOF
- 文件结束符
- C++ 文件结束符
- 文件结束符EOF
- C++ 文件结束符
- 结束符的重要性
- 文件结束符
- 文件结束符EOF
- 文件结束符EOF
- C++ 文件结束符
- 字符串结束符'\0'
- vs 快捷键盘
- OpenCV2简单的特征匹配
- 黑马程序员_Java基础:IO流总结
- 注意的分类和规律以及生理机制
- 字符串反转
- http 结束符
- RunTime 运行时研究及解析
- 南邮 OJ 1228 租用游艇问题
- OpenCV2:特征匹配及其优化
- Java并发编程:线程池的使用
- Gomoku
- jquery 中的post和get方法同步问题 解决办法
- 初探使用iOS 7 Sprite Kit与Cocos2d开发游戏的对比
- 1040. Longest Symmetric String (25)