http协议分析和使用(部分转)

本文详细介绍了webbench工具的使用方法及其背后的HTTP协议原理,包括指令读取、分析、构造HTTP请求和连接获取网页的过程。同时,文章阐述了HTTP协议的基本概念、工作流程、版本以及常见请求头的作用,提供了模拟HTTP请求的方法和实例,帮助读者全面理解HTTP协议与webbench的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看webbench,一个网站测压工具,里面设计很多http协议的东西,准备写下来,记录自己学习的过程。

webbench的主要步骤是

读入指令

对指令进行分析

构造http request

进行连接,获取网页


由于指令目前是单个的网页,所以是对一个网页重复发送请求。

http://blog.youkuaiyun.com/lmh12506/article/details/7794512

http协议相关

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

在TCP/IP协议栈中的位置
HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图所示:


默认HTTP的端口号为80,HTTPS的端口号为443。

目前http的协议版本有,0.9,1.0,1.1,2等

工作流程
一次HTTP操作称为一个事务,其工作过程可分为四步:

1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。

2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

这里主要说发送的请求字段的主要部分

请求方法:GET,POST,HEAD,PUT,DELETE,OPTIONS, TRACE,CONNECT

请求消息格式

请求消息格式如下所示:

请求行,通用信息头|请求头|实体头

CRLF(回车换行,\r\n)

实体内容,其中“请求行”为:请求行 = 方法 [空格] 请求URI [空格] 版本号 [回车换行]

请求行实例:

Eg1:

GET /index.html HTTP/1.1
Eg2:

POST http://192.168.2.217:8080/index.jsp HTTP/1.1

HTTP请求消息实例:

GET /hello.htm HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
If-Modified-Since: Wed, 17 Oct 2007 02:15:55 GMT
If-None-Match: W/"158-1192587355000"
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: 192.168.2.162:8080
Connection: Keep-Alive
可以在网上搜telnet进行模拟http请求的帖子,进行模拟

http://blog.youkuaiyun.com/lmh12506/article/details/7794512

关键字

请求头
HTTP最常见的请求头如下:

l Accept:浏览器可接受的MIME类型;

l Accept-Charset:浏览器可接受的字符集;

l Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间;

l Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到;

l Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中;

l Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小;

l Content-Length:表示请求消息正文的长度;

l Cookie:这是最重要的请求头信息之一;

l From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它;

l Host:初始URL中的主机和端口;可忽略

l If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答;

l Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝;在webbench中,当有代理的时候该值才会被设定

l Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。

l User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用;webbench中的关键字是:WebBench 1.5

l UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。

todo,更多协议分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值