HTTP协议基础

0x00

HTTP协议:超文本传输协议,是用于从万维网服务器传输超文本到本地浏览器的传输协议,他属于应用层协议,传输层是基于TCP协议。最终要的一版协议集合RFC 2616定义了HTTP 1.1

B/S软件工作原理:

HTTP协议基础_第1张图片

0x01

       HTTP请求:通过协议封装的从客户端向服务器所发送的数据集合称之为HTTP请求报文。所有请求报文都有严格的格式要求,只有符合格式规范才是一个合格的请求报文。

HTTP协议基础_第2张图片

每个HTTP请求报文由两部分组成:报文首部+空格+报文主体

  1. 第一行称之为请求行,由三部分内容组成,以空格隔开。第一个称之为请求方法,第二个称之为请求路径,第三个为协议版本。
    1. 请求方法:GETPOSTHEADPUTDELETEOPTIONS等等
      1. GET方法,常用的HTTP请求方法之一,作用是从服务器端获取资源。GET请求并没有消息主体,因此在消息头后的空白行没有其他数据。
      2. POST方法,常用方法之一,常用于客户端向服务器提交数据参数,因此POST方法存在消息主体。
      3. HEAD方法:该方法常用于检测服务器资源是否存在。
      4. OPTIONS方法:测试服务器支持哪些请求方法。
    2. 协议版本:现在通用的协议版本为HTTP/1.1
  2. 其余的称之为首部字段:首部字段包含了请求报文的一些属性信息,一般分为四种,通用首部,请求首部,实体首部。
    1. 首部结构:首部字段名: 字段值
    2. 通用首部:
      1.  
    3. HTTP协议基础_第3张图片

      1. 请求首部:
    4. HTTP协议基础_第4张图片

      1. 实体首部:
    5. HTTP协议基础_第5张图片

      几点说明:

      Accept:用于表明浏览器所支持的资源类型

      Accept-Charset:用于通知服务器用户代理支持的字符集

      Accpt-Encoding:用来告知服务器支持的内容编码以优先级

      每一个字段可以支持多个字段值,理论上从前到后优先级递减,也可按照权重值来设定优先级(例如:Accept-Language)。

    6. 第三部分为消息主体HTTP协议基础_第6张图片
    7. 0x02

             HTTP响应:每发送一次请求报文,服务器会向客户端返回一个响应报文,通知客户端处理结果,与请求报文类似,响应报文也具有自身特定的结构。

      HTTP协议基础_第7张图片

             每个响应报文的结构为:报文首部+空格+报文主体:

    8. 报文首部中的第一行:状态行,通常分为三部分。
      1. 协议版本
      2. 状态码:不同的状态码会标识不同的响应结果,状态码共分为4类。
        1. 2XX
          1. 200:表示从客户端发来的请求在服务器被正常处理。
          2. 204:表示服务器接收的请求已成功处理,但在返回的响应报文中不包含实体的主体部分,也不允许返回实体主体。
          3. 206:表示客户端进行了范围请求,服务器成功执行了范围内的请求,响应报文包含Content-Range字段用于指定范围。
        2. 3XX:重定向
          1. 301:永久重定向。该状态码表示请求资源已被分配性的URI,以后应该使用资源现在所指的URI,使用Loaction字段提示URI重新保存。
          2. 302:临时重定向。表示请求的资源已分配新的URI,本次能够使用新的URI访问。
          3. 303:表示请求对应资源存在另外一个URI,应使用GET方法定向获取资源。
          4. 307:临时重定向,与302含义相同
        3. 4XX:客户端错误
          1. 400:请求报文存在语法错误,需要修改
          2. 403:请求资源被服务器禁止访问。Forbidden
          3. 404:请求资源不存在。Not Found
        4. 5XX:服务端错误:
          1. 500:服务器端执行请求时发生错误。
          2. 503:服务器超负载,停止,运维中。
      3. 原因短语

 

  1. 报文首部:通用与请求报文相同
    1. 响应首部字段:

HTTP协议基础_第8张图片

HTTP协议基础_第9张图片

  1. 报文主体:即服务端向客户端返回的处理结果,用于客户端进行展示。

0x03 URI的一些知识:

  1. URI:统一资源标识符,表示由某个协议表示的资源的定位标识符,协议方案是指访问资源所使用的协议类型名称。
  2. URL:统一资源定位符,表示资源地点,属于URI的子集。
  3. URI格式:

例如:http://user:[email protected]:80/dir/index.html?uid=1#ch1

其中  “http:// “  :指协议方案名,。

         user:pass”:指登录认证信息。

         www.example.com”:指服务器地址(使用域名时要先进行域名解析)

         80”:服务器端口号

         dir/index.html”:带层次的文件路径,指定服务器上的特定路径来定位资源

         ?uid=1”:查询字符串

         #ch1“:片段标识符可以标记出以获取资源中的子资源。

0x04 关于cookie的一些知识:

cookie是大多数Web应用程序所依赖的HTTP协议的一个关键组成部分,攻击者常常通过它来

利用Web应用程序中的漏洞。服务器使用cookie机制向客户端发送数据,客户端保存cookie并将其返回给服务器。与其他类型的请求参数(存在于URL查询字符串或消息主体中)不同,无须应用程序或用户采取任何特殊措施.随后的每一个请求都会继续重新向服务器提交cookie:

如前所述.服务器使用Set-Cookie响应消息头发布cookie:

      Set-Cookie:  cookie=1231231231231231

然后.用户的浏览器自动将下面的消息头添加到随后返回给同一服务器的请求中:

     Cookie:  cookie=1231231231231231

如上所示.cookie一般由一个名/值对构成,但也可包含任何不含空格的字符串。可以在服务

器响应中使用几个Set-Cookie消息头发布多个cookie.并可在同一个Cookie消息头中用分号分隔不同的cookie,将它们全部返回给服务器。

除cookie的实际位外,Set-Cookie消息头还可包含以下任何可选属性,用它们控制浏览器处理cookie的方式。

  1. expires。用于设定cookie的有效时间。这样会使浏览器将cookie保存在永久性的存储器中,在随后的浏览器会话中重复利用.直到到期时间为止。如果没有设定这个属性,那么cookie仅用在当前浏览器会话中。
  2. domain。用于指定cookie的有效域。这个域必须和收到cookie的域相同,或者是它的父域。
  3. path。用于指定cookie的有效URL路径。
  4. secure。如果设置这个属性.则仅在HTTPS请求中提交cookie.
  5. HttpOnly。如果设置这个属性,将无法通过客户端JavaScript直接访问cookie. 

你可能感兴趣的:(WEB安全)