zoukankan      html  css  js  c++  java
  • http协议介绍

    1 介绍

    HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系 列的RFC,RFC 1945定义了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定义了今天普遍使用的一个版本——HTTP 1.1。

    HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

    HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

    2 在TCP/IP协议栈中的位置

    HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如图 1‑1所示:

    图 1‑1 HTTP协议在协议栈中的位置

    默认HTTP的端口号为80,HTTPS的端口号为443。

    3 HTTP的请求响应模型

    HTTP协议永远都是客户端发起请求,服务器回送响应。见图 1‑2: 

    图 1‑2 HTTP的请求响应模型

    这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。

    HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。

    4 工作流程

    一次HTTP操作称为一个事务,其工作过程可分为四步:

    1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。

    2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

    3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

    4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

    如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

    5 使用Wireshark抓TCP、http包

    打开Wireshark,选择工具栏上的“Capture”->“Options”,界面选择如图 1‑3所示。选择需要监听的网卡,并选择“Capture Filter”为“HTTP TCP port(80)”,点击“Start”开始抓包。

     图 1‑3 使用wireshock抓包

    例如在浏览器中打开http://image.baidu.com/,抓包如图 1‑4所示:

    图 1‑4 抓包结果

    在上图中,可清晰的看到客户端浏览器(ip为192.168.2.33)与服务器的交互过程:

    1)No1:浏览器(192.168.2.33)向服务器(220.181.50.118)发出连接请求。此为TCP三次握手第一步,此时从图中可以看出,为SYN,seq:X (x=0)

    2)No2:服务器(220.181.50.118)回应了浏览器(192.168.2.33)的请求,并要求确认,此时为:SYN,ACK,此时seq:y(y为0),ACK:x+1(为1)。此为三次握手的第二步;

    3)No3:浏览器(192.168.2.33)回应了服务器(220.181.50.118)的确认,连接成功。为:ACK,此时seq:x+1(为1),ACK:y+1(为1)。此为三次握手的第三步;

    4)No4:浏览器(192.168.2.33)发出一个页面HTTP请求;

    5)No5:服务器(220.181.50.118)确认;

    6)No6:服务器(220.181.50.118)发送数据;

    7)No7:客户端浏 览器(192.168.2.33)确认;

    8)No14:客户端 (192.168.2.33)发出一个图片HTTP请求;

    9)No15:服务器 (220.181.50.118)发送状态响应码200 OK

    ……

    6 HTTP头信息解读

    http报文有两类报文:从客户到服务器的请求报文和从服务器到客户的响应报文。两种报文都由5个成员组成,其中请求报文的结构如下:

    1. 请求行(request-line)或状态行(status-line)
    2. 通用头(general-header)
    3. 请求头(request-header)
    4. 实体头(entity-header)
    5. 实体主体(entity-body)

    http请求主要由三个部分构成,分别是:

    • 方法-URI-协议/版本(如:GET /kaixin.asp HTTP/1.1)
    • 请求头(如:Accept: image/gif, image/jpeg... Accept-Language: zh-cn Accept-Encoding: gzip User-Agent: Mozilla/4.0 .... Host: localhost:8082 Connection: Keep-Alive)
    • 请求正文(如:使用post方法所提交的内容就可以写在请求正文中)

    http应答也主要由三个部分构成,分别是

    • 协议-状态代码-描述(如:HTTP/1.1 200 OK)
    • 应答头(如:Cache-Control: private Content-Length:6 Content-Type: text/html Server: Microsoft-IIs/7.0 Set-Cookie: xxxx X-Powered-By: ASP.NET Date: Fri, 24 Jan 2010 16:43:34 GMT)
    • 应答正文(如html文件)
  • 相关阅读:
    数据库拉取附件到本地
    Https工具类
    AES加密算法
    DES加密算法
    Http工具类,Lz提供
    接口调用工具类
    autofac生命周期入门(如何避免内存泄漏)
    ASP.NET异步
    Global Error Handling in ASP.NET Web API 2(webapi2 中的全局异常处理)
    ado.net EF学习系列----深入理解查询延迟加载技术(转载)
  • 原文地址:https://www.cnblogs.com/sunada2005/p/3594209.html
Copyright © 2011-2022 走看看