1. 命令行窗口中用telnet测试HTTP协议

HTTP消息是由普通ASCII文本组成。消息包括消息头和数据体部分。消息头以行为单位,每行以CRLF(回车和换行)结束,消息头结束后,额外增加一个CRLF,之后内容就是数据体部分了。
我们可以在命令行窗口,通过TELNET,来测试HTTP协议。

1. 使用telnet连接到HTTP服务器,如要从google上请求index.html页面,首先要连接到服务器的80端口

telnet www.google.cn 80
2. 现在已经连接上了服务器,发送http请求消息:
GET /index.html HTTP/1.1
connection: close
Host: www.google.cn
输入上面内容后,连续敲入两个回车,哈哈,是不是看到返回结果了。
这个请求的意思是:通过1.1版本协议请求index.html页面;connection: close是实用短连接,即服务器返回后就断开连接;Host字段知名页面所在的主机名。
返回结果应该是这样的:
HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Date: Fri, 02 Jan 2009 12:26:17 GMT
Expires: -1
Content-Type: text/html; charset=GB2312
Set-Cookie: PREF=ID=7bbe374f53b6c6a8:NW=1:TM=1230899177:LM=1230899177:S=2EGHuZJnrtdQUB_A; expires=Sun, 02-Jan-2011 12:26:17 GMT; path=/; domain=.google.com
Server: gws
Transfer-Encoding: chunked
Connection: Close
这里有一个额外的CRLF
<html>
html数据
</html>

2. 请求消息格式

下图是HTTP协议请求的一般格式:

  • 请求行
第一行是请求行:请求方法 URL路径 HTTP版本号,上面的例子中的请求行是:
GET /index.html HTTP/1.1
使用GET方法请求服务器根目录下的index.html文件,约定使用HTTP/1.1版本。
请求方法包括GET、POST、HEAD、OPTIONS、TRACE、PUT等几种,最常用的前2种。
1. GET方法。通过将参数附加在URL后面提交参数。如http://www.google.cn/search?hl=zh-CN&newwindow=1&rls=com.microsoft%3Azh-cn%3AIE-SearchBox&q=%E6%89%8B%E6%9C%BA&meta=&aq=f&oq=
GET
2. POST方法。通过将参数附加在请求的头部行后面(GET方式是没有数据体的)提交参数。GET方式提交参数数据量一般限制在1k一下,而POST是没有限制的。POST一般用在表单数据提交的时候。
3. HEAD方法不让服务器在回应中返回任何实体。对HEAD请求的回应部分来说,它的HTTP标题中包含的元信息与通过GET请求所得到的是相同的。通过使用这种方法,不必传输整个实体主体,就可以得到请求URI所指定资源的元信息。该方法通常用来测试超链接的合法性、可访问性及最近更新。 
  • 头部行
头部行中的内容一般用来描述客户端能兼容的类型。如Accept-Language告诉服务器客户端支持哪些语言;Cache-Control告诉服务器客户端是否支持cache。
  • 附属体(数据实体)
请求的附属体,GET不适用,POST方法提交数据时,用来存放请求的参数。
  • 客户端传递参数方式
1. GET方式传递,直接在URL后面。
2. POST方式传递,请求行告诉服务器参数长度,通过附属体独立传给服务器。
3. Cookie方式传递,不要忘记这种方式了,会话Session功能就是通过这种方式实现的哦。
  • 一些常用的头部行请求参数
User-Agent:客户端的浏览器信息。
Connection:close表示使用短连接,Keep-Alive表示客户端支持持久连接。
Date:消息产生的当前时间。
Accept-Language:客户端支持的语言。
Cache-Control:客户端是否支持cache。no-cache表示客户端不支持cache,如max-age=3600,告诉User Agent 该请求的响应结果在多长时间内有效,在有效期内,当用户再次需要访问时,直接从客户端本地提取,不需要访问服务器。
Referer:Referer用以告诉服务器该请求来自于哪个URL,可以用追踪用户的WEB访问路径。
If-Modified-Since: 如果请求消息包含If-Modified-Since标题域,GET方法的语法就变成“条件GET”,即“(conditional GET)”。 条件GET方法可以对指定资源进行判断,如果它在If-Modified-Since标题域中的指定日期后发生了更新,才启动传输,否则不传输。这种条件GET允许被缓存的实体在不必经过多次请求或不必要的数据传输就能进行刷新,从而有助于降低网络负载。
Last-Modified: Sun, 03 Dec 2008 23:52:56 GMT
ETag: “1cbf3-dfd-3a2adcd8″
一般应用在文件下载上,用于标识响应内容的最后修改时间或内容较验码,当下一次User agent需要时,服务首先判断这二个值是否跟服务器上一致,一样则不需要返回内容。

Expires:该请求的响应结果在什么时间失效,在没有失效之前,代理可直接从缓存中返回以前的响应结果。
Host:指定请求资源的主机和端口号。HTTP/1.1请求必须指定Host,否则服务器会返回400状态码。
  • 请求消息例子
GET请求例子:
GET /css/news070130.css HTTP/1.1
Accept: */*
Referer: http://news.qq.com/a/20081224/000088.htm
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
If-Modified-Since: Thu, 29 Mar 2007 02:05:43 GMT; length=11339
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: news.qq.com
Connection: Keep-Alive
Cookie: ssid=idlsesels; flv=9.0; icache=ADLFMBGC; adid=adsdifids; isflucky_50829637=0; 

POST请求例子:
POST /Login.php  HTTP/1.1
Accept: image/gif,*/*
Accept-language: zh-cn
Accept-encodeing: gzip
User-Agent: MSIE6.0
Host: www.some.com
Connection: Keep-Alive
Content-Length: 7
Cache-Control:no-cache
Cookie: name1=value1; name2=value2;
这里有一个额外的CRLF
username=b&passwd=d

3. 响应消息格式

响应消息包括状态行、若干头部行和附属体(html数据实体)。
  • 状态行
状态行包括:HTTP协议版本号、状态码、状态码的文本描述信息。如:HTTP/1.1 200 OK
状态码由一个三位数组成,状态码大体有5种含义:
1. 1xx。信息,请求收到,继续处理。
2. 2xx。成功。200请求成功;206断点续传。
3. 3xx。重定向。一般跳转到新的地址。
4. 4xx。客户端错误。404文件不存在
5. 5xx。服务器错误。500内部错误。
  • 头部行
Set-Cookie:服务器设置客户端Cookie。设置格式是name=value,设置多个参数时中间用分号隔开。Set-Cookie时还会用到几个参数:PATH设置有效的路径,DOMAIN设置cookie生效的域名,Expire设置cookie的有效时间,0表示关闭浏览器就失效。
Location:当服务器返回3xx重定向时,该参数实现重定向。广告链接的跳转就使用这种协议。
Content-Length:附属体(数据实体)的长度

HTTP协议 - 协议格式相关推荐

  1. 【计算机网络】网络层 : BGP 协议 ( BGP 协议简介 | BGP 协议信息交换 | BGP 协议报文格式 | BGP-4 常用报文 | RIP 、OSPF、BGP 协议对比 )

    文章目录 一.路由选择协议分类 二.BGP 协议 简介 三.BGP 协议 信息交换过程 三.BGP 协议 报文格式 四.BGP 协议 特点 五.BGP-4 协议的 四种报文 六.RIP .OSPF.B ...

  2. linux网络编程之IP协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)和TCP、UDP协议头结构总结

    首先声明,这篇博客是几篇博客转载然后总结在一起的,只当是学习笔记,不在意是什么原创和转载了,学到东西就好. 1.IP协议首部格式(IP协议处余网络层) IP数据报首部图片格式: 最高位在左边,记为0 ...

  3. java.net.MalformedURLException: unknown protocol: c 这个错一般有两种原因导致: 1、URL协议、格式或者路径错误,...

    java.net.MalformedURLException: unknown protocol: c这个错一般有两种原因导致:1.URL协议.格式或者路径错误, 好好检查下你程序中的代码如果是路径问 ...

  4. 【计算机网络】6. 网络基础4之详解IP协议( IP协议头格式、IP地址管理、路由选择)

    目录 1. IP协议头格式 2. IP地址管理 2.1 IP地址的早期划分方式 2.1.1 A类 2.1.2 B类 2.1.3 C类 2.2 现在分配IP的方式:CIDR方式 2.2.1 引入子网掩码 ...

  5. 详谈短信开发-SMPP的WAP短信协议展开格式

    WAP短信的SMPP的协议展开格式如下: No.     Time                       Source                Destination           ...

  6. TCP/UDP协议首部格式

    1. UDP协议首部格式 UDP首部有8个字节,由4个字段构成,每个字段都是两个字节, 1.源端口号: 可有可无,需要对方回信时选用,不需要时全部置0. 2.目的端口号:必须有,在终点交付报文的时候需 ...

  7. AB罗克韦尔的PLC标签MQTT协议JSON格式发布与订阅-智能网关设置

    案例通过智能网关IGT-DSER连接罗克韦尔1756-L72的以太网端口,实现PLC的标签数据MQTT协议JSON格式发布与订阅.PLC与数据库双向通讯  PLC协议转ModbusTCP协议  PLC ...

  8. 详谈短信开发-SMPP的长短信协议展开格式

    长短信的SMPP的协议展开格式如下: No.     Time                       Source                Destination           Pr ...

  9. 【网络原理2】---TCP协议的格式

    传输层重点协议 TCP 协议 TCP 协议段格式 TCP内部的工作机制 1. 确认应答 2.超时重传 TCP 协议 TCP 协议相对于 UDP 是复杂不少的. 在网络编程这里已经讲了 TCP 的特点: ...

  10. 《STM32从零开始学习历程》——CAN通讯协议协议层

    <STM32从零开始学习历程>@EnzoReventon CAN通讯协议协议层 相关链接: <STM32从零开始学习历程>--CAN通讯协议物理层 CAN-bus规范 V2.0 ...

最新文章

  1. 181102 Python环境搭建(安装Sublime Text3)
  2. 面试时,当你有权提问时,别客气,这是个逆转的好机会(内容摘自Java Web轻量级开发面试教程)...
  3. JDK环境下利用记事本对java文件进行运行编译
  4. websocket实现多屏互动_纸笔互动课堂应用场景到底有些什么呢?
  5. 安卓投屏软件_有哪些好用又免费的手机投屏到电脑的软件?
  6. netty channel的线程安全性与@Sharable
  7. 拓端tecdat|R 语言绘制功能富集泡泡图
  8. java并发包源码分析
  9. 如何用MATLAB编写FIR维纳滤波器,最佳FIR维纳滤波器实现
  10. poj 1113 Wall 凸包
  11. RPG游戏《黑暗之光》流程介绍与代码分析之(九):技能系统的实现
  12. Java程序语言(基础篇)第2章 基本程序设计 编程练习题解答
  13. seurat质控Warning: Feature names cannot have underscores (‘_‘), replacing with dashes (‘-‘)
  14. 未来 Android 开发的从业方向
  15. android adc,Android配置ADC接口
  16. 机器学习------L1、L2规范化(L1 Regularization、L1 Regularization)
  17. C语言编写可以实现malloc() free()功能的函数(空间/时间复杂度低)
  18. 试用期六个月,前三个月没有社保,这样的工作机会你会考虑吗?
  19. 国家计算机职业技能鉴定4级考试内容大全
  20. 【蓝桥杯单片机(7)】数码管定时器显示任意字符串

热门文章

  1. nodemon:运行提示错误:无法加载文件 xxxx
  2. 厦大计算机科学系培养方案,计算机科学与技术学术型培养-厦门大学计算机科学系...
  3. 新闻发布会策划案【新公司成立】
  4. 分享 stormzhang的Andoid学习之路
  5. 软件测试二分查找函数,二分查找
  6. 【OCR】文本检测方案 TextFuseNet解读
  7. Camunda开源协议可否商用
  8. yolov5训练自己的数据集,OpenCV DNN推理
  9. linux iptables mac,mac下的iptables---pfctl
  10. C#支付宝支付接口H5版(手机网页支付)