2.1HTTP协议解析

Posted namecannotfind

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.1HTTP协议解析相关的知识,希望对你有一定的参考价值。

HTTP(HyperText Transfer Protocol)即超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,它是万维网交换信息的基础,它允许将html文档从Web服务器传送到Web浏览器。

 

发起HTTP请求:

  URL(统一资源定位符)也被称为网页地址,是互联网标准的地址。URL的标准格式如下:

  协议://服务器IP[:端口]/路径/[?查询]

 

HTTP协议详解:

  HTTP协议最新版是1.1,是一种无状态协议。无状态指Web浏览器与web服务器之间不需要建立持久的连接。即HTTP请求只能由客户端发起,而服务器不能主动向客户端发送数据。

  1.HTTP请求与响应

    (1)HTTP请求

        

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

    

       (2)HTTP响应

HTTP/1.1 200 OK        //响应行
Date: Thu, 28 Feb 2013 07:36:47 GMT        //响应头
Server: BWS/1.0
Content-Length: 4199
Content-Type: text/html;charset=utf-8
Cache-Control: private
Expires: Thu, 28 Feb 2013 07:36:47 GMT
Content-Encoding: gzip
Set-Cookie: H_PS_PSSID=2022_1438_1944_1788; path=/; domain=.xxser.com
Connection: Keep-Alive
    //空白行,代表响应头结束

<html>        //响应正文或者叫消息主题
    <head><title>Index.html</title></head>     
    ......

 

   2.HTTP请求方法

    (1)GET

      GET方法用于获取请求页面的指定信息(以实体的格式)。如果请求资源为动态脚本,那么返回文本是Web容器解析后的HTML源代码。

    (2)HEAD

      HEAD方法除了服务器不能在响应里返回消息主体外,其他都与GET方法相同。此方法经常被用来测试超文本链接的有效性、可访问性和最近的改变。攻击者编写扫描软件时,就常用此方法,因为只测试资源是否存在,而不用返回消息主题,所以速度一定是最快的。

    (3)POST

      POST方法也与GET方法相似,但最大的区别在于,GET方法没有请求内容,而POST是有请求内容的。POST请求多用于向服务器发送大量的数据。GET虽然也能发送大量的数据,但是有大小(长度)的限制,并且GET请求会将发送的数据显示在浏览器端,而POST则不会,所以安全性相对来说高一点。

    (4)PUT

      PUT方法用于请求服务器把请求中的实体存储在请求资源下,如果请求资源已经在服务器中存在,那么将会用此请求中的数据替换原先的数据,作为指定资源的最新修改版,如果请求指定的资源不存在,将会创建这个资源,且数据位请求正文。通常情况下,服务器都会关闭PUT方法,因为它会为服务器建立文件,属于危险的方法之一。

    (5)DELETE

      DELETE方法用于请求源服务器删除请求的指定资源。服务器一般都会关闭此方法,因为客户端可以进行删除文件操作,属于危险方法之一。

    (6)TRACE

      TRACE方法被用于激发一个远程的应用层的请求消息回路,也就是说,回显服务器收到的请求。TRACE方法允许客户端去了解数据被请求链的另一端接受的情况,并且利用那些数据信息去测试或诊断。但此方法非常少见。、

    (7)CONNECT

      HTTP1.1协议规范保留了CONNECT方法,此方法时为了用于能动态切换到隧道的代理。

    (8)OPTIONS

      OPTIONS方法用于请求获得由URI标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。

 

HTTP状态码:

  HTTP协议中的状态码由三位数字组成,第一位数字定义了响应的类别,有以下五种:

    1xx:信息提示,表示请求已被成功接收,继续处理。范围为100~101

    2xx:成功,服务器成功地处理了请求。范围为200~206

    3xx:重定向,重定向状态码用于告诉浏览器客户端,它们访问地资源已被移动,并告诉客户端新的资源地址位置。这时,浏览器将重新对新资源发起请求,范围为300~305

    4xx:客户端错误状态码,有时客户端会发送一些服务器无法处理的东西,比如格式错误的请求,或者最常见的是,请求一个不存在的URL。范围为400~415

    5xx:有时客户端发送了一条有效请求,但Web服务器自身却出错了,可能是Web服务器运行出错了,或者网站都挂了。5xx是用来描述服务器内部错误的,范围为500~505

 

常见的状态码:

  200:客户端请求成功。

  302:重定向

  404:请求资源不存在

  400:客户端请求有语法错误

  401:请求未经授权

  403:服务器收到请求,但是拒绝提供服务

  500:服务器内部错误。

  503:服务器当前不能处理客户端的请求,一段时间后可能恢复正常

 

HTTP消息:

  HTTP消息又称为HTTP头(HTTP header)。由请求头、响应头、普通头和实体头组成。

  1.请求头:

    只出现在HTTP请求中,请求报头允许客户端向服务器端传递请求的附加信息和客户端自身的信息。常用的HTTP请求头:

    1)Host

      Host请求报头域主要用于指定被请求资源的Internet主机和端口号。

    2)User-Agent

      User-Agent请求报头域允许客户端将它的操作系统、浏览器和其他属性告诉服务器。

    3)Referer

      Referer包含一个URL,代表当前访问URL的上一个URL,也就是说,用户是从什么地方来到本网页。

    4)Cookie

      Cookie是非常重要的请求头,它是一段文本,常用来表示请求者身份等。

    5)Range

      Range可以请求实体的部分内容,多线程下载一定会用到此请求头。

    6)x-forward-for

      x-forward-for即XXF头,它代表请求端的IP,可以有多个,中间以逗号隔开。

    7)Accept

      Accept请求报头域用于指定客户端接收哪些MIME类型的信息。

    8)Accept-Charset

      Accept-Charset请求报头域用于指定客户端接收的字符集。如果在请求消息中没有设置这个域,默认是任何字符集都能接收。

 

  2.响应头:

    响应头是服务器根据请求向客户端发送的HTTP头。常见的HTTP响应头如下:

    1)Server

      服务器所使用的Web服务器名称,攻击者通过查看此头,可以探测Web服务器名称,所以,建议在服务器端进行修改此头的信息。

    2)Set-Cookie

      向客户端设置Cookie通过查看此头,可以清楚地看到服务器向客户端发送的Cookie信息。

    3)Last-Modified

      服务器通过这个头告诉浏览器,资源的最后修改时间。

    4)Location

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

    5)Refresh

      服务器通过Refresh头告诉浏览器定时刷新浏览器。

 

  3.普通头:

    在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息。

    1)Date 

      表示消息产生的日期和时间

    2)Connection

      允许发送指定连接的选项

    3)Cache-Control

      用于指定缓存指令,缓存指令是单向的,且是独立的。

  4.实体头:

    请求和响应都能传送一个实体头。实体头定义了关于实体正文和请求所标识的资源的元信息。元信息也就是实体内容的属性,包括实体信息类型、长度、压缩方法、最后一次修改时间等。常见的实体头如下:

    1)Content-Type

      Content-Type实体头用于向接收方指示实体的介质类型

    2)Content-Encoding 

      Content-Encoding头被用作媒体类型的的修饰符,它的值表示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。

    3)Content-Length

      Content-Length实体报头用于指明实体正文的长度,以字节方式存储的十进制数字来表示。

    4)Last-Modified

      Last-Modified实体报头用于指示资源的最后修改日期和时间。

  

HTTP协议域HTTPS协议的区别:

    ·HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议。

    ·HTTP与HTTPS协议使用的是完全不同的连接方式,HTTP采用80端口连接,而HTTPS则是443端口。

    ·HTTPS协议需要到ca申请证书,一般免费证书很少,需要交费,也有些Web容器提供,如TOMCAT。而HTTP协议却不需要。

    ·HTTP连接相对简单,是无状态的,而HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,相对来说,它要比HTTP协议更安全。

 

 

 

 

       



以上是关于2.1HTTP协议解析的主要内容,如果未能解决你的问题,请参考以下文章

Http协议简单解析

Android网络编程HTTP协议原理

http协议解析 请求行的信息怎么提取 c语言源码

HTTP协议

HTTP协议

协议切换成功与否