HTTP协议——深入篇

HTTP协议——深入篇

我们知道HTTP是由请求和响应两部分组成当你在Web浏览器中输入一个URL时,浏览器将根据你的要求创建并发送请求,该请求包含所输入的URL以及一些与浏览器本身相关的信息。当服务器收到这个请求时将返回一个响应,该响应包括与该请求相关的信息以及位于指定URL(如果有的话)的数据。直到浏览器解析该响应并显示出网页(或其他资源)为止。

HTTP请求

HTTP请求的格式如下所示:

<request-line><注释--请求行-->

<headers><注释--请求头-->

<blank line><注释--空行-->

[<request-body>]<注释--主体-->

在HTTP 请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)]。

常见的请求类型有get 和post,只要在Web浏览器上输入一个URL,浏览器就将基于该URL向服务器发送一个GET请求,以告诉服务器获取并返回什么资源。GET请求示列如下:

GET / HTTP/1.1<注释--请求行-->

Host: www.baidu.com<注释--请求头-->
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive
<--空行-->
请求行的第一部分说明了该请求是GET请求。该行的第二部分是一个斜杠(/),用来说明请求的是该域名的根目录。该行的最后一部分说明使用的是HTTP 1.1版本(另一个可选项是1.0)。

请求头指出请求的目的地。结合HOST和上一行中的斜杠(/),可以通知服务器请求的是 www.baidu.com/

第三行中包含的是首部User-Agent,服务器端和客户端脚本都能够访问它,它是浏览器类型检测逻辑的重要基础。该信息由你使用的浏览器来定义(在本例中是Firefox 1.0.1),并且在每个请求中将自动发送。

最后一行是首部Connection,通常将浏览器操作设置为Keep-Alive(当然也可以设置为其他值,但这已经超出了本书讨论的范围)。注意,在最后一个首部之后有一个空行。即使不存在请求主体,这个空行也是必需的。
注意:
要发送GET请求的参数,则必须将这些额外的信息附在URL本身的后面。其格式类似于:URL ? name1=value1&name2=value2&..&nameN=valueN

该信息称之为查询字符串(query string),它将会复制在HTTP请求的请求行中,如下所示:
GET /books/?name=Professional%20Ajax HTTP/1.1

Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Alive

POST请求示列如下:
POST / HTTP/1.1<注释--请求行-->

Host: www.wrox.com<注释--请求头-->

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
name=Professional%20Ajax&publisher=Wiley

从上面可以发现, POST请求和GET请求之间有一些区别。首先,请求行开始处的GET改为了POST,以表示不同的请求类型。你会发现首部Host和User- Agent仍然存在,在后面有两个新行。其中首部Content-Type说明了请求主体的内容是如何编码的。浏览器始终以application/ x-www-form- urlencoded的格式编码来传送数据,这是针对简单URL编码的MIME类型。首部Content-Length说明了请求主体的字节数。在首部 Connection后是一个空行,再后面就是请求主体。与大多数浏览器的POST请求一样,这是以简单的“名称—值”对的形式给出的,其中name是 Professional Ajax,publisher是Wiley。你可以以同样的格式来组织URL的查询字符串参数。

HTTP响应

如下所示,HTTP响应的格式:

<status-line>

<headers>

<blank line>

[<response-body>]

正如你所见,在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。以下就是一个HTTP响应的例子:

HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122
<html>
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>
在本例中,状态行给出的HTTP状态代码是200,以及消息OK。状态行始终包含的是状态码和相应的简短消息,以避免混乱。

——————————分割线----------------------

拓展一下,之前有提到,我们现在常用的今天普遍使用的一个版本——HTTP 1.1,但就在今年2月份,互联网工程任务组(IETF)批准了 HTTP/2 标准提案, HTTP/2 是自HTTP 1.1时代以来的首个重大升级,HTTP/2 的主要目标是与 HTTP/1.1 完全语义兼容的基础上,进一步减少网络延迟。换句话说,HTTP/2 要在不破坏原有 Web 体系的基础上使它变得更快。

时间: 06-23

HTTP协议——深入篇的相关文章

HTTP协议——认识篇

HTTP协议——认识篇 我们都知道在访问网页不存在时,常常会见到一个404的错误提示,这里的404就是一个HTTP的状态码,当然,HTTP的状态码不止一种,比较常见的有: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务器暂时不可用 具体的更详尽的我们可以去查看HTTP状态代码的W3C页了解详细信息. 既然有HTTP协议状态码,那HTTP协议又是什么呢? HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会

前端基础(http协议相关篇)

网络协议篇: 1.http请求过程 DNS解析--tcp三次握手--建立tcp连接后发起http请求--服务器响应http请求 --浏览器得到资源--浏览器渲染 2.http报文 通用首部:可以出现在请求报文,也可出现在响应报文 请求报文:请求行(包含请求方法和请求URL).请求头部(header).空行和请求数据4个部分组成 响应报文: 状态行(包含http版本.状态码.原因短语).消息报头.响应正文 3.请求方法 get:普通的请求服务器资源 head:只返回头部信息,用于在客户端为获取实际

http协议基础篇(转)

http协议学习系列 转自 http://www.jb51.net/article/28096.htm 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本.其中最著

基于EasyDarwin的实现无人机远程视频传输--RTSP协议分析篇

申明该文章参考了http://blog.csdn.net/haolipengzhanshen/article/details/50802081 的文章,在这里标示感谢! 这篇文章主要从几个方面分析EasyDarwin的RTSP内容 RTSP协议概述 wireshark抓包实例分析 一次完整RTSP的交互流程 EasyDarwin项目代码中 RTSP的初始化 EasyDarwin项目代码中 RTSP请求的处理过程 如果你是只想实现视频流的传输,对转发服务器没有太大要求,建议只要研究EasyDarw

HTTP:每个web开发人员必须知道的协议-基础篇

http://blog.csdn.net/sql_wtx/article/details/8894447 原文是http://net.tutsplus.com/tutorials/tools-and-tips/http-the-protocol-every-web-developer-must-know-part-1/,翻译这面文章的目地是为了更加深刻的了解HTTP协议.现在web技术日新月异,只有对其协议了解清楚,才能更快.更稳固掌握这些新技术.由于文章很长,我会分成几篇博客来翻译,文章里面也

基于STM8的IIC协议--实例篇--时钟模块(DS3231)读取

1. 综述 由上篇博客可知道IIC协议如何用代码实现,本篇博客就不涉及协议内容,只讲解如何使用. 本次的实验传感为:DS3231(时钟模块),对于时钟模块的具体信息我也就不多介绍大家可以自行度娘,具体功能无非就是在单片机中起到一个获取时间的作用.然后该模块是可以由IIC协议去驱动的,再加上所要的操作也是比较简单,适合部分刚接触IIC协议而找不但传感练手的一个模块. 2. 明确任务顺序 个人习惯,在每驱动一个新传感的时候,我会将我要完成的传感分为几个任务点.接下来我就展示以下我在写DS3231模块

HTTP协议请求篇

http协议的基本概念 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.是工作在tcp/ip协议基础上的,所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法 说明 (1) http协议是叫 超文本传输协议 (2) http协议用于传输文本和图片(等文件) (3) 在建立tcp/ip协议基础之上的 如何抓取http包(请求包,响应包) 这里以火狐浏览器为例 看一个测试题 一共发

MQTT 协议 - 部署篇

MQTT - Server 搭建 MQTT - Server 支持winLinux等系统的安装,下文基于linux进行说明. 1.下载安装包 在官网上下载apache-apollo-1.7.1-unix-distro.tar.gz,上传并解压到指定目录下. 解压后如下图所示. 2.创建实例 进入到bin目录中,执行:./apollo  create mybroker,创建成功后如下图. 实例默认创建到bin目录下,如下图 3.修改对外Ip 进入到如上截图中的etc目录中,修改apollo.xml

HTTP协议响应篇

http响应的基本介绍 一个HTTP响应代表服务器向客户端回送的数据, 由三个部分构成 状态行[200 , 302 304, 403, 404, 500] 响应消息头 返回的实体内容 http响应状态行详解 说明,我们要求大家必须掌握的状态码有5个 (1) 200 成功 (2) 302 重定向,  返回的页面告诉浏览器到另外一个url取资源 (3) 304 资源未修改, 服务器说明浏览器本地的资源已经是最新的. (4) 403 禁止访问, 即告诉浏览器,你没有权限访问该资源 (5) 404 没有