HTTP基础

HTTP简介

HTTP(HyperText Transfer Protocol),即超文本传输协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。通过HTTP协议,服务器端可以将用户请求的资源(包括图片,文本,多媒体文件等)以一定的格式显示在浏览器上。

HTTP协议版本

http0.9

只接受GET一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持POST方法,因此客户端无法向服务器传递太多信息。已不再使用。

http/1.0

引入了MIME技术,使得能够支持多媒体功能

引入keep-alive

至今仍被广泛采用,特别是在代理服务器中。

http/1.1

持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。

HTTP/1.1相较于HTTP/1.0协议的区别主要体现在:

缓存处理

带宽优化及网络连接的使用

错误通知的管理

消息在网络中的发送

互联网地址的维护

安全性及完整性

统一资源标识符URI

URI是uniform resource identifier的缩写,统一资源标识符,用来唯一的标识一个资源。URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。我们一般都使用URL来定位所请求的资源。

URL的通用语法:

<scheme>://<user>:<password>@<host>:<port>/<path>:<params>?<query>#<frag>

用字符?将其与URL的其余部分分隔开来.例如?key1=value1&key2=value2 片段制定了URL资源中的某个章节

例如:ftp://prep.ai.mit.edu/pub/gnu;type=d

http://www.joes-hardware.com/inventory-check.cgi?item=12345

HTTP的一次响应过程

1)建立连接

2)接收请求

3)处理请求

4)访问资源

5)构建响应报文

6)发送响应

7)记录日志

Cookie

这个东西由网景公司发明,用来辨别用户身份,存储在客户端中,由浏览器来维护。由于HTTP协议是无状态的,即每一次的资源请求都是独立的,服务器不知道客户端上一次的请求做了什么,这阻碍了交互式Web应用程序的实现,然后cookie就出现了。

当用户第一次访问网站时,服务器进程会为用户生成一个唯一的标识信息,并且将这个标识信息添加到响应报文的首部予以响应(),客户端收到这个Cookie信息后,就把这个Cookie信息保存至浏览器进程能够访问到的缓存目录下,并把它保存为一个小文件,只要浏览器不关闭,访问同一个域名下的每一个链接时,浏览器在发送请求报文时,在请求报文中置一个首部,这个首部就是Cookie或者Cookie2。服务器端收到这个Cookie后,就可以识别客户端。

Http的连接管理

对于Http的连接管理,涉及到很多概念,这里简单解释两种,其一:并行连接;其二:持久连接。

并行连接:一个完整的HTML页面包括很多个资源,由各种格式的图片,js文件,css样式文件,文本信息....,每一个资源的请求都是独立的,如果一个一个加载,会显得非常慢;所以,Http支持并行的加载,即同时加载很多个资源,这样给用户的体验是,整个页面都在加载,显得很“快”(这是个错觉:)),并行连接会受到带宽的限制,因为如果带宽一定,会出现多个连接争夺带宽的情况。

持久连接:用户在短时间内请求多个同一个站点的资源,例如请求一个完整的HTML页面,里面包括了很多个资源,如果没一个资源的请求都需要3次握手建立连接,资源收到之后4次断开,这样响应的苏杜辉非常慢。因此,HTTP/1.1(及HTTP/1.0)允许HTTP设备在事务处理结束之后将TCP连接保持在打开的状态,以便下一个HTTP请求重用现在的连接,直到客户端或服务器端决定将其关闭为止。

实现持久连接的常见方式就是keep-alive(在HTTP/1.0开始出现),即在Request Header中添加一个名为Connection:Keep-Alive的首选项,服务器端在应答的时候如果支持,则在首选项中也添加一个名为Connection:Keep-Alive的首部,如果没有,客户端则认为服务器端不支持持久连接。

HTTP请求报文和相应报文

一个HTTP报文由3部分组成,分别是:

  (1)、起始行(start line)

  (2)、首部(header)

  (3)、主体(body)

HTTP请求报文格式

<method> <request-URL> <version>
<headers>

<entity-body>

<method>             #请求方法,希望对服务器端的资源执行的动作

<request-URL>     #请求的资源的URL

<version>              #报文所使用的HTTP版本,格式HTTP/<major>.<minor>,通常都是HTTP/1.1

<headers>             #请求首部,下面是各种请求首部

<entity-body>       #实体,一般是数据块,请求的报文一般实体为空

1)请求行

1.1方法

get          #用于请求服务器发送某个资源,为安全方法,该方法对应的主体为空

head       #与GET方法类似,但服务器在响应中只返回首部,不会返回实体的主体部分. 安全方法,主体为空

#使用HEAD可以做到

#在不获取资源的情况下了解资源的情况

#通过查看响应中的状态码,看看某个对象是否存在

#通过查看首部,测试资源是否被修改了.

put         #PUT方法往服务器写入文档,该方法的语义就是用让服务器用主体部分来创建或替代一个由所请

#求的URL命名的新文档.

post        #向服务器发送数据,常用于POST HTML的表单数据

trace       #

options   #

delete     #

lock         #

mkcol      #

copy        #

move       #

HTTP响应报文格式

<version> <status> <reason-phrase>
<headers>

<entity-body>

<version>

<status>

<reason-phrase>

<headers>

<entity-body>

参考:http://lujun9972.github.io/linux/http%E5%9F%BA%E7%A1%80/

http://blog.csdn.net/anger_coder/article/details/12794189

时间: 2025-01-12 10:54:55

HTTP基础的相关文章

java web 开发三剑客 -------电子书

Internet,人们通常称为因特网,是当今世界上覆盖面最大和应用最广泛的网络.根据英语构词法,Internet是Inter + net,Inter-作为前缀在英语中表示“在一起,交互”,由此可知Internet的目的是让各个net交互.所以,Internet实质上是将世界上各个国家.各个网络运营商的多个网络相互连接构成的一个全球范围内的统一网,使各个网络之间能够相互到达.各个国家和运营商构建网络采用的底层技术和实现可能各不相同,但只要采用统一的上层协议(TCP/IP)就可以通过Internet

Java注解(1)-注解基础

注解(Annotation)是在JAVA5中开始引入的,它为在代码中添加信息提供了一种新的方式.注解在一定程度上把元数据与源代码文件结合在一起,正如许多成熟的框架(Spring)所做的那样.那么,注解到底可以做什么呢? 1.注解的作用. 提供用来完整地描述程序所需要的信息,如编译期校验程序信息. 生成描述符文件,或生成新类的定义. 减轻编写"样板"代码(配置文件)的负担,可以使用注解自动生成. 更加干净易读的代码. 编译期类型检查. 2.Java提供的注解 Java5内置了一些原生的注

MySQL数据库基础知识

day02 MySQL数据库基础知识 一.基础知识概述: 基础决定你这门课程的学习成败!只有学习好这些基础知识以后,你才能真正的运用自如.才能够对数据库有更深入的了解,道路才会越走越远. 二.基础知识: 1.数据库(database):数据库就好比是一个物理的文档柜,一个容器,把我们整理好的数据表等等归纳起来. 创建数据库命令:        create database 数据库名; 2.查看数据库         show databases; 3.打开指定的数据库         use 

【Linux系列】【基础版】第四章 Shell基础之正则表达式

4. Shell基础之正则表达式     4.1 正则就是一串有规律的字符串         4.1 grep              4.1.1 格式: grep [-cinrvABC] 'word' filename             4.1.2 -c //count,表示行数             4.1.3 -i //不区分大小写             4.1.4 -n  //显示行号             4.1.5 -r  //遍历所有子目录             4

NumPy基础:数组和失量计算

NumPy : Numerical Python,是高性能科学计算和数据分析的基础包. 部分功能: ndarray:一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组: 用于对整组数据进行快速运算的标准数学函数(无需编写循环): 用于读写磁盘数据的工具以及用于操作内存映射文件的工具: 线性代数.随机数生成以及傅里叶变换功能: 用于集成C.C++.Fortran等语言编写的代码工具: 大部分数据分析应用关注的功能: 用于

css基础

css绝对是一个能够写到爆炸的东西,so,机智的小北方才不会写各种css样式具体的效果,相比之下更推荐大家记一些常用的key,至于效果,每次用的时候百度下就可以了, css的作用是对符合条件的标签进行渲染,那么首先就要匹配到对应标签啦,我萌有三种基础的模式来匹配希望改变样式的标签 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8">

零基础的人该怎么学习JAVA

对于JAVA有所兴趣但又是零基础的人,该如何学习JAVA呢?对于想要学习开发技术的学子来说找到一个合适自己的培训机构是非常难的事情,在选择的过程中总是 因为这样或那样的问题让你犹豫不决,阻碍你前进的步伐,今天就让小编为您推荐培训机构新起之秀--乐橙谷Java培训机构,助力你成就好未来. 选择java培训就到乐橙谷 北京有什么好的Java培训机构?来乐橙谷北京学Java,零基础走起,乐橙谷Java基础班授课老师经验非常丰富,课程内容安排合理,适合于有一点点Java基础甚至一点都不会Java的同学学

linux+jmeter+python基础+抓包拦截

LINUX 一 配置jdk 环境 *需要获取root权限,或者切换为root用户 1.windows下载好,去 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 官方网站下载jdk(linux相应版本) 2.在usr目录下创建java路径文件夹 [root bin]cd /usr mkdir java 3.将jdk-8u60-linux-x64.tar.gz放到刚才创建的文件夹下

python基础之条件循环语句

前两篇说的是数据类型和数据运算,本篇来讲讲条件语句和循环语句. 0x00. 条件语句 条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: Python interprets non-zero values as True. None and 0 are interpreted as False. Python 判断非0的值为 True, 而None和0被认为是 False.注意这里的True和False首字母大写,Py

【转】Java基础知识总结

写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言代码把思路体现出来. 学习新技术的四点: 1,该技术是什么? 2,该技术有什么特点(使用注意): 3,该技术怎么使用.demo 4,该技术什么时候用?test. ------------------------------------------------------------------------------------