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来负责完 ...
随机推荐
- UVa 1640 The Counting Problem (数学,区间计数)
题意:给定两个数m, n,求从 m 到 n 中0-9数字各出现了多少次. 析:看起来挺简单的,其实并不好做,因为有容易想乱了.主要思路应该是这样的,分区间计数,先从个位进行计,一步一步的计算过来.都从 ...
- Unity3D之Mecanim动画系统学习笔记(四):Animation State
动画的设置 我们先看看Animation Clip的一些设置: Loop time:动画是否循环播放. 下面出现了3个大致一样的选项: Root Transform Rotation:表示为播放动画的 ...
- [Windows驱动开发](二)基础知识——数据结构
本节主要介绍驱动开发的一些基础知识. 1. 驱动程序的基本组成 1.1. 最经常见到的数据结构 a. DRIVER_OBJECT驱动对象 // WDK中对驱动对象的定义 // 每个驱动程序都会有一个唯 ...
- 线程暴长~Quartz中创建Redis频繁后导致线程暴长
在最近项目开发过程中,在进行任务调度处理过程中,出现了一个问题,它的线程数暴长,从20多个可以到1000多个,如果你的服务器性能好的话,可以到10000多个,太恐怖了,就算你的服务再好,早晚有一天也会 ...
- jquery 绑定省份和城市
前台代码: <asp:DropDownList runat="server" ID="ddlProvince"></asp:DropDownL ...
- Error: [$injector:unpr] angular.js
首先去看控制器是否存在错误 (function () { angular.module('myApp.demo', []) .controller('demoCtrl', ['$scope', '$r ...
- webservice 缓存机制
本文转载:http://blog.csdn.net/zhdd1234/article/details/4555472 WebService的缓存分为两种,一种是简单的输出缓存,一种是强大的数据缓存 一 ...
- Linux 安装oracle10g 配置dataguard 介绍和步骤
DataGuard是甲骨文推出的一种高可用性数据库方案,在Oracle 8i之前被称为Standby Database.从Oracle 9i开始,正式更名为Data Guard.它是在 ...
- crm操作货币实体
using System; using Microsoft.Xrm.Sdk; using Microsoft.Crm.Sdk.Messages; /// <summary> ...
- HttpClient 设置代理方式
HttpClient httpClient = new HttpClient(); //设置代理服务器的ip地址和端口 httpClient.getHostConfiguration().setPro ...