一、什么是http协议?

  HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,RFC 1945定义了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定义了今天普遍使用的一个版本——HTTP 1.1。

  超文本传输协议是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

  HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

  HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

二、http协议特点

  HTTP协议的主要特点可概括如下:

  1、支持客户/服务器模式。

  2、 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

  3、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

  4、无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

  5、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。

  另一方面,在服务器不需要先前信息时它的应答就较快。

三、HTTP请求的方法:

  HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式
 
  1、OPTIONS
  返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
  2、HEAD
  向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
  3、GET
  向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
  4、POST
  向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。Loadrunner中对应POST请求函数:                                          web_submit_data,web_submit_form
  5、PUT
  向指定资源位置上传其最新内容
  6、DELETE
  请求服务器删除Request-URL所标识的资源
  7、TRACE
  回显服务器收到的请求,主要用于测试或诊断
  8、CONNECT
  HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
  注意:
  1)方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Mothod Not Allowed);当服务器不认识或者不支持对应的请求方法时,应返回状态码        501(Not Implemented)。
  2)HTTP服务器至少应该实现GET和HEAD/POST方法,其他方法都是可选的,此外除上述方法,特定的HTTP服务器支持扩展自定义的方法。

  get 和 post区别

  区别:

    get请求无消息体,只能携带少量数据

    post请求有消息体,可以携带大量数据(理论上无限大)

  携带数据的方式:

    get请求将数据放在url地址中

     post请求将数据放在消息体中

  GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中; 
  GET方式提交的数据最多只能有1024字节,而POST则没有此限制。

四、HTTP协议请求流程

    1.打开HTTP连接。一定要记住HTTP是一种无状态协议。正因为如此,对于每一个请求你都要建立一个新的连接。

  2.设置HTTP请求头部。这里面包含要传送的数据类型(二进制)和数据的总长。

  3.发送请求。将二进制流写到服务器。

  4.读取请求。目标servlet程序将被调用并接受HTTP请求数据。servlet程序就调用所有必要的参数选择相应的方法。注意,如果这是这个客户端的第一次请求,一个服务器对象的新的实例就会被创建。

  5.调用方法。方法将会被服务器端的对象调用。

  6.初始化方法响应。如果调用的方法抛出一个异常,客户将接收到出错信息。否则,返回的类型(如果有)将会被发送。

  7.设置HTTP响应头。在响应头中,一定会设置待发送数据的类型和长度。

  8.发送响应。二进制数据流将从Web服务器发送并返回给客户端。

HTTP 协议的基本知识,包括请求流程、请求方法等的更多相关文章

  1. ASP.NET MVC学前篇之请求流程

    ASP.NET MVC学前篇之请求流程 请求流程描述 对于请求的流程,文章的重点是讲HttpApplication和HttpModule之间的关系,以及一个简单的示例实现.(HttpModule又是M ...

  2. 简单了解HTTP协议的基本知识,请求流程、请求方法等

    HTTP 是Hyper Text Transfer Protocol(超文本传输协议)的缩写 1.超文本传输协议是一种详细规定了浏览器和万维网服务器之间互相通信的规则. 2.HTTP协议(HyperT ...

  3. HTTP请求流程基础知识

    HTTP协议解析: HTTP即超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,它是万维网交换信息的基础,它允许将HTML文档从WEB服务器传输到WEB浏览器. URL(统一资源 ...

  4. http协议请求流程分析

    http协议请求流程分析 用户输入URL(地址链接)(http://www.baidu.com:80/tools.html)客户端获取到端口及主机名后,客户端利用DNS解析域名,首先客户端的浏览器会先 ...

  5. HTTP请求流程你了解了么?

    我又回来了,先来波推广,最硬的资源来自公众号:前端美食汇,欢迎大家关注公众号获取最新的技术.提示,文末有福利,最硬的文章会首先发布在公众号上喔 预备知识 前文没有描述到传输和协议直接的层级对应关系,大 ...

  6. HTTP请求流程(一)----流程简介

    最近一直在研究如何让asp.net实现上传大文件的功能,所以都没怎么写技术类的文章了.可惜的是至今还没研究出来,惭愧~~~.不过因为这样,也了解了一下http消息请求的大致过程.我就先简单介绍下,然后 ...

  7. [转】:HTTP请求流程(一)----流程简介

    http://www.cnblogs.com/stg609/archive/2008/07/06/1236966.html HTTP请求流程(一)----流程简介 最近一直在研究如何让asp.net实 ...

  8. DRF之REST规范介绍及View请求流程分析

    编程是数据结构和算法的结合,而在Web类型的App中,我们对于数据的操作请求是通过url来承载的,本文详细介绍了REST规范和CBV请求流程. 编程是数据结构和算法的结合,小程序如简单的计算器,我们输 ...

  9. Okhttp 请求流程梳理

    最近在看 Okhttp 的源码.不得不说源码设计的很巧妙,从中能学到很多.其实网上关于 Okhttp 的文章已经很多了,自己也看了很多.但是俗话说得好,好记性不如烂笔头,当你动手的时候,你会发现你在看 ...

随机推荐

  1. UML-类图-如何表示方法?

    setter/getter不要写进去. 右边的 enterItem(id,qty)是操作,左边的是enterItem的实现,即方法. 操作:只有声明没有方法体,如接口中定义的“方法”. 方法:实现操作 ...

  2. UML-领域模型-准则

    1.是否使用工具维护模型? 在白板上画完草图后,整理到UML工具里去 2.模型中是否要包含“票据”? 不包含,因为,票据用于退货,而本次迭代不涉及退货所以不需要体现. 总结:概念一定在本次迭代需求内的 ...

  3. ubuntu编译caffe遇到的问题及解决方案

    问题1 /usr/include/boost/python/detail/wrap_python.hpp:50:23: fatal error: pyconfig.h: No such file or ...

  4. GCC生成动态链接库(.so文件):-shared和-fPIC选项

    Linux 下动态链接库(shared object file,共享对象文件)的文件后缀为.so,它是一种特殊的目标文件(object file),可以在程序运行时被加载(链接)进来.使用动态链接库的 ...

  5. [Python] 关于__init__.py

    当目录结构为下面这样└── utils/│ ├── __init__.py│ └── config.py├── test.py 每个文件夹下都有__init__.py,一个目录如果包含了__init_ ...

  6. 【收藏】每天更新!全网热门公共BT种子 BitTorrent Tracker 列表合集

    每天更新!全网热门公共 BitTorrent Tracker 列表合集. 该项目仅将全网热门的公共 Tracker 列表制作成合集方便大家使用,无需再一个个导入了~. 「English」(tracke ...

  7. LeetCode——853.车队

    N 辆车沿着一条车道驶向位于 target 英里之外的共同目的地. 每辆车 i 以恒定的速度 speed[i] (英里/小时),从初始位置 position[i] (英里) 沿车道驶向目的地. 一辆车 ...

  8. SALESORDERINCOME.QVW

    //销售订单SALESORDER_BASE_TMP:NoConcatenateLOAD T_SAL_ORDER.LE_ID, [T_SAL_ORDER.LCY CODE], T_SAL_ORDER.S ...

  9. linux c 调用 python

    /* *gcc -o callpy callpy.cpp -I/usr/include/python3.5 -lpython3.5m */ #include <Python.h> #inc ...

  10. Spring技术内幕

    一.Spring设计目的     通过Spring容器管理JavaBean使原来对象→对象的关系转变为对象→容器→对象的关系,从而实现对象的解耦合和面向接口开发,充分支持OO思想.   二.Sprin ...