HTTP的基本原理

用户访问万维网文档,万维网文档之间的链接以及万维网文档中数据传送到用户计算机,这些功能的实现都是由超文本传输协议 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 语言表示。

时间: 2024-10-07 05:39:10

HTTP的基本原理的相关文章

一、DNS解析的基本原理

1.基础知识 DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析).DNS协议运行在UDP协议之上,使用端口号53. 2.专业术语 FQDN : Full Qualified Domain Name  完全合格域名 例如:www.baidu.com   www.mirrors.163.com

android插件化-apkplug中OSGI服务基本原理-08

我们提供 apkplug 下OSGI使用demo 源码托管地址为 http://git.oschina.net/plug/OSGIService 一 OSGI与android Service 异同点 OSGI服务与android Service概念差不多也是Service ,Client 关系. android Service接口  --service.AIDL OSGI接口                --java interface 所以android 进程间通信Service只能传递序列

使用WIF实现单点登录Part II —— Windows Identity Foundation基本原理

在上一篇文章中,我们已经使用WIF构建了一个基于MVC4的简单的身份验证程序,在这篇文章里,我们将探讨一下到底什么是WIF,以及它的工作原理.然后在下一篇文章开始,我们将实际操作,实现单点登录功能. 身份标识的挑战 在上一篇文章也提及到了,大部分的开发人员并不是安全方面的专家,很多人对于身份验证,授权以及用户体验个性化等工作感觉非常的不爽.传统的计算机技术的课程里通常也不会教这些课题,因此这些东西经常在软件开发周期的后半部分才会凸显出来.当今,一个公司里有数十上百个Web应用程序和服务已不是什么

TCP和UDP基本原理

TCP和UDP基本原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 传输层的主要任务就是建立应用程序间的端到端连接,并且为数据传输提供可靠或不可靠的通信服务,TCP/IP协议族的传输层协议主要包括TCP和UDP ,TCP是面向连接的可靠的传输层协议,它支持在不可靠网络上实现面向连接的可靠的数据传输 ,UDP是无连接的传输协议,主要用于在相对可靠的网络上的数据传输,或用于对延迟较敏感的应用等. 1.传输层的作用 a>.提供面向连接或无连接的服务 b>.维护连接状态 c>

ZooKeeper基本原理

转自:http://www.cnblogs.com/edison2012/p/5654011.html ZooKeeper简介 ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. ZooKeeper设计目的 1.最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的性能. 2.可靠性:具有简单.健壮.良好的性能,如果消息m被到一台服务器接受,那么它将被所

分布式系统设计系列 -- 基本原理及高可用策略

转自:http://blog.csdn.net/gugemichael/article/details/36688043 ==> 分布式系统中的概念==> 分布式系统与单节点的不同==> 分布式系统特性==> 分布式系统设计策略==> 分布式系统设计实践 [分布式系统中的概念] 三元组 其实,分布式系统说白了,就是很多机器组成的集群,靠彼此之间的网络通信,担当的角色可能不同,共同完成同一个事情的系统.如果按"实体"来划分的话,就是如下这几种:       

【转载】C/C++杂记:虚函数的实现的基本原理

原文:C/C++杂记:虚函数的实现的基本原理 1. 概述 简单地说,每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少有一个与之对应的虚函数表,其中存放着该类所有的虚函数对应的函数指针.例: 其中: B的虚函数表中存放着B::foo和B::bar两个函数指针. D的虚函数表中存放的既有继承自B的虚函数B::foo,又有重写(override)了基类虚函数B::bar的D::bar,还有新增的虚函数D::quz. 提示:为了描述方便,本文在探讨对象内存布局时,将忽略内存对齐对布局的影响.

Learning ReactNative (一) : JavaScript模块基本原理与用法

在使用ReactNative进行开发的时候,我们的工程是模块化进行组织的.在npmjs.com几十万个库中,大部分都是遵循着CommonJS规则的.在ES6中引入了class的概念,从此JavaScript也可以更加方便地进行OOP编程.但是不变的是,即使在使用OOP编程,其依赖组织方式仍然是模块化的.因此,我们十分有必要了解JavaScript中模块的基本原理,以便在之后的开发过程中能少犯错误,更好的理解整个工程的结构. 本文以更容易理解的意识流的方式简要的介绍了一下require.js.mo

数据库锁的基本原理

数据库锁的基本原理 为了保证数据的完事性和一致性,数据库系统采用锁来实现事务的隔离性.各种大型数据库采用的锁基本理论是一致的,但在具体实现上各有差别. 从并发事务锁定的关系上看,可以分为共享锁定和独占锁定.从锁定的对象不同,一般可以分为表锁定和行锁定. 锁 共享锁用于读取数据操作,它是非独占的,允许其他事务同时读取其锁定的资源,但不允许其他事务更新它. 独占锁也叫排他锁,适用于修改数据的场合.它所锁定的资源,其他事务不能读取也不能修改. 当一个事务访问某种数据库资源时,如果执行select语句,

960CSS框架,之前有用过 了解下框架基本原理

http://blog.sina.com.cn/s/blog_8173443e010160b8.html CSS框架已经出现很长时间了,关于这些框架的用处也被我们讨论了很多遍了.有人说,CSS框架不够先进,还有人说这些框架大大的节省了他们的开发时间.在此,我们将不再讨论这个问题. 前段时间,我了解到了CSS框架.我最喜欢960CSS框架. 本教程将解释这个框架的基本原理,这样你就可以用960来快速进入开发. 基本原理 你必须知道一些基本原理来“学习这个框架是如何工作的”.你可以通过实验(或者是用