浅谈HTTP协议(上)

  今天讨论一下HTTP协议。一个做前端的,如果连HTTP协议都不了解,那实在是太不合格了。

  首先,什么是HTTP?Hyper Text Transfer Protocol(超文本传输协议),用在浏览器和Web服务器之间传输超文本网页。1991年,由IETF这个团体发布了第一个版本——HTTP/0.9,但它有严重的设计缺陷,只支持“GET”方法,不支持MIME类型,很快的就被HTTP/1.0取代。而1996年发布的这个HTTP/1.0也存活的并不长久,虽然是第一个正式发布的稳定版本。1999年,HTTP/1.1诞生,直到现在一直通用(虽然有HTTP/2.0出现了,但还处于研究阶段,并不完善)。

  HTTP/1.1一颁布,有趣了,它新增了三个举足轻重的功能。

  1、虚拟主机。以前网页少,一台服务器存一个站点也就无所谓了,可后来随着互联网的飞速发展,发现不行了,而虚拟主机可以让一个Web服务器中可以并存多个站点。

  2、持久连接。一次请求完成后,和服务器不马上断开连接,保持一会再断开。具体表现在Connection:keep-alive,后面会提到。

  3、代理连接。客户端可以通过代理服务器,间接访问目标服务器。

一、请求方法

  开始正题,先来讲讲8个请求方法。

  GET:表示客户端想获得服务器上的资源。(无请求主体)

  POST:表示客户端想传递数据给服务器。(有请求主体)

  PUT:表示客户端想放置文件到服务器。(有请求主体)(在restful架构下使用)

  DELETE:表示客户端想删除服务器上的指定文件。(无请求主体)(在restful架构下使用)

  HEAD:表示客户端想获得服务器上指定资源的响应头部,不要详细的内容。(无请求主体)

  CONNECT:连接测试。(无请求主体)

  TRACE:追踪请求路径。(无请求主体)

  OPTIONS:决定可以在服务器上执行哪些方法。(无请求主体)

二、请求消息

  请求消息就是客户端发给服务器的消息。分为四部分,请求起始行、请求头、CRLF、请求主体。

  1、请求起始行(Start line)

  首先是请求方法:就是上面说的8个。(后跟空格)

  然后是请求URL:请求资源路径。(后跟空格)

  最后是协议

  2、请求头(Headers)

  3、CRLF(回车换行)

  4、请求主体(Body)

  请求消息中,我们着重来讲讲请求头。它分为4种类型:

  请求消息专用头(部分):

  1、HOST:主机名(ex:XXX.com)

  2、Accept:告诉服务器自己可以响应的内容类型(ex:text/html)

  3、Origin:告诉服务器当前请求来自哪个域名(ex:http://127.0.0.1)

  4、Referer:告诉服务器当前请求来自哪个页面(ex:http://127.0.0.1/index.html)

  5、User-Agent:客户端在告诉服务器自己的类型(ex:Chrome 5.0)

  6、Accept-Encoding:浏览器在告诉服务器自己接收的响应数据编码类型(ex:gzip<压缩类型>)

  7、Accept-Language:告诉服务器自己可以接收的自然语言(ex:zh-CN<中文>)

  请求(响应)消息通用头(部分):

  1、Cache-Control:告诉对方如何缓存消息(ex:no-cache/max-age=0)

  2、Connnection:告诉对方启用持久连接(ex:keep-alive)

  3、Pragma:相当于Cache-Control,只不过是HTTP/1.0版本的(ex:no-cache)

  4、Date:消息的创建时间(ex:Sun,11 Dec 2016 00:09:09 GMT)

  请求主体描述头(部分):

  1、Content-Length:请求主体的长度

  2、Content-Type:请求主体的内容类型

    Content-Type的取值有三个:

    (1)、text/plain 普通文本,未经编码。

    (2)、application/x-www-form-urlencoding 经过编码后的数据。

    (3)、multipart/form-data 包含上传的文件数据。

时间: 2024-10-24 02:09:22

浅谈HTTP协议(上)的相关文章

【转】 浅谈Radius协议

浅谈Radius协议 2013-12-03 16:06 5791人阅读 评论(0) 收藏 举报  分类: Radius协议分析(6)  从事Radius协议开发有段时间了,小弟不怕才疏学浅,卖弄一下,从RADIUS协议谈谈对身份认证的认识,也总结一下自己. 一.RADIUS协议原理 RADIUS(Remote Authentication Dial In User Service) 用户远程拨入认证服务,它主要针对的远程登录类型有:SLIP.PPP.telnet和rlogin等.RADIUS协议

浅谈Linux协议和组成

根据自己学习Linux方面的知识,浅谈下linux的协议和组成,那首先了解下计算机的组成和功能: 计算机系统由硬件(hardware)系统和软件(software)系统两大部分组成: 1.硬件系统由主机和外部设备组成: 主机由中央处理器CPU(运算器ALU和控制器CU)和内存储器(ROM和RAM) 外部设置由输入设备和输出设备等其他设备组成 2.软件系统由系统软件和应用软件组成 接下来了解Linux的内核功能和作用:我们学习Linux的最重要就是内核(kernel),内核是什么.我用自己理解的方

从日常开发说起,浅谈HTTP协议是做什么的

引言 HTTP协议作为Web开发的基础一直被大多数人所熟知,不过相信有很多人只知其一不知其二.比如咱们经常用到的session会话机制是如何实现的,可能很多人都说不出来吧.其实session会话就是HTTP协议中的一个header属性cookie所支持的,在你了解了HTTP协议之后,其实这些都非常容易理解. 本文会尝试从各位的日常开发去解释一下HTTP到底是做什么的,文章篇幅有限,如果有什么本文没有提到的,各位请自行百度或者看书补脑.接下来,咱们先来看一个小A和小B的故事. 小故事:两个人的任务

浅谈HTTP协议(下)

下面来讲响应消息.响应消息也分为响应起始行.响应头部.CRLF.响应主体. 响应起始行包括协议版本.响应状态码.原因短句.这里的重点就是响应状态码,它一共分为5类,状态码准确的说是一个三位数. 1xx:表示这段信息的作用主要是提示. 2xx:成功的响应. 3xx:需要客户端重定向. 4xx:客户端请求错误. 5xx:服务器端运行错误. 下面举一些常见的例子: 100:Continue,服务器收到了请求的初始部分,请客户端继续. 101:Switching Protocols,切换协议. 200:

从日常开发说起,浅谈HTTP协议是做什么的。

引言 HTTP协议作为Web开发的基础一直被大多数人所熟知,不过相信有很多人只知其一不知其二.比如咱们经常用到的session会话机制是如何实现的,可能很多人都说不出来吧.其实session会话就是HTTP协议中的一个header属性cookie所支持的,在你了解了HTTP协议之后,其实这些都非常容易理解. 本文会尝试从各位的日常开发去解释一下HTTP到底是做什么的,文章篇幅有限,如果有什么本文没有提到的,各位请自行百度或者看书补脑.接下来,咱们先来看一个小A和小B的故事. 小故事:两个人的任务

浅谈Http协议

一.Http请求报文:     请求报文介绍一个HTTP请求报文由请求行(request line).请求头部(header).空行和请求体4个部分组成,图-1给出了请求报文的一般格式.              图-1: http请求报文的一般格式 1.请求行    请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.它的一般格式如   下:        一般格式:Method Request-URI HTTP-Version CRLF 具体请求的格式:POS

浅谈TCP协议(建立与断开连接)

TCP是面向连接的,可靠的进程到进程通信的协议.TCP提供全双工服务,即数据可在同一时间双向传输,每一个TCP都有发送缓存,用来临时存储数据.TCP将若干个字节构成一个分组,成为报文段(segment)TCP报文段封装在IP数据报中:TCP报文段的首部格式如图:首部长度为20--60字节,源端口号:他是16位字段,为发送方进程对应的端口号.目标端口号:他是16位字段,对应的是接收端的进程,接收端收到数据段后,根据这个端口号来确定把数据送给那个应用程序的进程.序号:当TCP从进程接收数据字节时,就

浅谈ARP协议以及应用

0. 前言 本章主要简单的介绍ARP的协议格式,主机如何发送和处理ARP报文,以及免费ARP. 1. ARP协议原理 ARP,全称Address Resolution Protocol,地址解析协议,在网络中,有IP地址和MAC地址,在链路层发送报文时使用的是MAC硬件地址,这时需要将IP地址转换为48bit MAC地址,这就会使用到ARP协议. 如下,有两台主机,239主机ping向238主机.当本地ARP缓存中没有238主机对应的项时,会发起ARP广播请求,之后使用arp命令查看ARP缓存,

浅谈java图片上传之剪切

对于一个网站来说,图片显示都是有一定的宽高比的,而客户上传的图片大多未经过剪切,故上传以后对图片进行一定的剪切是非常必要的. 如此,我们应当剪一个类来完成这项工作. public class ImageHelper{ ///图片宽高比,默认1.333  double _webWidth=1.333; /// <summary> ///网站显示图片的 宽/高比 /// </summary> public double WebWidth { get { return _webWidth