摘选自吴秦:http://www.cnblogs.com/skynet/archive/2010/05/18/1738301.html

1、HTTP概述

为了唤醒你对HTTP协议的记忆或使你能够对HTTP协议有所了解,首先简单一下HTTP协议。超文本传输协议HTTPHyperText Transfer Protocol )是互联网 上应用最为广泛的一种网络协议 。所有的WWW 文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML 页面的方法。

HTTP的发展是万维网协会(World Wide Web Consortium )和Internet工作小组(Internet Engineering Task Force )合作的结果,(他们)最终发布了一系列的RFC ,其中最著名的就是RFC 2616 。RFC 2616 定义了HTTP协议中一个现今被广泛使用的版本——HTTP 1.1。

1.1、HTTP协议的客户端与服务器的交互

HTTP是一个客户端和服务器端请求和应答的标准(TCP )。客户端是终端用户服务器端是网站 。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口 为 80)的HTTP请求。(我们称这个客户端)调用户代理(user agent)。应答的服务器上存储着(一些)资源,比如HTML文件和图像。(我们称)这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道(tunnel)。尽管TCP/IP 协议是互联网上最流行的应用,HTTP协议并没有规定必须使用它和(基于)它支持的层。事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。HTTP只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。

通 常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一 旦收到请求,服务器(向客户端)发回一个状态行,比如"HTTP/1.1 200 OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。

HTTP使用TCP而不是UDP的原因在于(打开一个)一个网页必须传送很多数据,而TCP 协议提供传输控制,按顺序组织数据,和错误纠正。通过HTTP或者HTTPS协议请求的资源由统一资源标识符 (Uniform Resource Identifiers,或者,更准确一些,URI)来标识。

客户端与服务器端的结构与交互过程可以表示为下面2张图:

图1、Web客户端-服务器端结构(其中web服务器的超文本链接,即通过网站上的一个链接跳转到了其他服务器上)

图2、Web客户端与服务器端的交互

1.2、HTTP消息

客户端与服务器之间的交互用到了两种类型的消息:请求(Request)响应(Response)

HTTP请求的格式为:

图3、HTTP请求的格式

HTTP响应的格式为:

图4、HTTP响应的格式

从上面可以看出HTTP的请求和响应消息的首部均包含可变数量的字段,用一个空行(blank line )将所有首部字段 (header)与消息主体 (body)分隔开来。一个首部字段由字段名和随后的冒号、一个空格和字段值组成,字段名不区分大小写

报文头可分为三类:一类应用于请求,一类应用于响应,还有一类描述主体。有一些报文头(例如:Date)既可用于请求又可用于响应。描述主体的报文头可以出现在POST请求和所有响应报文中。HTTP的首部字段如下图所示:

图5、HTTP首部字段

1.3、HTTP请求的方法

HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI 指定的资源的不同操作方式:

  • OPTIONS
    返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。
  • HEAD
    向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
  • GET
    向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application 中。其中一个原因是GET可能会被网络蜘蛛 等随意访问。
  • POST
    向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
  • PUT
    向指定资源位置上传其最新内容。
  • DELETE
    请求服务器删除Request-URI 所标识的资源。
  • TRACE
    回显服务器收到的请求,主要用于测试或诊断。
  • CONNECT
    HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed);当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。

HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。

1.4、HTTP响应的代码

服务器程序响应的第一行叫状态行。状态行以HTTP版本号开始,后面跟着3位数字表示响应代码,最后是易读的响应短语。根据第一位可以把响应分成5类:

图6、HTTP响应代码

2、GET与POST的差异

1.3中介绍了8种方法,其中GET与POST最基本和常用了。表单提交中get和post方式的区别归纳如下几点:

  • GET是从服务器上获取数据,POST是向服务器传送数据。
  • GET 是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。POST是通过HTTP POST机制,将表单内各个字段与其内容放置在BODY内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
  • 对于GET方式,服务器端用Request.QueryString获取变量的值,对于POST方式,服务器端用Request.Form获取提交的数据。
  • GET传送的数据量较小,不能大于2KB(这主要是因为受URL长度限制)。POST传送的数据量较大,一般被默认为不受限制。但理论上,限制取决于服务器的处理能力。
  • GET 安全性较低,POST安全性较高。因为GET在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记 录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一 同显示在用户面前。POST的所有操作对用户来说都是不可见的。

在FORM提交的时候,如果不指定Method,则默认为 GET请求(.net默认是POST),Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+” 号,其它符号转换为%XX,其中XX为该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;GET方式提交的数据最多只能有2048字节,而POST则没有此限制 。POST传递的参数在doc里,也就http协议所传递的文本,接受时再解析参数部分。获得参数。一般用POST比较好。POST提交数据是隐式的,GET是通过在url里面传递的,用来传递一些不需要保密的数据,GET是通过在URL里传递参数,POST不是。

另他后面有http的一个深入keepalive模式:http://www.cnblogs.com/skynet/archive/2010/12/11/1903347.html

########################################################

########################################################

小记:

看HTTP相关内容一是因为对HTTP印象模糊,二是前段时间看struts被服务器具体如何响应请求这个问题卡住了。

HTTP协议可以看成是对请求和响应的数据格式都作了规定,(类似接口),具体不同的服务器可能有不同的实现,但响应的内容格式则必须符合协议规定。Java中就是取得response的输出流,按照setContentType,write,flush,close流程把响应内容返回给客户端。

HTTP协议及GET、POST的差异相关推荐

  1. HTTP与Tcp协议下双工通信的差异

    WCF中经常会使用HTTP协议与Tcp协议来实现双工通讯,对应使用的协议分别为WsDualHttpBinding.NetTcpBinding. HTTP是基于应用层的协议,而Tcp是基于传输层的协议. ...

  2. 物联网常见协议之Amqp协议及使用场景解析

    摘要:本文围绕AMQP协议,为大家详细解析AMQP协议.核心技术亮点.多协议之间的对比以及使用实践. 本文分享自华为云社区<物联网常见协议之Amqp协议及使用场景解析>,作者:张俭. 引言 ...

  3. 蚂蚁通讯框架SOFABolt之私有通讯协议设计

    前言 SOFABolt 是蚂蚁金融服务集团开发的一套基于 Netty 实现的网络通信框架. 为了让 Java 程序员能将更多的精力放在基于网络通信的业务逻辑实现上,而不是过多的纠结于网络底层 NIO ...

  4. UDT 最新协议分析

    UDT4 最新协议分析 背景 协议 与IETF草案版本差异 简介 数据结构 数据包 控制包 定时器 两种连接模式 数据发送与接收 发送端算法 发送端数据结构 数据发送算法 接收端算法 接收端数据结构 ...

  5. IMAP协议RFC3501中文文档

    因特网邮件访问协议,版本4rev1(IMAP4rev1)允许一个客户端访问和操作在一个服务器上的电子邮件.IMAP4rev1允许,以一 种功能上等效于本地文件夹的方式,操作邮箱(远程邮件文件夹).IM ...

  6. SSH协议及SSH工具

    SSH协议: SSH 为 Secure SHell 的缩写,SSH是Secure SHell Protocol 安全外壳协议,为建立在应用层和传输层基础上的安全协议.SSH 是目前较可靠,专为远程登录 ...

  7. 简单理解TCP/IP传输层协议TCP和UDP

    TCP/IP模型中的传输层主要负责端到端通信,和数据链路层类似,数据链路层负责点到点的通信.TCP/IP模型的传输层主要协议有TCP (Transmission Control Protocol,传输 ...

  8. IMAP协议RFC3501中文文档 .

    IMAP协议RFC3501中文文档 . 分类: 各类协议标准文档 2011-05-18 09:48 1238人阅读 评论(0) 收藏 举报 因特网邮件访问协议,版本4rev1(IMAP4rev1)允许 ...

  9. Java内存模型MESI协议

    参考链接 也许,这是东半球最叼的Java内存模型 CPU缓存一致性协议MESI 目录 多线程并发编程的三个特性实现 缓存的出现 缓存不一致 MESI协议 MESI优化和他们引入的问题 硬件内存模型 v ...

  10. HTTP协议之TCP/UDP区别

    1. 目的差异 首先,这两个协议的目的不同:TCP 协议的核心目标是提供可靠的网络传输,而 UDP 的目标是在提供报文交换能力基础上尽可能地简化协议轻装上阵. 2. 可靠性差异 TCP 核心是要在保证 ...

最新文章

  1. SPLT(Skimming-Perusal Tracking)算法详解
  2. 反转一个值中的最后n位
  3. Excel中,条件格式的跟多应用-「数字条」「图标集」
  4. python 运动模糊 退化模型 点扩散函数 逆滤波与维纳滤波
  5. 向公有云迁移,需要注意哪些问题
  6. linux下打印pdf文件很慢,打印机打印pdf文件特别慢怎么解决
  7. C++ 类中的static成员的使用及单例设计示例
  8. 全套机密PS技术,你在学校里十二年,也学不到这么多
  9. Web应用开发技术笔记
  10. xshell6 强制更新的问题(转载、亲测有效)
  11. 修复笔记本键盘都失灵的情况
  12. 数据结构1800试题(第四章)
  13. oracle存小数用 number(m,n)
  14. Ubuntu 10.10 最全的更新源收集(ubuntu yuan)
  15. Proxy error: Could not proxy request /students from localhost:8080 to http://localhost:5000/.See ht
  16. 开发板设置从nfs启动
  17. Android之动态更换桌面图标
  18. 设计一个接口, 并设计一个实现类实现该接口,演示它们的使用。具体,创建一个名称为Person的接口,在接口中定义两个方法sayHello()和sayBye()。
  19. 「预览」从PDF中生成子PDF文件
  20. QQ Music for Linux (x86) 野生QQ音乐linux版本

热门文章

  1. POJ--2594|Treasure Exploration
  2. 【debug】汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
  3. 同一wifi下小米电视无法投屏
  4. 利用FileReader和FileWriter完成一个文件拷贝功能
  5. Oracle融合数据库(Converged Database)
  6. Mongodb本机部署副本集
  7. 前段基础 HTML 第三章文字与段落标记----假期学习第二天
  8. 进不去系统rpc服务器不可用,WinXP系统RPC服务器不可用怎么办?
  9. Python实战系列-上海银行间同业拆借利率最新报错解决方案
  10. 仓库码放要求_仓库管理制度规则