用户访问万维网文档,万维网文档之间的链接以及万维网文档中数据传送到用户计算机,这些功能的实现都是由超文本传输协议 HTTP(HyperTextTransfer Protocol) 负责完成的。 HTTP 是一个应用层协议,它使用 TCP 连接进行可靠的传送,能够在万维网上进行文本、声音、图像、视频等各种信息的交换。

HTTP 协议也是工作在客户机 / 服务器模式下,分为 HTTP 客户端和 HTTP 服务器两个部分,双方每次进行交互,都是由客户端发出的请求和服务器端发出的响应构成。 HTTP 协议规定的用户使用浏览器访问万维网的过程可以总结为:

1. 用户在浏览器中键入需要访问网页的 URL 或者点击某个网页中链接;

2. 浏览器根据 URL 中的域名,通过 DNS 解析出目标网页的 IP 地址;

3. 浏览器与网页所在服务器建立 TCP 连接;

4. 浏览器发送 HTTP 请求报文,获取目标网页的文件;

5. 服务器发送 HTTP 响应报文,将目标网页文件发送给浏览器;

6. 释放 TCP 连接;

7. 浏览器将网页的内容包括文本、图像、声音等显示呈现在用户计算机屏幕。

HTTP 协议是无连接的,它使用面向连接的 TCP 协议所提供的服务。同时, HTTP 协议也是无状态的,即服务器端不记录客户端访问的时间和次数。最初的 HTTP 协议版本是 1.0 版,使用非持续连接(nonpersistentconnection) 。每传输一个对象都需要利用 1 个往返时间 RTT 建立 TCP 连接,用 1 个往返时间 RTT 申请并传输回对象,即平均用 2 个往返时间 RTT 获取一个对象。目前使用比较广泛的是 HTTP协议的 1.1 版本( HTTP/1.1 ),其在默认情况下使用持续连接 (persistentconnection) ,即利用同一个TCP 连接传输多个对象 。

HTTP 报文是面向文本的,报文中的每一个字段都是一些 ASCII 码串,各个字段的长度是不确定的。HTTP 有两类报文:请求报文和响应报文。 请求报文是从客户端向服务器发送的报文,响应报文是从服务器到客户端的报文。下面分别介绍请求报文和响应报文的具体格式。

1. HTTP 请求报文格式

HTTP 请求报文的由请求行、请求头部行、空行和请求数据四部分构成,具体格式如下所示:

(请求行) 方法名 + 空格 +URL+ 空格 + 版本 + 回车换行( \r\n )

(请求头部行 1 )关键字 + “:” + 空格 + 值 + 回车换行( \r\n )

……

(请求头部行 N )关键字 + “:” + 空格 + 值 + 回车换行( \r\n )

(空行)回车换行( \r\n )

(请求数据) ……

( 1 )请求行

请求行由请求方法字段、 URL 字段和 HTTP 协议版本字段 3 个字段组成,它们用空格分隔。最后由回车和换行表示请求行结束。例如:

GET www.sdu.edu.cn  HTTP/1.1 回车换行 ( \r\n )

其中“方法”字段表示该请求报文希望服务器做什么,请求报文的类型就是由所采用的方法决定的。 HTTP请求报文的主要方法包括: GET 、 POST 、 HEAD 、 PUT 、 DELETE 、 OPTIONS 、 TRACE 、CONNECT 等。最常见的方法有 GET 和 HEAD 。

GET 是最常见的一种请求方式,当客户端要从服务器中读取文档时,当点击网页上的链接或者通过在浏览器的地址栏输入网址来浏览网页,使用的都是 GET 方式。 GET 方法要求服务器将 URL 定位的资源放在响应报文的数据部分,回送给客户端。 GET 方式不适合传送私密数据和大量数据。

HEAD 的功能与 GET 相似,只是服务器端接收到 HEAD 请求后只返回响应头,而不会发送响应内容。当我们只需要查看某个页面的状态的时候,使用 HEAD 是非常高效的,因为在传输的过程中省去了页面内容。

( 2 )请求头部行( header )

请求头部行包括若干行,每行由关键字及其值构成的,关键字和值用英文冒号 “:” 分隔,每一行都由回车换行表示结束。请求头部通知服务器有关于客户端请求的信息,典型的请求头部关键字有:

User-Agent :产生请求的浏览器类型。

Accept :客户端可识别的内容类型列表。

Accept-Language :客户端可识别的语言类型

Host :请求的主机名。

Connection :告知服务器发送完文档后释放连接还是保持连接。

( 3 )空行

最后一个请求头部之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头部了。

( 4 )请求数据

GET 方法中没有请求数据的内容, POST 方法使用请求数据,用于客户端向服务器端填写表单等操作。

比如浏览器使用 GET 方法访问山东大学主页中的“学校简介”文档( URL 为www.sdu.edu.cn/2010/xxjj.htm ),则其 HTTP 请求报文可以为:

GET /2010/xxjj.html HTTP/1.1 \r\n

Host: www.sdu.edu.cn\r\n

User-Agent : Mozilla/5.0

Accept-Language:cn */*\r\n

2. 响应报文格式

HTTP 响应也由四个部分组成,分别是:状态行、消息头部、空行和响应正文。其具体格式如下:

(状态行)版本 + 空格 + 状态码 + 空格 + 短语 + 回车换行

(消息头部 1 )关键字 + “:” + 空格 + 值 + 回车换行

……

(消息头部 N )关键字 + “:” + 空格 + 值 + 回车换行

(空行)回车换行( \r\n )

(响应正文) ……

在响应报文的状态行中,版本字的表示服务器 HTTP 协议的版本,状态码字的表示服务器发回的响应状态代码;短语字段表示状态代码的文本描述。状态码由三位十进制数字组成,第一个数字定义了响应的类别,有五种可能取值( 1-5 ),每种状态码的含义如下:

1xx :指示信息。表示请求已接收,继续处理。

2xx :成功。表示请求已被成功接收、理解、接受。

3xx :重定向。要完成请求必须进行更进一步的操作。

4xx :客户端错误。请求有语法错误或请求无法实现。

5xx :服务器端错误。服务器未能实现合法的请求。

常见状态码及状态描述的说明如下:

200 OK :客户端请求成功。

400 Bad Request :客户端请求有语法错误,不能被服务器所理解。

401 Unauthorized :请求未经授权。

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

404 Not Found :请求资源不存在,比如输入了错误的 URL 。

500 Internal Server Error :服务器发生不可预期的错误。

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

消息头部与请求头部的格式相似,也是包含若干行,每行由关键字及其值构成,常用的关键字包括:

Date: 表示返回消息的时间。

Content-Type: 表示返回消息的内容类型。

Content-Length: 返回内容的长度(字节数)。

Server :使用的服务器软件及其版本号。

同样,最后一个消息头部之后是一个空行,发送回车符和换行符,通知客户端以下不再有消息头部了。

响应正文部分是服务器端根据客户端的请求发回的具体文档内容,以 HTML 语言表示。
 

HTTP的基本原理的更多相关文章

  1. Ognl表达式基本原理和使用方法

    Ognl表达式基本原理和使用方法 1.Ognl表达式语言 1.1.概述 OGNL表达式 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,他是一个 ...

  2. Android自定义控件之基本原理

    前言: 在日常的Android开发中会经常和控件打交道,有时Android提供的控件未必能满足业务的需求,这个时候就需要我们实现自定义一些控件,今天先大致了解一下自定义控件的要求和实现的基本原理. 自 ...

  3. HMM基本原理及其实现(隐马尔科夫模型)

    HMM(隐马尔科夫模型)基本原理及其实现 HMM基本原理 Markov链:如果一个过程的“将来”仅依赖“现在”而不依赖“过去”,则此过程具有马尔可夫性,或称此过程为马尔可夫过程.马尔可夫链是时间和状态 ...

  4. 动态令牌-(OTP,HOTP,TOTP)-基本原理

    名词解释和基本介绍 OTP 是 One-Time Password的简写,表示一次性密码. HOTP 是HMAC-based One-Time Password的简写,表示基于HMAC算法加密的一次性 ...

  5. ZooKeeper基本原理

    ZooKeeper简介 ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. ZooKeeper设计目的 1. ...

  6. GBDT的基本原理

    这里以二元分类为例子,给出最基本原理的解释 GBDT 是多棵树的输出预测值的累加 GBDT的树都是 回归树 而不是分类树 分类树 分裂的时候选取使得误差下降最多的分裂 计算的技巧 最终分裂收益按照下面 ...

  7. 全文检索引擎 Solr 部署与基本原理

    全文检索引擎 Solr 部署与基本原理 搜索引擎Solr环境搭建实例 关于 solr , schema.xml 的配置说明 全文检索引擎Solr系列-–全文检索基本原理 一.搜索引擎Solr环境搭建实 ...

  8. 相机位姿估计0:基本原理之如何解PNP问题

    关键词:相机位姿估计 PNP问题求解 用途:各种位姿估计 文章类型:原理 @Author:VShawn(singlex@foxmail.com) @Date:2016-11-18 @Lab: CvLa ...

  9. geohash基本原理

    geohash基本原理是将地球理解为一个二维平面,将平面递归分解成更小的子块,每个子块在一定经纬度范围内拥有相同的编码,这种方式简单粗暴,可以满足对小规模的数据进行经纬度的检索 目录: 经纬度常识 认 ...

  10. Struts框架——(一)用Servlet + JSP演示Struts基本原理

    一. 用Servlet + JSP演示Struts基本原理 struts是开源项目.它通过采用 Java Servlet/JSP 技术,实现了基于Java EE Web应用的MVC的应用框架.Stru ...

随机推荐

  1. 别人的Linux私房菜(18)认识系统服务(daemon)

    完成服务service的程序称为daemon.完成计划性的服务程序如crond是一个daemon. 早期的System V的init管理daemon操作中,系统内核首先调用init,然后init运行系 ...

  2. T-2-java面向对象

    一.类 类对象的数据结构定义,方法是对象的行为. 类是数据类型. 一个类可以创建多个对象,这多个对象结构相同,数据不同. 类中可以包含:(1)成员变量(对象的共同特征,静的):(2)方法(对象的共同行 ...

  3. 20175316 盛茂淞 MyCP(课下作业,必做)

    题目要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为 ...

  4. 20155205 郝博雅 Exp4 恶意代码分析

    20155205 郝博雅 Exp4 恶意代码分析 一.实验目标 1.监控你自己系统的运行状态,看有没有可疑的程序在运行. 2.分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用 ...

  5. scrapy的基础概念和流程

    1. 什么是scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速的抓取. Scrapy 使用了Twisted['twɪstɪd]异步网 ...

  6. 交叉编译ffmpeg(hi3520d)

    ./configure \--prefix=/usr/local/ffmpeg-3520D \--cross-prefix=/opt/hisi-linux-nptl/arm-hisiv100-linu ...

  7. Multi-pattern string match using Aho-Corasick

    我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...

  8. 20145232韩文浩《网络对抗》PC平台逆向破解

    shellcode注入 1.Linux下有两种基本构造攻击buf的方法:retaddr+nop+shellcode,nop+shellcode+retaddr.我们采用anything+retaddr ...

  9. UWP关于图片缓存的那些破事儿

    看似简单的功能,实施起来却是有着一堆大坑. 按着基本功能来写吧 1.选择图片并显示到Image控件中 2.图片序列化为byte数组以及反序列化 3.本地存储与读取 1.选择图片: 逻辑就是使用File ...

  10. svn提交出现错误 svn: Working copy 'D:\...'locked.

    更新svn内容时出现如下的错误: svn: Working copy 'D:\tools\Workspaces\EclipseForNewSTLJ\javashop\b2c\src\main\weba ...