HTTP是一个基于请求/响应模式的,无状态的协议 (只有客户端发送请求服务器才会响应,否则服务器不会主动发送信息的,无状态指客户端发过来一个请求服务端给你发回一个响应,接着你再去发送一个请求,服务器根本不知道你这个请求是第一次发来的还是第二次发来的,根本不知道上一次或者历史上都发生过什么事情,它只知道你发给我一个请求我给你一个响应。因此在一些购物系统或登录系统,需要知道用户是否登录了,那么就衍生出cookie与session来记录客户端信息)

HTTP协议基于TCP,所以必须要建立连接,类似于数据库连接

HTTP/1.0:当连接建立后,浏览器发送一个请求,服务器返回一个消息之后连接就被关闭,当浏览器下次请求的时候需要重新建立连接,很显然这种需要不断建立连接的通信方式开销比较大,早起的web页面通常只包含HTML文本,因此即使建立连接的开销比较大,也不会有太多的影响(本质发送的请求少),而现在的web页面往往包含多种资源(图片、动画、声音、js、css等)每获取一种资源,就建立一次连接,这样就增加了HTTP服务器的开销,造成了Internet上的信息阻塞。 (本质发送的请求变多,再采用一个请求一个连接的方式不合时宜了)。例如请求一个网页内含100张图片,按HTTP/1.0的方式则要建立101个连接,首先服务器会返回一个响应(即网页),然后浏览器根据内容解析发现还要发送100个请求才能得到100张图片,这就是为什么我们访问图片比较多的网页会首先显示一个网页,然后一张一张图片开始慢慢的显示出来。

HTTP/1.1给出了持续连接(Persistent Connnections)的机制,并将其作为HTTP/1.1中建立连接的缺省行为,通过这种连接,浏览器可以在建立一个连接之后,发送请求并得到响应,然后继续发送请求再次得到回应,而且客户端还可以发送流水线请求,也就是说客户端可以连续发送多个请求,而不用等待每一个响应的到来(流水线式请求效率明显比一应一答高),也就是说请求响应后连接并不是马上关闭了,还能够保持一段时间,100张图片的那个例子使用HTTP/1.1协议的话只要建立一个连接就可以了,大大提高了性能

客户端和服务器端每次建立和关闭连接都是一个相对比较费时的过程,并且会严重影响客户机和服务器的性能。

客户端通过发送HTTP请求向服务器请求对资源的访问

HTTP请求由三部分组成分别是:请求行、消息报头、请求正文

浏览器地址栏中输入地址来向服务器发送HTTP请求本质上是底层先与服务器建立连接然后发送HTTP消息罢了

HTTP请求行包含Method Request-URI HTTP-Version (CRLF)

在HTML文档中,书写get和post不区分大小写,但HTTP协议中的GET和POST只能是大写形式

HTTP响应也分三部分组成:状态行、消息报头、响应正文

HTTP响应各个状态所对应的信息:

1XX —— 指示信息,表示请求已接受,继续处理

2XX —— 成功,表示请求已经被成功接收,理解,接受

3XX —— 重定向,要完成请求必须进行更进一步的操作

4XX —— 客户端错误,请求由语法错误或请求无法实现

5XX —— 服务器端错误,服务器未能实现合法的请求

http基础知识摘录的更多相关文章

  1. Map/Reduce应用开发基础知识-摘录

    Map/Reduce 这部分文档为用户将会面临的Map/Reduce框架中的各个环节提供了适当的细节.这应该会帮助用户更细粒度地去实现.配置和调优作业.然而,请注意每个类/接口的javadoc文档提供 ...

  2. CCNA基础知识摘录

    cisco设备的启动要点: 1.检测硬件(保存在rom) 2.载入软件(IOS)(保存在Flash) 3.调入配置文件(密码,IP地址,路由协议都保存在此)(此文件保存在NVRAM) 0x2102:正 ...

  3. Quartz.NET基础知识概述

    Quartz.NET是什么 由于我现在使用的Quartz.NET2.2版本,相对2.x变化不大,主要是相对于1.x更新了很多东西,如下基础知识摘录网络. Quartz.NET是一个开源的作业调度框架, ...

  4. Java基础知识【下】( 转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  5. Runtime系列(一)-- 基础知识

    众所周知,Objective-C 是一种运行时语言.运行时怎么来体现的呢?比如一个对象的类型确定,或者对象的方法实现的绑定都是推迟到软件的运行时才能确定的.而运行时的诸多特性都是由Runtime 来实 ...

  6. [源码解析] 深度学习分布式训练框架 Horovod (1) --- 基础知识

    [源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 目录 [源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 0x00 摘要 0x01 分布式并 ...

  7. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  8. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  9. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

随机推荐

  1. CS Academy #32 G

    题意: 分析: 考虑如何求方案数 dp[i][j]表示i个数字的和为j的方案数,这是个经典问题,转移有两种,一个是填一个数字1,一个是整体加1 然后这个问题并不是求方案数,而是求对应的权值和 我们很容 ...

  2. 10分钟学会前端工程化(webpack4.0)

    一.概要 1.1.前端工程化 随着前端的不断发展与壮大,前端变得越来越复杂,组件化.模块化.工程化.自动化成了前端发展中不可或缺的一部分,具体到前端工程化,面临的问题是如何提高编码->测试-&g ...

  3. 我理解的ios和android

    近期着手了几个android和ios的项目,如今说下我的几个对他们的理解 从设计上来讲.我觉得android 它更像是个网页,一个页面跳到另外一个页面,两者之间的关联不是非常大,仅仅能传递一些简单的參 ...

  4. Effective C++ 条款八 别让异常逃离析构函数

    class DBConn //这个class用来管理DBConnction对象 { public:   //自己设计一个新的DBConn接口 方法3 void close() { db.close() ...

  5. VC中常见API函数使用方法(经验版)

    ***********************************************声明*************************************************** ...

  6. postgres SQL编译过程

    PG启动首先完成主进程和后台进程的启动,启动时完成数据库文件的打开,共享内存的建立等.接着,所有SQL都会启动1个单独的进程处理SQL的执行过程. 新的进程首先是进行自身的初始化,最主要的是初始化内存 ...

  7. asp对中文编码及解码,Decode和Encode中文网址处理

    <%'-------------------------------------------------------------------------- '================== ...

  8. exists用在linq上

    SQL里面,有时候会用到exists或者not exists. select * from yb t1 where not exists(select 1 from yb t2 where trunc ...

  9. liberOJ #2033. 「SDOI2016」生成魔咒 后缀数组

    #2033. 「SDOI2016」生成魔咒     题目描述 魔咒串由许多魔咒字符组成,魔咒字符可以用数字表示.例如可以将魔咒字符 1 11.2 22 拼凑起来形成一个魔咒串 [1,2] [1, 2] ...

  10. SpringMVC中返回JSON时乱码的解决方案

    springMVC中返回JSON会出现乱码,解决如下: produces = "text/html;charset=UTF-8" @ResponseBody @RequestMap ...