HTTP 协议笔记

1. HTTP 传输机制

HTTP 是一个应用层协议,位于 TCP 的层次之上,并且是基于 TCP 协议进行通信的,也就是说 HTTP 在每一次通信之前都要先建立 TCP 连接来保证 HTTP 的可靠性。并且 HTTP 是用的 C/S 模型进行通信,即 Client/Server 的模型,Client 向 Server 发送 Request,Server 根据 Request 的内容对 Client 进行 Response。同时 HTTP 还是无状态协议,即 HTTP 协议本身并不会对已经建立起来的请求和响应对的状态进行持久化处理,这么做的目的是保持 HTTP 协议的简单性,从而提高工作效率。但是在许多时候我们需要记录用户的登录状态以便对用户的请求进行跟踪,提高 Server 的服务质量,如记录用户购物车中的商品,那么这时就需要引入一项技术来实现:Cookie。

对于上面那段话,总结如下:

  1. HTTP 基于 TCP 进行通信
  2. HTTP 是 C/S 通信模式
  3. HTTP 是无状态协议,HTTP 连接的建立状态不会持久
  4. 使用 Cookie 技术对用户进行标识从而追踪用户的请求提供更好的服务

2. HTTP 报文格式

HTTP 报文实际上分为 2 种,一种用于 Client 向 Server 请求服务,一种用于 Server 向 Client 响应请求。实际上这两种报文的格式都是一样的。

2.1 HTTP Request 报文

如上图所示,Request 报文的结构一共有 4 个部分组成:

  1. 第 1 部分是 Request-Line,一共包含 3 个字段(用空格分开):MethodURLHttp-Version。其中,Method 一共有 GET,POST,PUT,TRACE,OPTIONS,DELETE 这 6 种,最常见的是 GET 和 POST;URL 可以简单理解为浏览器地址栏中的网址;Http-Version 现在已经是 HTTP/1.1 版本了。

  2. 第 2 部分是 Request-Header,请求头部为请求报文添加了一些附加信息,是以 Key:Value 的形式保存在一个列表中,常见的请求头部如下表所示:

  3. 第 3 部分是 Blank-Line,这是一个空行,代表请求头部结束。用来分隔请求头和请求数据。

  4. 第 4 部分是 Request-Body,是请求数据的正文,是可选的,对于 GET 方法来说就没有请求正文。

2.2 HTTP Response 报文

如上图所示,Response 报文的结构也是由 4 部分组成:

  1. 第 1 部分是 Response-Line,一共包含 3 个字段(用空格分开):VersionStatus-CodePhrase。其中,Version 是协议版本,现在一般都是 HTTP/1.1;Status-Code 是状态返回码,共有 5 个系列,如一般情况下表所示;Phrase 是描述状态码的短语。



    上表只是笼统的列出了 4 个大类情况,更详细的状态码说明请参考 RFC 文档,在网上看到有一篇博客写得很好,可以参考:https://www.cnblogs.com/lxinxuan/archive/2009/10/22/1588053.html

  2. 第 2 部分是 Response-Header,和 Request-Header 类似,为响应报文添加的一些附加信息,也是以 Key:Value 的形式保存在一个列表中,常见的响应头部如下表所示:

  3. 第 3 部分也是 Blank-Line,用于分隔头部和正文。

  4. 第 4 部分是 Response-Body,是响应数据的正文,客户端请求的内容都放在这里。

3. URI URL URN 的区别

  1. URI(Uniform Resource Identifier),统一资源标识,用来唯一标识一个资源,是一个通用的概念。由 URL 和 URN 组成。
  2. URL(Uniform Resource Locator),统一资源定位,即资源所在位置,我们浏览器上的地址就是一条 URL。
  3. URN(Uniform Resource Name),统一资源命名,通过资源的名字来标识资源,与其所处的位置无关,这样即使资源的位置变了,其 URN 也不会改变。

HTTP协议(1)的更多相关文章

  1. HTTP协议系列(1)

    一.为什么学习Http协议       首先明白我们为什么学习HTTP协议,也就是说明白HTTP协议的作用.HTTP协议是用于客户端与服务器之间的通讯.明白了HTTP协议的作用也就知道了为什么要学习H ...

  2. 重温Http协议--请求报文和响应报文

    http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...

  3. 协议森林17 我和你的悄悄话 (SSL/TLS协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...

  4. 协议森林16 小美的桌号(DHCP协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址.DNS域名服务器地 ...

  5. 简约之美Jodd-http--深入源码理解http协议

    Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架.简单,却很强大! jodd-http是一个轻巧的HTTP客户端.现在我们以一个简单的示例从源码层看看是如何实现的? Http ...

  6. 【JavaScript】javascript中伪协议(javascript:)使用探讨

    javascript:这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行. 比如下面这个死链接: <a href="javasc ...

  7. SNMP简单网络管理协议

    声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...

  8. 海鑫智圣:物联网漫谈之MQTT协议

    什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...

  9. linux-图形化远程管理协议

    远程管理控制方式: RDP(remote desktop protocol)协议: telnet: SSH(Secure Shell): RFB(Remote FrameBuffer)协议(图形化远程 ...

  10. RTP与RTCP协议介绍(转载)

    RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步.RTP中没有连接的概念,本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完 ...

随机推荐

  1. 封装php redis缓存操作类

    封装php redis缓存操作类,集成了连接redis并判断连接是否成功,redis数据库选择,检测redis键是否存在,获取值,写入值,设置生存时间和删除清空操作. php redis类代码: &l ...

  2. Node.js实战(七)之交互式解释器

    Node.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Window 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并 ...

  3. RedHat Enterprise Linux 6.4使用Centos 6的yum源问题

    RedHat Enterprise Linux 6.4使用Centos 6的yum源问题 作为一名新手,学习Linux已经一个月了,其间遇到了不少问题,而今天笔者遇到的问题是 #yum install ...

  4. Python 函数(一)

    Python3 函数(基本概念) 1.概念: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段:通过函数,可以对特定功能的代码进行封装,实现代码的复用. 2. 5.参数传递 (1) P ...

  5. JavaScript 删除数组中的对象

    1.获得对象在数组中的下标 function (_arr,_obj) { var len = _arr.length; for(var i = 0; i < len; i++){ if(_arr ...

  6. [Lydsy1805月赛]quailty 算法 BZOJ5362

    分析: 题目中描述了一个二分图,让我们求最小权最大匹配,实际上其实是求n个点,在n*(n-1)/2中选n条边的权值和最小,形成一个每个点都有出边的体系,也就是基环树,(证明:因为我们需要二分图最大匹配 ...

  7. 大数据入门第二十五天——logstash入门

    一.概述 1.logstash是什么 根据官网介绍: Logstash 是开源的服务器端数据处理管道,能够同时 从多个来源采集数据.转换数据,然后将数据发送到您最喜欢的 “存储库” 中.(我们的存储库 ...

  8. c# C#获取屏幕鼠标坐标点颜色

    [DllImport("user32.dll")] private static extern IntPtr GetDC(IntPtr hwnd); [DllImport(&quo ...

  9. 20155217《网络对抗》Exp03 免杀原理与实践

    20155217<网络对抗>Exp03 免杀原理与实践 实践内容 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程 ...

  10. Windows下面的常用的快捷键

    最小化的快捷键: 最小化当前窗口:Alt+ESC 还原刚刚最小化的窗口:Alt+Tab(次快捷键组合可以在多个窗口中切换) 显示桌面,切换之前的桌面:Win+D   在浏览器页面之间切换:Ctrl+T ...