HTTP协议概述:
http是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。
HTTP协议特点:
- 无状态:是指协议对于交互性场景没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。现在可用Cookie和Session解决。
- 无连接:限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。现在可使用Keep-Alive 功能使客户端到服务器端的连接持续有效,
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识)加以标记。
HTTP请求头:
HTTP请求头由三部分组成,分别是请求行,消息报头,请求正文。
请求行
POST /upload-labs/Pass-01/index.php HTTP/1.1
这段请求行内容说明了当前数据包的请求方法及路径。其中:
- 请求方法是post
- 请求路径是/upload-labs/Pass-01/index.php
- HTTP版本是HTTP1.1
HTTP协议定义了多种请求方法,如:GET,POST,HEAD,PUT,DELETE,TRACE,CONNECT。但在实际应用上,主要以GET和POST两种方法展开请求。
消息报头
Host: 127.0.0.1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Content-Type: multipart/form-data; boundary=---------------------------172123831630691997542888596093 Content-Length: 381 Origin: http://127.0.0.1 Connection: close Referer: http://127.0.0.1/upload-labs/Pass-01/index.php Cookie: PHPSESSID=r5cl9om86f1t1tqce9m87dp05u Upgrade-Insecure-Requests: 1 -----------------------------172123831630691997542888596093 Content-Disposition: form-data; name="upload_file"; filename="webshell.php" Content-Type: image/png
请求消息报头用来向服务器端传递客户端自身的信息及用户的附加信息。
- Host(必须):Host主要用于指定被请求资源的主机和端口号,缺少端口号时默认为80。
- Content-Length:标识请求包中的内容长度。
- Origin:标识请求发起源,只适用于post方式。
- Referer:标识当前请求的发起页面。
- Accept:代表发送端(客户端)希望接受的数据类型。
- Accept-Encoding:告诉服务器此客户端能接受的内容编码。
- Accept-Language:告诉服务器客户端支持的语言类型。
- User-Agent:告诉服务器当前访问者的情况,其中包含用户操作系统,浏览器的基本信息。
- Content-Type:表示具体请求中的媒体类型信息。
请求正文
<?php @ev al($_P OST['hacker']); ?> -----------------------------172123831630691997542888596093 Content-Disposition: form-data; name="submit" ä¸ä¼ -----------------------------172123831630691997542888596093--
请求正文中包含HTTP传输的信息。当请求方法为GET时,请求正文为空。当请求方法为POST时,请求正文中才有内容。
HTTP响应头:
HTTP响应头由三部分组成,分别是响应行,响应消息报头,响应正文内容。
响应行
HTTP/1.1 200 OK
其中
- HTTP/1.1:代表服务器HTTP协议的版本。
- 200:服务器返回的响应状态码。
- OK:对状态码的文本描述。
响应消息报头
Date: Thu, 30 Apr 2020 15:48:00 GMT Server: Apache/2.4.39 (Win64) OpenSSL/1.1.1b mod_fcgid/2.3.9a mod_log_rotate/1.02 X-Powered-By: PHP/7.3.4 Connection: close Content-Type: text/html;charset=utf-8 Content-Length: 4786
响应消息报头允许服务器传递不能放在响应行中的信息,以及关于服务器的信息和对Request-URL所标识的资源的下一步访问信息。
其中- Sever:用来告诉客户端提供本次响应的服务器端采用的中间件,此例中是Apache。
- X-Powered-By:用来标识当前web站点所采用的语言及版本号。
响应正文内容
部分响应正文内容 <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> <link rel="icon" type="image/x-icon" href="/upload-labs/img/favicon.png" /> <title>upload-labs</title> </head> <link rel="stylesheet" type="text/css" href="/upload-labs/css/index.css"> <link rel="stylesheet" type="text/css" href="/upload-labs/css/prism.css"> <body> <div id="head"> <a href="/upload-labs/"><img src="/upload-labs/img/logo.png"/></a>
响应包中的内容会携带当前页面的源码。客户端可根据响应包中的源码显示出完整的页面。
HTTP状态码:
1XX:表示提示信息,说明请求已被成功接收,继续处理。
2XX:表示成功,说明请求已被成功接收,理解,接收。
3XX:表示重定向,要完成请求必须进一步处理。
4XX:表示客户端错误,请求有用法错误或请求无法实现。
5XX:表示服务器端错误,服务器处理请求时出错。
常见状态码:
- 100:这个状态码是告诉客户端应该继续发送请求,这个临时响应是用来通知客户端的,部分的请求服务器已经接受,但是客户端应继续发送求请求的剩余部分,如果请求已经完成,就忽略这个响应,而且服务器会在请求完成后向客户发送一个最终的结果。
- 200:这个是最常见的http状态码,表示服务器已经成功接受请求,并将返回客户端所请求的最终结果。
- 202:表示服务器已经接受了请求,但是还没有处理,而且这个请求最终会不会处理还不确定。
- 204:服务器成功处理了请求,但没有返回任何实体内容 ,可能会返回新的头部元信息。
- 301:客户端请求的网页已经永久移动到新的位置,当链接发生变化时,返回301代码告诉客户端链接的变化,客户端保存新的链接,并向新的链接发出请求,已返回请求结果。
- 404:请求失败,客户端请求的资源没有找到或者是不存在。
- 500:服务器遇到未知的错误,导致无法完成客户端当前的请求。
- 503:服务器由于临时的服务器过载或者是维护,无法解决当前的请求。
Comments | NOTHING