http协议的总结说明
关于http协议已经有很多大牛们的讨论,从他们的文章中获益匪浅,作为一个通信专业的学生,还是想从计算机网络的角度谈一下自己的认识。http协议全称超文本传输协议,是一种允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器的一种通信协议。计算机网络的层次模型主要有OSI参考模型和TCP/IP参考模型,现在被广泛应用的是TCP/IP参考模型,不同OSI模型将网络分成7层,TCP/IP将网络分成4层。如下图:
![]() |
http协议即是应用在应用层的 它是一个简单的请求-响应协议, 通常运行在TCP上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出,而消息内容则具有一个类似MIME的格式。 虽然HTTP是一个应用层协议,但它变得越来越像一个传输层协议,因为它为进程之间跨越不同网络进行内容通信提供了一种方式,这些进程不一定必须是Web浏览器和Web服务器。媒体播放器也可以使用HTTP于服务器通信并请求专辑信息,防病毒软件可以使用它来下载更新病毒库,机器与机器之间的通信越来越多的通过HTTP进行。HTTP虽然最初是为Web而设计,但不可置疑的是它的使用正在一步步扩大。(这里我们的讨论就以Web中的HTTP为主) |
连接
我们知道http协议是无状态的,所谓的无状态即是无记忆,同一客户端的多次请求在服务器看来和多个客户端的请求是一样的,彼此直接不会有什么关系。那我们是怎么打开一个网页的呢?浏览器会分批向服务器发送请求,浏览器每发送一个请求Request,服务器会相应返回一个Response,浏览器针对服务器的Response进行分析,看看自己还需要什么东西,然后再次向服务器发送Request,服务器根据Request返回Response,l=浏览器继续分析自己的需求,然后重复以上步骤直到网页中html,图片,css,js等相关文件相继加载完毕。然后我们就看到了完整的网页。如果这期间出现什么差错,服务器会返回响应的值:
代码 | 含义 | 例子 |
1xx | 信息 | 100=服务器同意处理客户请求 |
2xx | 成功 | 200=请求成功;204=没有内容 |
3xx | 重定向 | 301=移动页面;304=缓存的页面仍然有效 |
4xx | 客户错误 | 403=禁止页面;404=页面没有找到 |
5xx | 服务器错误 | 500=服务器内部错误;503=稍后再试 |
方法
http不仅支持请求一个Web页面,而且支持操作(称为方法)。每个请求由一行或多行ASCII文本组成,其中第一行的第一个词是被请求的方法的名字。方法名字区分大小写,详情见下表
方法 | 描述 |
GET | 读取一个Web界面 |
HEAD | 读取一个Web页面的头 |
POST | 附加一个Web页面 |
PUT | 存储一个Web页面 |
DELETE | 删除一个Web页面 |
TRACE | 回应入境请求 |
CONNECT | 通过代理连接 |
OPTIONS | 一个页面的查询选项 |
GET和POST的区别:
1GET方法用于请求服务器发送页面(对象),即获取/查询资源信息,POST用于更新资源信息(提交表单等)。
2GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,POST方法是把提交的数据放在HTTP包的Body中
3基于2的信息,所以GET方式提交的数据会带来安全问题,比如登录一个页面,使用GET登录信息就会出现在URL之中,如果页面被缓存的话或者其他人再使用相同电脑时都是很容易获取的(目测黑客应该是这方面的高手)
4数据大小方面,因为浏览器对URL的长度是有限制的,所以GET提交的数据大小也是有限制的。POST则不然。
5获取变量值时GET使用Request.QueryString,POST使用Request.Form来获取变量的值。
消息头
请求行(例如GET方法的行)后面可能有可能还有额外的行,其中包含了更多的信息,他们统称为请求头。每个请求和响应通常具有不同的头,现就常用的头做一下解释说明
头 | 类型 | 内容 |
User-Agent | 请求 | 有关浏览器及其平台的信息 |
Accept | 请求 | 客户可处理的页面类型 |
Host | 请求 | 服务器的DNS名字 |
Cookie | 请求 | 给服务器发回Cookie的先前请求 |
Set-Cookie | 响应 | 客户存储的Cookie |
Expires | 响应 | 页面(Cookie)不再有效的时间和日期 |
Location | 响应 | 告诉客户向谁发送请求 |
Date | 请求/响应 | 发送消息的日期和时间 |
Cache-Control | 请求/响应 | 指示如何处理缓存 |
缓存
关于缓存大家肯定不陌生,前面就说过缓存可能导致信息安全问题,不过没有缓存将会造成更大的影响。积攒已经获取的网页供日后使用的处理方式称为缓存,优点是当缓存的页面被重复使用时,没有必要进行重复传输,这种协议中内置的支撑,能够帮助客户标识他们何时可以放心的重用页面。并且减少网络的流量和延迟,这些缓存通常被保存在本地磁盘上,即安全又方便成本还低廉。
------本博客参考书为:《计算机网络第5版 清华大学出版社》--------
http协议的总结说明的更多相关文章
- HTTP协议系列(1)
一.为什么学习Http协议 首先明白我们为什么学习HTTP协议,也就是说明白HTTP协议的作用.HTTP协议是用于客户端与服务器之间的通讯.明白了HTTP协议的作用也就知道了为什么要学习H ...
- 重温Http协议--请求报文和响应报文
http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...
- 协议森林17 我和你的悄悄话 (SSL/TLS协议)
作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...
- 协议森林16 小美的桌号(DHCP协议)
作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址.DNS域名服务器地 ...
- 简约之美Jodd-http--深入源码理解http协议
Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架.简单,却很强大! jodd-http是一个轻巧的HTTP客户端.现在我们以一个简单的示例从源码层看看是如何实现的? Http ...
- 【JavaScript】javascript中伪协议(javascript:)使用探讨
javascript:这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行. 比如下面这个死链接: <a href="javasc ...
- SNMP简单网络管理协议
声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...
- 海鑫智圣:物联网漫谈之MQTT协议
什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...
- linux-图形化远程管理协议
远程管理控制方式: RDP(remote desktop protocol)协议: telnet: SSH(Secure Shell): RFB(Remote FrameBuffer)协议(图形化远程 ...
- RTP与RTCP协议介绍(转载)
RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步.RTP中没有连接的概念,本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完 ...
随机推荐
- 如何设置(修改)jetty(maven插件maven-jetty-plugi)的端口
在使用jetty的maven插件,有两种方式来改变jetty server的端口,第一种方式较为简单,即: 通过命令行指定端口:mvn -Djetty.port=9999 jetty:run 另一种方 ...
- oracle 11g 之 result cache
oracle 11g 之 result cache 今天是2013-10-12,打算最近时间研究一下shared pool的相关原理以及awr报告分析.今天学习一下在oracle 11g shared ...
- PHP 中运用 elasticsearch
PHP扩展安装 1. 环境要求:PHP_VERSION >= 5.3.9,composer工具 2. 在E盘新建文件夹命名为elastic,,拷贝composer.phar到 E:/e ...
- TypeScript学习笔记(四):函数
这篇笔记我们来看看TypeScript中的函数. 函数类型 在JavaScript中存在两种定义函数的方法,如下: //命名函数 function add(x, y) { return x+y; } ...
- Winform-控制边框显示属性
- 在Web上调用Ocx控件
原文:http://blog.csdn.net/goodadult2012/article/details/6343369 在HTML页面中使用ActiveX控件包含三个基本操作:将控件放入HTML中 ...
- [Angular-Scaled Web] 9. Control your promises with $q
Learn how to manually control how asynchronous requests are handled with the use of promises. Becaus ...
- MYSQL源码 与 DBUG
一.前言 在规模稍微大点的项目中,为了方便快速找到bug的所在,我们往往需要在代码中加入一些调试用的代码,比如加入一些printf,打印出一些重点的信息:加入assert,进行断言判断.这些比较随意的 ...
- Gradient Boost Decision Tree(&Treelink)
http://www.cnblogs.com/joneswood/archive/2012/03/04/2379615.html 1. 什么是Treelink Treelink是阿里集团内部 ...
- 项目源码--Android应用商店源码
下载源码 技术要点: 1.互联网应用 客户端框架 2.综合应用开发所 有技术 3.安装应用的管理 4. HTTP网络通信技 术 5.下载安装.评论 框架 6.使用.版本升级 等统计方案 7.源 ...