WEB安全基础之HTTP协议
⼀个协议定义了在两个或多个通信实体之间交换的报⽂格式和次序,以及报⽂发送和/或接收⼀条报⽂或其他事件所采取的动作。
⽹络边缘 端系统(主机:运⾏应⽤程序):桌⾯计算机、服务器、移动计算机。
接⼊⽹将端系统连接到其 边缘路由器(端系统到任何其他远程端系统的路径上的第⼀台路由器)的物理链路。
⽹络核⼼由因特⽹端系统的分组交换机和链路构成的⽹状⽹络。
1、HTTP请求报⽂
HTTP HyperText Transfer Protocol,超⽂本传输协议。
(1)HTTP的请求⽅法
HTTP报⽂:请求报⽂和响应报⽂两种,⼀个典型的HTTP报⽂如下:
GET /somedir/page.html HTTP/1.1
Host:www.someschool.edu
Connection:close
User-agent:Mozilla/5.0
Accept-language:fr
HTTP请求报⽂的第⼀⾏叫做请求⾏,其后继的⾏叫做⾸部⾏。
请求⾏有3个字段:⽅法字段、URL字段、HTTP版本字段;
请求⾏有3个字段
⽅法字段:GET、POST、HEAD、PUT、DELETE,绝⼤部本HTTP请求报⽂使⽤GET⽅法。
URL字段:带有请求对象的标识,上例中请求对象是/somedir/page.html。
HTTP版本:版本字段是⾃解释的,HTTP/1.1版本。
⾸部⾏字段
Host:指明了对象所在的主机
Connection:close,⾮持续连接,要求服务器发送完被请求的对象 后就关闭这条连接。
User-agent:⽤户代理。
Accept-language:语⾔版本。
请求报⽂的通⽤格式如下:
如上图中,在⾸部⾏(和附加的回车和换⾏)后有⼀个“实体体”(entity body),使⽤GET⽅法时实体体为空,⽽使⽤POST⽅法时才使⽤该实体体。
当⽤户提交表单时,HTTP客户常常使⽤POST⽅法,使⽤POST报⽂时,实体体中包含的是⽤户在表单字段中的输⼊值。
⽤表单⽣成的请求报⽂不是必须使⽤POST⽅法。
2、HTTP响应报⽂
⼀条典型的HTTP响应报⽂如下:
HTTP/1.1  200  OK
Connection:close
Date:Mon, 17 Aug  2020  15:44:04  GMT
Server:Apache/2.2.3  (CentOS)
Last-Modified:Mon,  17  Aug  2020  15:11:03  GMT
Connection-Length:6821
Content-Type:text/html
(data  data  data  data data  ···)
初始状态⾏
协议版本字段:HTTP/1.1
状态码:200
状态信息:服务器已经到并正在发送所请求的对象
6个⾸部⾏
Connection:close,发送完报⽂后服务器关闭该TCP连接。
Date:服务器产⽣并发送该响应报⽂的⽇期和时间。
Server:该报⽂是由⼀台Apache Web服务器产⽣的。
Last-Modified:对象创建或者最后修改的⽇期和时间,这对既可能在本地客户也可能在⽹络缓存服务器上的对象缓存来说⾮常重要。
Content-Length:被发送对象的字节数
Content-Type:实体体重的对象是HTML⽂本。
实体体
报⽂的主要部分,包含了所请求的对象本⾝。
响应报⽂的通⽤格式如下:
常见的状态码和相关的状态信息:
状态码状态信息
200OK:请求成功,信息在返回的响应报⽂中
301Moved Permanently:请求的对象已经被永久转移了,新的URL定义在响应报⽂的Location:⾸部⾏中。客户软件将⾃动获取新的URL。
400Bad Request:⼀个通⽤差错代码,指⽰该请求不能被服务器理解。
404Not Found:被请求的⽂档不在服务器上。
505HTTP Version Not Support:服务器不⽀持请求报⽂使⽤的HTTP协议版本。
HTTP规范中定义了很多可以被浏览器、Web服务器和Web缓存服务器插⼊的⾸部⾏,本⽂中只提到了全部⾸部⾏中的少数⼏个,[Krishnamurty 2001]对HTTP协议(包括它的⾸部⾏和状态码)进⾏了⼴
泛讨论。
浏览器产⽣⾸部⾏与很多因素有关,包括浏览器的类型和协议版本(例如,HTTP/1.0浏览器不会产⽣任何1.1版本的⾸部⾏)、浏览器的⽤户配置(如喜好的语⾔)、浏览器当前是否有⼀个缓存的但是可能超期的对象版本。
Web服务器在产品、版本和配置上都有差异,也会影响响应报⽂的⾸部⾏。
3、HTTP请求⽅法
HTTP1.0 定义了三种请求⽅法: GET, POST 和 HEAD⽅法。
GET⽅法: 发送请求来获得服务器上的资源,请求体中不会包含请求数据,请求数据放在协议头中。另外get⽀持快取、缓存、可保留书签等。幂等
Head⽅法: 本质和get⼀样,但是响应中没有呈现数据,⽽是http的头信息,主要⽤来检查资源或超链接的有效性或是否可以可达、检查⽹页是否被串改或更新,获取头信息等,特别适⽤在有限的速度和带宽下。
HTTP1.1 新增了六种请求⽅法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT ⽅法。
⽅法描述
1GET请求指定的页⾯信息,并返回实体主体
2HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,⽤于获取报头
3POST 向指定资源提交数据进⾏处理请求(例如提交表单或者上传⽂件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建⽴
和/或已有资源的修改。
4PUT从客户端向服务器传送的数据取代指定的⽂档的内容。
5DELETE请求服务器删除指定的页⾯。
6CONNECT HTTP/1.1 协议中预留给能够将连接改为管道⽅式的代理服务器。
7OPTIONS允许客户端查看服务器的性能。
8TRACE回显服务器收到的请求,主要⽤于测试或诊断。
9PATCH是对 PUT ⽅法的补充,⽤来对已知资源进⾏局部更新 。
4、HTTP状态码
(1)HTTP状态码分类
HTTP状态码由三个⼗进制数字组成,第⼀个⼗进制数字定义了状态码的类型,后两个数字没有分类的作⽤。HTTP状态码共分为5种类型:分类分类描述
1**信息,服务器收到请求,需要请求者继续执⾏操作
2**成功,操作被成功接收并处理
3**重定向,需要进⼀步的操作以完成请求
4**客户端错误,请求包含语法错误或⽆法完成请求
5**服务器错误,服务器在处理请求的过程中发⽣了错误
HTTP状态码列表:
英⽂中⽂描述
100continue继续。客户端应继续其请求
101Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更⾼级的协议,例如,切换到HTTP的新版本协议
200OK请求成功。⼀般⽤于GET与POST请求
201Created已创建。成功请求并创建了新的资源
202Accepted已接受。已经接受请求,但未处理完成
203Non-Authoritative
Information
⾮授权信息。请求成功。但返回的meta信息不在原始的服务器,⽽是⼀个副本
204No Content⽆内容。服务器成功处理,但未返回内容。在未更新⽹页的情况下,可确保浏览器继续显⽰当前⽂档
205Reset Content 重置内容。服务器处理成功,⽤户终端(例如:浏览器)应重置⽂档视图。可通过此返回码清除浏览器的表单域
206Partial Content 部分内容。服务器成功处理了部分GET请求
300
Multiple Choices
多种选择。请求的资源可包括多个位置,相应可返回⼀个资源特征与地址的列表⽤于⽤户终端(例如:浏览器)选择301Moved Permanently
永久移动。请求的资源已被永久的移动到新URL,返回信息会包括新的URL,浏览器会⾃动定向到新URL。今后任何新的
请求都应使⽤新的URL代替
302Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使⽤原有URL
303
See Other
查看其它地址。与301类似。使⽤GET和POST请求查看
304Not Modified
未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供
⼀个头信息指出客户端希望只返回在指定⽇期之后修改的资源
305Use Proxy 使⽤代理。所请求的资源必须通过代理访问
306Unused
已经被废弃的HTTP状态码
307Temporary Redirect
临时重定向。与302类似。使⽤GET请求重定向400Bad Request 客户端请求的语法错误,服务器⽆法理解
401Unauthorized 请求要求⽤户的⾝份认证
402Payment Required
保留,将来使⽤
403Forbidden 服务器理解请求客户端的请求,但是拒绝执⾏此请求
404Not Found 服务器⽆法根据客户端的请求到资源(⽹页)。通过此代码,⽹站设计⼈员可设置"您所请求的资源⽆法到"的个性页⾯
405Method Not Allowed 客户端请求中的⽅法被禁⽌
406
Not Acceptable
服务器⽆法根据客户端请求的内容特性完成请求
407Proxy
Authentication Required
请求要求代理的⾝份认证,与401类似,但请求者应当使⽤代理进⾏授权
408Request Time-out
服务器等待客户端发送的请求时间过长,超时
409
Conflict
服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发⽣了冲突
410Gone
客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使⽤410代码,⽹站设计⼈员可通过
301代码指定资源的新位置
411Length Required 服务器⽆法处理客户端发送的不带Content-Length的请求信息
412
Precondition Failed 客户端请求信息的先决条件错误
413
Request Entity Too
Large
由于请求的实体过⼤,服务器⽆法处理,因此拒绝请求。为防⽌客户端的连续请求,服务器可能会关闭连接。如果只是服
务器暂时⽆法处理,则会包含⼀个Retry-After的响应信息
414Request-URL Too
Large
请求的URL过长(URL通常为⽹址),服务器⽆法处理
415Unsupported Media
Type
服务器⽆法处理请求附带的媒体格式
416Requested range not satisfiable 客户端请求的范围⽆效
417Expectation Failed 服务器⽆法满⾜Expect的请求头信息500Internal Server Error 服务器内部错误,⽆法完成请求501Not Implemented 服务器不⽀持请求的功能,⽆法完成请求
502Bad Gateway 作为⽹关或者代理⼯作的服务器尝试执⾏请求时,从远程服务器接收到了⼀个⽆效的响应
503
Service Unavailable
由于超载或系统维护,服务器暂时的⽆法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
状态码英⽂中⽂描述
504Gateway Time-out充当⽹关或代理的服务器,未及时从远端服务器获取请求
505HTTP Version not
supported
服务器不⽀持请求的HTTP协议的版本,⽆法完成处理
英⽂中⽂描述
5、HTTP协议中的URL
url编码处理**URL(Uniform Resoure Locator)**统⼀资源定位符是对可以从互联⽹上得到的资源的位置和访问
⽅法的⼀种简洁的表⽰,是互联⽹上标准资源的地址。互联⽹上的每个⽂件都有⼀个唯⼀的URL,它包含的信息指出⽂件的位置以及浏览器应该怎么处理它。
URL组成: HTTP使⽤统⼀资源标识符(URI)来传输数据和建⽴连接。URL是⼀种特殊类型的URI,包含了⽤于查某个资源的⾜够的信息。
< scheme >//< user >:< password >@< host >:< port >/< path >;< params >?< query>#< frag >
< scheme >(协议部分):代表⽹页使⽤的协议。在Internet中可以使⽤多种协议,如HTTP,FTP等等。“//”为分隔符
< user >:某些协议访问资源时需要的⽤户名
< password >:⽤户名后⾯可能要包含的密码,中间由冒号分隔
< host >(域名):资源宿主服务器的主机名或点分IP地址
< port >:资源宿主服务器正在监听的端⼝号。很多协议都有默认端⼝号
< path >:虚拟⽬录,从域名后的第⼀个“/”开始到最后⼀个“/”为⽌,服务器上资源的本定名,由斜杠将其与前⾯的URL组件分隔开来。路径组件的语法是与服务器和协议有关。
< params >:某些⽅案会⽤这个组件来指定输⼊参数。参数为名/值对。URL中可以包含多个参数字段,它们相互之间以与路径的其余部分之间⽤分号(;)分隔。
< query>:某些⽅案会⽤这个组件传递参数以激活因公程序,⽤于参数传递给服务器端。查询组件的内容没有通⽤格式。⽤字符”?”将其与URL的其余部分分隔开来。
< frag >:锚部分,⼀⼩⽚或者⼀部分资源的名字。引⽤对象时,不会将frag字段传送给服务器。这个字段是在客户端内部使⽤的。通过字符”#”将其与URL的其余部分分隔开来。
(1)URI、URL、URN
**URI(Uniform Resource Identifier,统⼀资源标识符)**通过使⽤位置,名称或两者来标识Internet上的资源。它允许统⼀识别资源。URI另外被分组为定位符,名称或两者,这意味着它可以描述URL,URN或两者。
URL(Uniform Resource Locator,统⼀资源定位符):
协议类型:[//[访问资源需要的凭证信息@]服务器地址[:端⼝号]][/资源层级UNIX⽂件路径]⽂件名[?查询][#⽚段ID]
URN( Uniform Resource Name,统⼀资源命名) URN它命名资源但不指定如何定位资源,⽐如:只告诉你⼀个⼈的姓名,不告诉你这个⼈在哪。例如:telnet、mailto、news 和 isbn URI 等都是URN。
URI 指的是⼀个资源
URL ⽤地址定位⼀个资源;
URN ⽤名称定位⼀个资源。
(2)URL编码格式
在中⽂Windows环境下,本地编码为GB2312;
IE浏览器默认情况下以UTF-8发送URL;
⽕狐浏览器默认UTF-8编码;
Chrome默认UTF-8编码;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。