深入HTTP请求流程

深入HTTP请求流程

啥叫HTTP协议

HTTP协议说人话就是超文本传输协议,是一中详细规定了浏览器和万维网网服务器之间相互通信的协议,听说是万维网交换信息的基础.

HTTP是一种无状态协议,意思是说Web浏览器与Web服务器之间不需要建立持久的连接,当客户端发送完HTTP请求(request),然后服务端返回HTTP响应(response)以后,连接就会被无情地断开~ 也就是说,言下之意就是,HTTP协议只允许客户端联系服务端.

HTTP请求

HTTP请求三个部分,分别为

*请求行 (请求方法)

*请求头 (消息报头)

*请求正文

​ HTTP请求例子:

post /login.php HTTP/1.1        //请求行
HOST: www.keysking.com          //请求头(开始)
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:15.0)  Gecko/20100101 Firefox/15.0
                                //空白行 代表请求头结束,请求正文开始
Username=keysking&password=pass //请求正文

请求行

请求行用一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:

Method Request-URI HTTP-Version

其中

Method表示请求方法;

Request-URI是一个统一资源标识符(也就是URL);

HTTP-Version表示请求的HTTP协议版本;

例如:

GET /form.html HTTP/1.1 (CRLF)

其中,请求方法有如下几种:

GET 请求获取Request-URI所标识的资源

POST 在Request-URI所标识的资源后附加新的数据

HEAD 请求获取由Request-URI所标识的资源的响应消息报头

PUT 请求服务器存储一个资源,并用Request-URI作为其标识

DELETE 请求服务器删除Request-URI所标识的资源

TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断

CONNECT 保留将来使用

OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

请求头

在HTTP请求中,从第二行到空白行(见上面例子),都是请求头的国土.

  1. Host

    Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。

  2. Referer

    Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。

    (说人话就是,告诉服务器你是从哪个页面点进来的~~~)

  3. User-Agent

    User-Agent头域的内容包含发出请求的用户信息.

    这玩意可暴露你好多信息呐,啥操作系统,浏览器啥的,统统发给服务器~

  4. Cookie

    别小看这个小饼干(cookie的原意)哦,它可是一个非常重要的请求头,常用来表示请求者的身份,我们平时让网站记住自己的登录状态就多亏了它哦~~

  5. Range

    Range头域可以请求实体的一个或者多个子范围。例如,

    表示头500个字节:bytes=0-499

    表示第二个500字节:bytes=500-999
    表示最后500个字节:bytes=-500
    表示500字节以后的范围:bytes=500-
    第一个和最后一个字节:bytes=0-0,-1
    同时指定几个范围:bytes=500-600,601-999
    但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200(OK)。

    貌似与文件的下载有关…不懂~~~QAQ

  6. x-forward-for

    又叫XFF头,它代表客户端,也就是HTTP的请求端的IP,可以有多个,中间用逗号隔开~ 标准格式如下:

    X-Forwarded-For: client1, proxy1, proxy2

    第一项为真实的客户端ip,剩下的就是曾经经过的代理或负载均衡的ip地址,经过几个就会出现几个。

    听说可以通过伪造这玩意刷票~~(笑

  7. Accept

    用来告诉服务端客户端想获得哪些MIME类型的信息,比如Accept: text/html 就表示客户端希望接受HTML文本.

  8. Accept-Charset

    用于告诉服务器客户端想接受的字符集.

请求正文

HTTP请求的最后是请求正文,请求正文可有可没有,一般用于POST请求方法.

HTTP响应

服务器接到来自客户端的HTTP请求后,就会对请求进行分析处理,然后向客户端发送HTTP响应.HTTP响应也包含三个部分,分别是响应行,响应头(消息报头)和响应正文(消息主题).

HTTP/1.1 200 OK     //响应行
Date: Sat, 31 Dec 2005 23:59:59 GMT     //响应头开始
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122
                                        //空白行,代表响应行结束
<html>                              //响应正文
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>

响应行

HTTP响应的第一行是响应行,其中包括HTTP版本,状态码(比如上面例子中的200),以及消息(“OK”).

响应行中的状态码用来告知客户端响应的状态,不同的状态码代表的状态不同.

状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。

1xx:指示信息--表示请求已接收,继续处理。
2xx:成功--表示请求已被成功接收、理解、接受。
3xx:重定向--要完成请求必须进行更进一步的操作。
4xx:客户端错误--请求有语法错误或请求无法实现。
5xx:服务器端错误--服务器未能实现合法的请求。

常见状态代码、状态描述的说明如下。

200 OK:客户端请求成功。
400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
403 Forbidden:服务器收到请求,但是拒绝提供服务。
404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
500 Internal Server Error:服务器发生不可预期的错误。
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK。

响应头

响应头与请求头的作用差不多,也是标识一些属性,常见的相应头如下:

  1. Sever

    服务器所用的Web服务器名称,比如Sever:Apache/1.3.6(Unix),渗透测试者可以利用这个探测Web服务器名称.

  2. Set-Cookie

    向服务端设置Cookie

  3. Last-Modified

    资料修改的最后时间.

  4. Location

    告诉浏览器去访问哪个页面,浏览器接收到这个请求后,通常会立刻访问Location头所指向的页面,通常配合302状态码使用.

  5. Refresh

    告诉浏览器定时刷新页面.

消息报头

是服务器向客户端发送的HTML数据


本笔记为keysking的学习笔记,部分内容来源于《Web安全深度剖析》以及网络资料
出于共享精神,欢迎转载,但请注明出处,谢谢 :)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用Linux编写ONVIF代码的流程图可以大致分为以下几个步骤: 1. 开发环境设置:首先需要在Linux系统上搭建开发环境,包括安装编译器(如GCC)、设置开发工具链和配置相关库文件等。 2. 理解ONVIF协议:学习理解ONVIF协议的各种功能和特性,了解其工作原理和实现方式。 3. 选择开发语言和网络库:选择适合的编程语言,如C++或Python,并选择在Linux下实现ONVIF功能所需的网络库,如gSOAP或libonvif。 4. 创建项目文件:使用所选的编程语言创建一个新的项目文件夹,并设置项目目录结构。 5. 导入依赖库:将所需的ONVIF库文件导入到项目目录中,并在代码中引入这些库文件。 6. 编写代码:根据ONVIF协议的要求和功能,编写代码来实现相应的功能,如设备发现、视频流传输、图像抓取等。这些代码应该Follow ONVIF API的规范和使用ONVIF库提供的函数。 7. 编译和生成可执行文件:使用编译器将代码编译成可执行文件,确保代码没有错误并生成可运行的二进制文件。 8. 运行代码:在Linux系统上运行生成的可执行文件,并测试功能的正确性和性能。根据需要,可能需要配置设备参数和网络连接。 需要注意的是,这只是一个大致的流程图,实际上每个步骤都可能涉及到很多细节和具体的实现方式。此外,还需要深入学习和熟悉ONVIF协议的各种功能和细节,以及相关的网络和媒体传输知识。 ### 回答2: 在使用Linux的ONVIF代码之前,首先需要确保已经安装了适当的开发环境以及相关的库和工具。下面是使用Linux的ONVIF代码的基本流程图: 1. 导入所需的库和头文件。 2. 创建ONVIF设备对象,并设置连接参数,例如设备的IP地址、端口号、用户名和密码。 3. 连接到设备,并进行身份验证。 4. 获取设备的基本信息。可以通过调用相应的API函数获取设备的制造商、型号、固件版本等信息。 5. 获取设备的媒体服务的URL。可以通过调用相应的API函数获取设备上的媒体服务的URL,以便后续的媒体操作。 6. 创建媒体服务对象,连接到媒体服务,并进行身份验证。 7. 获取设备的媒体流配置。可以通过调用相应的API函数获取设备的媒体流配置,例如视频编码参数、分辨率、帧率等。 8. 开始媒体流传输。可以通过调用相应的API函数开启设备的媒体流,开始传输视频流或音频流。 9. 对于视频流,可以使用合适的方法解码和播放视频;对于音频流,可以使用合适的方法进行音频处理。 10. 完成媒体操作后,关闭媒体流传输。 11. 断开与媒体服务的连接。 12. 断开与设备的连接。 以上是一个简单的使用Linux的ONVIF代码的流程示意图,实际使用中可能还会涉及更多操作和逻辑。需要根据具体的需求和代码实现进行合适的调整。 ### 回答3: 使用Linux上的ONVIF代码的流程图如下: 1. 初始化程序:首先,需要在Linux系统上设置开发环境,包括安装必要的开发工具和库文件。 2. 创建连接:通过网络连接到ONVIF设备。首先,需要获取设备的IP地址和端口号。然后,使用Socket编程技术来建立与设备的TCP连接。 3. 发送请求:使用HTTP协议发送指定的ONVIF请求。根据需要的功能,构建相应的SOAP消息,并将其发送到设备。 4. 接收响应:等待设备发送响应消息。一旦收到响应,解析SOAP消息,提取需要的信息,并根据需要进行相应的处理。 5. 处理响应:根据接收到的响应消息的结果,进行相应的处理。可能的操作包括获取设备的信息,配置设备的参数,开始/停止实时流等。 6. 断开连接:在完成与设备的通信后,需要断开TCP连接,释放资源。 总结:使用Linux上的ONVIF代码的流程包括初始化程序、创建连接、发送请求、接收响应、处理响应和断开连接。这些步骤一起完成了与ONVIF设备的通信和操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值