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& amp;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:附属体(数据实体)的长度
相关推荐
Telnet 是一种远程登录协议,允许用户远程访问和管理服务器,而 HTTP 协议是万维网的基础协议。在 Web 开发中,理解 HTTP 协议是非常重要的,而使用 Telnet 命令可以帮助开发者更好地理解 HTTP 协议的工作机制。 ...
测试HTTP协议主要关注页面加载速度、请求响应时间以及HTTP状态码的正确性,这对于网站性能优化和故障排查具有重要意义。 3. HTTPS(Hypertext Transfer Protocol Secure):HTTPS是在HTTP基础上加入SSL/TLS加密的...
在IT行业中,telnet是一种古老但仍然实用的远程登录协议,它允许用户通过网络连接到另一台计算机,以便进行各种管理、诊断或测试操作。标题中的“一款非常好用的telnet工具”指的是这类软件,通常它们提供了一个用户...
Linux中的`telnet`工具是一种网络协议客户端,用于进行远程登录。它允许用户通过命令行接口连接到远程服务器,执行各种操作,如管理服务、测试网络连接或进行系统诊断。在Linux环境中,`telnet`通常被用来测试特定...
本教程主要探讨的是如何在Linux环境中配置DHCP(动态主机配置协议)服务器和telnet服务器,这两个服务对于网络管理和远程访问至关重要。 DHCP服务器是网络管理员的重要工具,它自动分配IP地址、子网掩码、默认网关...
例如,`telnet google.com 80`将尝试连接到Google的HTTP服务器。 6. **退出与关闭**:在telnet会话中,可以输入`quit`或`Ctrl + ]`组合键来退出连接。 7. **其他相关工具**:除了telnet,还有许多增强型的telnet...
此外,telnet还有其他一些实用功能,如诊断网络问题、测试邮件服务器的SMTP端口、查看Web服务器的HTTP响应等。例如,你可以通过telnet连接到80端口来测试Web服务器的运行状态: ```bash telnet IP地址 80 ``` 然后...
2. **功能与应用**:telnet客户端可以用来测试网络服务是否正常运行,比如检查HTTP服务器、SMTP服务器等是否在线。此外,它也常用于路由器、交换机等网络设备的配置和故障诊断。 3. **局限性**:尽管telnet客户端在...
#### 利用telnet观察HTTP协议的通讯过程 1. **打开telnet**:使用telnet工具连接到目标服务器。 2. **连接服务器并发送请求**:连接成功后,按照HTTP协议格式发送请求。 3. **实验结果**:观察服务器返回的响应。 4...
2. **TCP/IP协议与套接字编程**:实现Telnet服务需要对TCP/IP协议有深入理解,包括TCP连接的三次握手和四次挥手过程。同时,要熟练掌握套接字编程,创建服务器端的监听套接字,接收客户端的连接请求,以及建立客户端...
**使用Telnet测试Tomcat服务器** 对于配置了Tomcat服务器的本地环境,可以通过Telnet连接到localhost的8080端口,这是Tomcat默认的HTTP端口。一旦连接成功,可以发送HTTP请求来测试服务器的响应。例如,使用HEAD...
然而,对于测试、诊断或旧系统的维护,Telnet仍然有其应用价值。 **四、案例与实践** 结合提供的资源“C#网络编程”,你可以深入学习如何使用C#实现WMI查询和管理,以及创建 Telnet 客户端和服务器程序。通过实际...
Telnet是一种网络协议,允许用户通过网络远程登录到另一台计算机上,从而实现远程控制和命令行交互。在PHP中实现Telnet功能,通常需要用到PHP的流(Stream)函数或者第三方库,如phpseclib,它提供了一个纯PHP实现的...
telnet服务则是一个远程登录协议,用户可以通过它连接到远程服务器,执行命令或测试服务。IPOP支持telnet,意味着用户可以在本地机器上启动telnet客户端,连接到任何开放telnet服务的远程设备,进行配置查看或服务...
在软件/插件领域,`telnet`可以被集成到各种网络管理工具或自动化脚本中,用于测试网络服务是否在线,例如检查SMTP、HTTP或其他自定义端口上的服务状态。此外,开发人员也可能使用`telnet`进行远程调试,尤其是在...
在爬虫的上下文中,TELnet可能用于测试服务器的响应,或者在某些情况下,当目标网站提供了telnet接口时,爬虫可能需要使用它来获取数据。然而,由于TELnet通信未加密,安全性较低,现代网络实践中更多使用SSH(安全...
在这个实验中,学生将学习HTTP协议的工作原理,并了解其在tcp/ip协议中的作用。 实验十三 TELNET 与 FTP TELNET和FTP是tcp/ip协议中的一种应用层协议,负责提供远程登录和文件传输服务。在这个实验中,学生将学习...
这里主要涉及HTTP/1.0与HTTP/1.1的对比,HTTP请求消息结构(包括请求方法、请求头、实体头等),HTTP响应消息结构(状态码、响应头等),如何使用telnet进行HTTP测试,以及常见的请求方法如GET、POST等。 **3. 深入...