今天讨论一下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 包含上传的文件数据。

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

  1. 【转】 浅谈Radius协议

    浅谈Radius协议 2013-12-03 16:06 5791人阅读 评论(0) 收藏 举报  分类: Radius协议分析(6)  从事Radius协议开发有段时间了,小弟不怕才疏学浅,卖弄一下, ...

  2. 转:浅谈Radius协议 -来自CSDN:http://blog.csdn.net/wangpengqi/article/details/17097221

    浅谈Radius协议 2013-12-03 16:06 5791人阅读 评论(0) 收藏 举报  分类: Radius协议分析(6)  从事Radius协议开发有段时间了,小弟不怕才疏学浅,卖弄一下, ...

  3. 浅谈HTTP协议(下)

    下面来讲响应消息.响应消息也分为响应起始行.响应头部.CRLF.响应主体. 响应起始行包括协议版本.响应状态码.原因短句.这里的重点就是响应状态码,它一共分为5类,状态码准确的说是一个三位数. 1xx ...

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

    引言 HTTP协议作为Web开发的基础一直被大多数人所熟知,不过相信有很多人只知其一不知其二.比如咱们经常用到的session会话机制是如何实现的,可能很多人都说不出来吧.其实session会话就是H ...

  5. 通过Java代码浅谈HTTP协议

    最近刚看了http协议,想写点东西加深一下理解,如果哪儿写错了,请指正. 1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(W ...

  6. 浅谈HTTP协议

    1 HTTP概念 把握三个点: 1 HTTP协议(超文本传输协议) HTTP是一个基于TCP/IP通信协议来传递数据,默认端口80 2 HTTP是无连接(限制每次连接只处理一个请求),无状态的(对于事 ...

  7. 浅谈HTTP协议与TCP协议

    HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送议. 主要特点 ...

  8. 浅谈Http协议是怎么回事?

    老实说关于http协议这个概念,见到最多的还是各类招聘信息.在平时的工作中,除了了解一些请求,响应,请求头这些概念外,对于http协议也没有太多的关心.因为貌似对平时的工作没有什么影响,所以在写这篇关 ...

  9. 浅谈http协议六种请求方法,get、head、put、delete、post、options区别

    标准Http协议支持六种请求方法,即: 1.GET 2.POST 3.PUT 4.Delete 5.HEAD 6.Options 但其实我们大部分情况下只用到了GET和POST.如果想设计一个符合RE ...

随机推荐

  1. ExtJs 使用点滴 十三 在FormPanel 嵌入按钮

    Ext.onReady(function () { //初始化标签中的Ext:Qtip属性. Ext.QuickTips.init(); Ext.form.Field.prototype.msgTar ...

  2. PHP输出当前进程所有变量 / 常量 / 模块 / 函数 / 类

    <?php /* 不知道怎么打印某个函数的参数和相关分类类型的所有函数 以下函数如果没有参数,返回的都是一个数组get_defined_functions() 获取所有已经定义的函数get_de ...

  3. Git add 常见用法

        Git add   git add [参数]  [--] <路径> //作用就是将我们需要提交的代码从工作区添加到暂存区,就是告诉git系统,我们要提交哪些文件,之后就可以使用gi ...

  4. [原创]java WEB学习笔记92:Hibernate学习之路-- -QBC 检索和本地 SQL 检索:基本的QBC 查询,带 AND 和 OR 的QBC,统计查询,排序,分页

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. IO/ACM中来自浮点数的陷阱(收集向)

    OI/ACM中经常要用到小数来解决问题(概率.计算几何等),但是小数在计算机中的存储方式是浮点数而不是我们在作数学运算中的数,有精度的限制. 以下以GUN C++为准,其他语言(或编译器)也差不了多少 ...

  6. android 多点

    引用:http://blog.163.com/fenglang_2006/blog/static/13366231820108205274325/ 第一章摘要 在Linux内核支持的基础上,Andro ...

  7. 关于Beta分布、二项分布与Dirichlet分布、多项分布的关系

    在机器学习领域中,概率模型是一个常用的利器.用它来对问题进行建模,有几点好处:1)当给定参数分布的假设空间后,可以通过很严格的数学推导,得到模型的似然分布,这样模型可以有很好的概率解释:2)可以利用现 ...

  8. PHP排序函数

    /** * 对查询结果集进行排序 * http://www.onethink.cn * /Application/Common/Common/function.php * * @access publ ...

  9. 双向循环链表的Java版本实现

    1.单项循环列表 单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环.和单链表相比,循环单链表的长处是从链尾到链 ...

  10. Account Team使用说明

    Account  Team Account Team 以下简称客户小组. 背景介绍 帐户是与您的业务相关的公司和组织,每个帐户都存储了商家名称.地址和电话号码等信息.可以针对每个帐户存储相关的联系人. ...