http://blog.csdn.net/macroway/article/details/1428541

孟岩老师将“REST”称为一场Web开发思想的变革,而就我个人理解而言,REST对Mashup应用的价值要远大于对Web应用架构的影响。

这里不想纠缠于REST和MashUp两个概念,关于它们的文章我已经写了一些,不过还暂时不打算发在blog中。

打算介绍一下http协议中涉及的方法,在互联网上搜索了很久,发现中文文章中深究http协议的很少,通常谈到http协议也只是关注于Get和Post两个方法,最多提一下head方法。

因为有需要,所以我就再次做一下科普。

如果可以的话,请进入windows命令行,如果你使用的是非windows操作系统的话,我相信你肯定知道如何进入命令行。

输入:

telnet www.google.com 80

很快你的命令行窗口变得一团漆黑了,而这个时候的你,已经开始访问google的web了。与我们通常使用浏览器后的感觉不同,现在的你无所适从。

如果你愿意尝试,现在的你输入get或者head等都可以获得响应,只不过响应的内容让人有些失望。

通常浏览器会帮助我们构建http的协议头信息,从而向对方服务器发送包,获得响应的http协议头信息和正文内容,再将正文内容解析展示在我们面前。

如果你使用过任何sniffer工具,你都会发现,http协议头中通常我们的起始内容是get或post。虽然浏览器能够帮助我们只是发送head请求,但通常我们不会这样去做。

http协议只有get、post和head方法么?它还包含些什么方法呢?

关于http协议涉及方法的两个名词解释:safe型方法和Idempotent型方法。

safe型方法通常是指不影响服务器端资源的行为,它的操作结果仅仅是读取信息,GET和HEAD多数情况下被认为具有“safe”的特性。

Idempotent型方法正如Idempotent这个词的意思一样,如果一个方法,n次调用与一个独立请求所产生的资源消耗相同,即没有边际损耗,则我们可以认为这类方法是idempotent型方法,get、head、put、delete、options和trace都具有这样的特性。

http协议通常包括的方法有很多,以下我只列出我在http/1.1协议定义中看到的方法:get、post、head、options、put、delete、trace、connect。

get方法用于获取URI资源,是最为常用的一种方法。

post方法用于向指定URI提交内容,服务器端响应其行为,该方法也极为常用。

head方法向URI发送请求,仅仅只需要获得响应的协议头。

put方法用于向URI发送请求,若URI不存在,则要求服务器端根据请求创建资源。当URI存在时,服务器端必须接受请求内容,将其作为URI资源的修改后版本。

delete方法用于删除URI标识的指定资源。

trace方法用于激活服务器端对请求的循环反馈,反馈作为http响应的正文内容被传输回客户端。

connect方法通常被用于使用代理连接。

对于上面提到的这些方法,相信大家如果肯花时间,自然可以在http协议的标准中看到更加详细的内容。但有一点是我需要说明的,以上提到的方法,除了get、post和head可以通过浏览器应用外,其它的方法例如put和delete使用起来有些问题。但ajax的出现为我们提供了一种解决的方式,ajax使用xmlhttprequest进行操作时,在发送请求之前,可以通过设置request type的方式来完成对请求方法的设定。

诸位如果作为servlet开发的人可以尝试一下直接在servlet中实现doPut、doDelete等方法,并在客户端使用ajax对相同的URI使用不同的方法进行请求,相信大家可以玩得愉快:)

==========

HTTP Request GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE Methods

An HTTP request is a class consisting of HTTP style requests, request lines, request methods, request URL, header fields, and body content. The most common methods that are used by a client in an HTTP request are as follows:-

1) GET:- Used when the client is requesting a resource on the Web server.

2) HEAD:- Used when the client is requesting some information about a resource but not requesting the resource itself.

3) POST:- Used when the client is sending information or data to the server—for example, filling out an online form (i.e. Sends a large amount of complex data to the Web Server).

4) PUT:- Used when the client is sending a replacement document or uploading a new document to the Web server under the request URL.

5) DELETE:- Used when the client is trying to delete a document from the Web server, identified by the request URL.

6) TRACE:- Used when the client is asking the available proxies or intermediate servers changing the request to announce themselves.

7) OPTIONS:- Used when the client wants to determine other available methods to retrieve or process a document on the Web server.

8) CONNECT:- Used when the client wants to establish a transparent connection to a remote host, usually to facilitate SSL-encrypted communication (HTTPS) through an HTTP proxy.

Http协议中的方法相关推荐

  1. 关于“幽灵架构”的补充说明1:协议中的方法定义

    承接上一篇博文,上一篇的篇幅有点太长了,我觉得有一些相关的技术点需要说明,所以重新写几篇博文.这个系列的文章将要说明以下几个问题: 1.giveData和getData在各自协议中的位置 2.使用st ...

  2. HTTP协议中 GET 和 POST的区别(全)

    目录 前言 1. 源码探讨 2. 区别 前言 在了解这两个的区别的同时 还需要额外补充一些http协议中其他方法以此了解更加深入 方法 描述 GET 请求指定的页面信息,并返回实体主体 HEAD 类似 ...

  3. HTTP协议中GET和POST方法的区别

    本文详细对比了HTTP协议中GET和POST方法的区别,部分内容可能有误,读者请自行甄别. 转自博客https://sunshinevvv.coding.me/blog/2017/02/09/Http ...

  4. 谈BitTorrent协议中的DHT方法

    背景:P2P.BT协议 1.P2P方法的思想和产生原因 P2P全称Peer to Peer.要想理解p2p首先要了解另一种更原始的结构:C/S结构. C/S结构中,C指client,S指server. ...

  5. iOS基础控件-UITabBarController - 3 之UITabBarControllerDelegate协议中的四个重要方法

    让AppDelegate遵守UITabBarControllerDelegate 协议 在 XSAppDelegate.m 中的 - (BOOL)application:( UIApplication ...

  6. 【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 动态拦截函数 | 动态获取 MetaClass 中的方法 | evaluate 方法执行Groovy脚本 )

    文章目录 一.基础示例 二.根据字符串动态获取 MetaClass 中的方法 二.使用 evaluate 执行字符串形式的 Groovy 脚本 二.完整代码示例 一.基础示例 定义类 Student ...

  7. 基于PCIe的NVMe协议在FPGA中实现方法

    NVMe协议是工作在PCIE的最上层协议层的,故需要先搞清楚PCIE.本文基于Xilinx的UltraScale+,开发工具为Vivado2021.2.学习中以spec为主,其它资料辅助参考(重点介绍 ...

  8. tcp/ip协议中消息传输对帧消息的操作

    2019独角兽企业重金招聘Python工程师标准>>> 接口:Framer.java: package com.tcpip;import java.io.IOException; i ...

  9. HTTP协议中Content-Length的详细解读。

    Content-Length用于描述HTTP消息实体的传输长度the transfer-length of the message-body.在HTTP协议中,消息实体长度和消息实体的传输长度是有区别 ...

最新文章

  1. echarts柱状图x轴文字换行_深入 echarts 如何设置 Label / axisLabel 换行及自定义格式 / 自定义样式? 结合 canvas 如何实现文字换行来理解...
  2. 【2781】二分练习 sdutOJ
  3. JS的事件对象和事件冒泡
  4. php简单的mysql类_PHP 简单mysql封装类
  5. python如何测试仪器_如何测试pytest设备本身?
  6. 使用AutoMapper 处理DTO数据对象的转换
  7. 限制对web路径的访问
  8. 常用的一些类,少走弯路。待续...
  9. mysql数据库维护重要性_建立MySQL数据库日常维护规范
  10. iTOP4412 uboot移植教程
  11. java正则匹配_Java正则表达式详解
  12. 大规模行人检索—PRCV2020竞赛发布
  13. cad怎么改光标样式_如何更改CAD光标大小及颜色?
  14. 网易首支AI歌曲《醒来》发布:声音太逼真 能瞒过人类
  15. Python实现将人脸表情数据集fer2013转化为图像形式存储本地
  16. Excel竟然可以批量解锁二维码内容的操作
  17. S-Nim (HDU 1536)组合博弈SG多组游戏
  18. java 横向 打印出来_在双工模式下使用Java打印横向文档
  19. appearance
  20. LeetCode 力扣每日一题 488.祖玛游戏

热门文章

  1. C# 系统应用之清除Cookies、IE临时文件、历史记录
  2. C# 网络编程之使用Socket类Send、Receive方法的同步通讯
  3. App设计灵感之十二组精美的智能家居操作App设计案例
  4. iOS之深入解析类Class的底层原理
  5. 2015年第六届蓝桥杯 - 省赛 - C/C++大学B组 - C. 三羊献端
  6. 什么是Django?
  7. 深度学习——02、深度学习入门——经典卷积神经网络架构实例——VGGNet
  8. 有关提高visual studio开发效率的方法
  9. python if name main 的作用_Python----基础之if __name__ == 'main': 的作用和原理
  10. 每天一道LeetCode-----为二叉树增加next节点,指向同一层的下一个节点