http基础知识摘录
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基础知识摘录的更多相关文章
- Map/Reduce应用开发基础知识-摘录
Map/Reduce 这部分文档为用户将会面临的Map/Reduce框架中的各个环节提供了适当的细节.这应该会帮助用户更细粒度地去实现.配置和调优作业.然而,请注意每个类/接口的javadoc文档提供 ...
- CCNA基础知识摘录
cisco设备的启动要点: 1.检测硬件(保存在rom) 2.载入软件(IOS)(保存在Flash) 3.调入配置文件(密码,IP地址,路由协议都保存在此)(此文件保存在NVRAM) 0x2102:正 ...
- Quartz.NET基础知识概述
Quartz.NET是什么 由于我现在使用的Quartz.NET2.2版本,相对2.x变化不大,主要是相对于1.x更新了很多东西,如下基础知识摘录网络. Quartz.NET是一个开源的作业调度框架, ...
- Java基础知识【下】( 转载)
http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...
- Runtime系列(一)-- 基础知识
众所周知,Objective-C 是一种运行时语言.运行时怎么来体现的呢?比如一个对象的类型确定,或者对象的方法实现的绑定都是推迟到软件的运行时才能确定的.而运行时的诸多特性都是由Runtime 来实 ...
- [源码解析] 深度学习分布式训练框架 Horovod (1) --- 基础知识
[源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 目录 [源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 0x00 摘要 0x01 分布式并 ...
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- RabbitMQ基础知识
RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
随机推荐
- 多语言业务错误日志收集监控工具Sentry 安装与使用
Sentry 是一个实时事件日志记录和汇集的平台.其专注于错误监控以及提取一切事后处理所需信息而不依赖于麻烦的用户反馈. Sentry是一个日志平台, 它分为客户端和服务端,客户端(目前客户端有Pyt ...
- Spring实战Day7面向切面编程术语介绍
#### 面向切面编程 为什么需要切面? 有些功能需要在应用中的多个地方使用到,但是我们又不想在着每个地方都调用他们 切面术语 通知(advice):切面需要完成的工作 通知的类型(什么时间完成工作) ...
- (C++ STL)list的实现
#include <iostream> using namespace std; //採用迭代器和空间配置器所实现的双向链表的基本功能 template<class _Ty,clas ...
- 简谈Java的join()方法(转)
join()是Thread类的一个方法.根据jdk文档的定义: public final void join()throws InterruptedException: Waits for this ...
- MySQL Community Server 5.6和MySQL Installer 5.6
mysql community server是mysql社区版的数据库服务器.即数据库软件. mysql installer是mysql软件的安装管理器,能够通过installer来选择安装mysql ...
- 《Getting Started with WebRTC》第二章 WebRTC技术介绍
<Getting Started with WebRTC>第二章 WebRTC技术介绍 本章作WebRTC的技术介绍,主要讲下面的概念: . 怎样建立P2P的通信 . 有效的信 ...
- nginx-伤心的事
今天测试接口,总是出问题,测试了两天,整个流程就卡在最后一步. 每次采用curl,request等请求访问我的服务器都会返回403状态码,网上找了很多资料 有权限的,有静态文件的,然而很多都没有什么卵 ...
- UBUNTU安装PHP,即所谓得LAMP
Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组经常使用来搭建动态站点或者server的开源软件,本身都是各自独立的程序,可是由于常被放在一起使用.拥有了越来越 ...
- dsBlog_杂类
C++,MFC的综合类的博客. 1. http://www.cnblogs.com/mfryf/category/354043.html
- arm-linux交叉编译环境搭建
1.解压交叉编译工具链包 tar jxvf EABI-4.3.3_EmbedSky_20100610.tar.bz2 (笔者将交叉编译工具链包放在”/home ”目录下) 解压后会生成两个目录: [r ...