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. windows 下配置 Nginx 常见问题

    因为最近的项目需要用到负载均衡,不用考虑,当然用大名鼎鼎的Nginx啦.至于Nginx的介绍,这里就不多说了,直接进入主题如何在Windows下配置. 我的系统是win7旗舰版的,到官网下载最新版本 ...

  2. Android7.0调用系统相机拍照、读取系统相册照片+CropImageView剪裁照片

    Android手机拍照.剪裁,并非那么简单 简书地址:[我的简书–T9的第三个三角] 前言 项目中,基本都有用户自定义头像或自定义背景的功能,实现方法一般都是调用系统相机–拍照,或者系统相册–选择照片 ...

  3. Linux SSH免密登录

    SSH无密码登录要使用公钥与私钥.Linux可以用ssh-keygen生成公钥/私钥对,下面以Ubuntu为例说明配置过程. 有两个节点:node01(172.17.0.14)和node02(172. ...

  4. 清北学堂寒假集训DAY1

    第一天,上午讲了些基本的技巧和简单算法,主要就是适应这里. 中午跑到食堂吃了顿“饭”(我并没有挖苦233333),然后回宿舍休息休息 因为 迎接我们的是模拟啊啊啊啊啊阿 下午题一发下来,并没有想象中的 ...

  5. 在 ASP.NET CORE 中使用 SESSION (转载)

    Session 是保存用户和 Web 应用的会话状态的一种方法,ASP.NET Core 提供了一个用于管理会话状态的中间件.在本文中我将会简单介绍一下 ASP.NET Core 中的 Session ...

  6. BZOJ3786: 星系探索 Splay+DFS序

    题目大意:给你一个树,支持三种操作,子树加,点到根的路径和,改变某一个点的父亲. 分析: 看起来像一个大LCT,但是很显然,LCT做子树加我不太会啊... 那么,考虑更换一个点的父亲这个操作很有意思, ...

  7. 20155204《网络对抗》Exp8 Web基础

    20155204<网络对抗>Exp8 Web基础 一.基础问题回答 1.什么是表单 表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用C ...

  8. C++中冒号的作用

    一次偶然机会看见了一种以前没见过的写法,记录下来以后参阅学习. class NoName{ public: NoName():pstring(new std::string), i(0), d(0){ ...

  9. 解决:Linux SSH Secure Shell(ssh) 超时断开的解决方法

    转载:http://www.cnblogs.com/jifeng/archive/2011/06/25/2090118.html 修改/etc/ssh/sshd_config文件,找到 ClientA ...

  10. 异常 java.lang.IllegalArgumentException: Result Maps collection already contains value

    这是因为用了一次以上(多次)mbg导致sql映射文件堆积导致的异常,删除对应的sql映射文件,然后重新生成即可. Caused by: java.lang.IllegalArgumentExcepti ...