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. VMware View 要求操作句柄的状态错误

    win10系统安装的VMware-viewclient,版本是

  2. noip2013华容道

    题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 ...

  3. Java下接口interface前面要不要加I

    说明:加I和不加I都可以,看需要,没有强制要求. 在Java中更多是提倡不加I的,可以看下JDK的源码,都是不加I的. 微软C#是规定要加I,这也是影响从而导致有这个话题的原因. Java中特定不直接 ...

  4. Effective C++ Item 47 请使用 traits classes 表现类型信息

    本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:Traits classes 使得"类型相关信息"在编译期可用.它 ...

  5. Python--学习过程

    基础篇 Python基础篇 Python的数据类型 作业总结

  6. NYOJ 1067 Compress String(区间dp)

    Compress String 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描写叙述 One day,a beautiful girl ask LYH to help he ...

  7. 未来 5 年八大热门 IT 职业

    近日.外媒梳理了未来5年内.也是就是2020年仍将受到热捧的八大科技领域,为IT从业者怎样做好长远规划.有针对性地培养自身技能.又不偏离热门岗位提供了參考. (图片来自网易) 2020年将热门的8大I ...

  8. saltstack安装配置(master&minion)

    操作系统centos6.3,centos6.4,windows server2008R2,windows7. 文中的下载链接可能会随着saltstack官网上版本的更新,而出现变动或错误,请以你需要安 ...

  9. 标准C头文件

    ISO C标准定义的头文件: POSIX标准定义的必须的头文件: POSIX标准定义的XSI可选头文件: POSIX标准定义的可选头文件:

  10. log开启与屏蔽的一种调式方式

    #ifndef _LOGGING_H #define _LOGGING_H #define deg printf #ifdef ENABLE_TRACING #define ENTER() do { ...