前一段时间看了有关这个协议的相关文档,对这个协议有了新的理解,这里整理一下。

http是应用层面向对象的协议。

它有以下几个特点:

1、  支持客户服务器模式(这是废话,不支持这个模式怎么工作)

2、  灵活(传什么都行,传的类型由content-type标记)

3、  简单、快速(当客户端有求于服务器的时候,只需注明请求方法和路径,方法有:get,post,head。后面在讲请求报文的时候会举例说明。每种不同的方法都意味着客户和服务器连接的不同方式)

4、  无连接(每次只处理一个请求,收到请求,完成响应,断开连接,下一位……可以节省不少时间)

5、  无状态(没有记忆效应,后面数据要用到前面数据的话,要从头开始。有利有弊:如果是后面要用前面的数据,传送的数据量要加大不少;但是不是这种情况的话,应答就很快)

关于请求和应答:

这是这个协议的具体体现,我们看看它到底是怎样工作的。

首先客户端发出请求,格式如下:

请求行

请求报头

请求正文

请求行:

方法

URI

协议版本

方法这里举例说明:

get:输入网址,向服务器通过get要资源GET /form.html HTTP/1.1 (CRLF)

post:请求服务器接受附在请求后面的数据,例如表单POST /reg.jsp HTTP/ (CRLF)

head:和get相似,主要用于检测是否能访问,以及检查更新

然后是服务器的响应

状态行

响应报头

响应正文

状态行:

http-version

Status-code

Reason-Phrase

也就是:   HTTP/1.1 200 OK(CRLF)

http协议版本

响应代码

响应代码的文本描述

关于响应代码和文本描述:

200 OK //正常响应

400 Bad Request //请求的语法不被服务器接受

401 Unauthorized //未授权的请求,要和报头域中的其他字段联合使用

403 Forbidden //服务器接收到请求,但是拒绝服务

404 Not Found //请求的页面找不到

500 Internal Server Error //服务器发生故障

503 Server Unavailable //这一会不行,待会再试试

下面是两个报头:

请求报头:(下面是一个个请求报头域组成的请求报头)

Accept

Accept-charset

Accept-encoding

Accept-language

Authorization

Host

User-agent

Authorization:接收到401的消息之后,再次发送验证的时候要包含这个域。

不再一一赘述各种域的功能,我们看一个例子:

GET /form.html HTTP/1.1 (CRLF)

Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms

-excel,application/vnd.ms-powerpoint,application/msword,*/*
(CRLF) (接受哪些类型的消息)

Accept-Language:zh-cn (CRLF) (指定一个自然语言,缺省什么都可以)

Accept-Encoding:gzip,deflate (CRLF) (可接受的内容编码,缺省什么都可以)

If-Modified-Since:Wed,05 Jan 2007 11:21:25
GMT (CRLF)

If-None-Match:W/"80b1a4c018f3c41:8317"
(CRLF)

User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows
NT 5.0) (CRLF) (告知自己的操作系统、版本号)

Host:www.guet.edu.cn (CRLF)(目的主机,端口号)

Connection:Keep-Alive (CRLF)

(CRLF)

响应报头:(同理,一个个的响应报头域)

Location

Server

WWW-Authenticate

Location:重定向接受者到一个新的位置。

Server:服务器用来解决请求所用的软件信息Server˖Apache-Coyote/1.1和请求报头的

User-agent相对应。

WWW-Authenticate:包含在401 Unauthorized响应信息中。客户接收到401之后,再发送Authorization请求报头域请求验证,得到的响应就包含这个域。

WWW-Authenticate:Basic realm="Basic Auth Test!"基本验证。

到此,已经将http相关的报文、各个域的功能简单的介绍完了。关于HTTP的其他补充,有兴趣再整理。

欢迎大家指正,共同进步(⊙o⊙)。

参考资料:《HTTP详解》

方法:get、post、put、delete,对应:查、改、增、删。

补充:关于get和post的不同点:

1、get是获取数据的请求,post是提交数据的请求

2、get方法将表单中的数据放在请求报头里面,不安全;post是把表单数据放在实体数据中,用户看不到,相对安全

  GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?                  name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

也就是说:get把数据放在URL之后,接一个?,字母数字原样发送,空格是+,中文字符换成加密字符就是%字母什么的。

  POST把提交的数据则放置在是HTTP包的包体中。

所谓安全又两个意义上的解释1、get不能对服务器上面的数据进行更改,对服务器来说是安全的。2、get把用户名密码全放到请求URL上面,对用户来说是不安全的。

3、get传输的数据量小,多用于请求获取和查询;post传输的数据量大,多用于更新

HTTP基础(整理)的更多相关文章

  1. 机器学习 —— 基础整理(六)线性判别函数:感知器、松弛算法、Ho-Kashyap算法

    这篇总结继续复习分类问题.本文简单整理了以下内容: (一)线性判别函数与广义线性判别函数 (二)感知器 (三)松弛算法 (四)Ho-Kashyap算法 闲话:本篇是本系列[机器学习基础整理]在time ...

  2. MySQL基础整理(一)之SQL基础(未完成)

    大家好,我是浅墨竹染,以下是MySQL基础整理(一)之SQL基础 1.SQL简介 SQL(Structure Query Language)是一种结构化查询语言,是使用关系模型的数据库应用语言. 2. ...

  3. nutch的一些基础整理

    nutch的一些基础整理 原创 2015年03月22日 18:18:01 标签: nutch / 240 编辑 删除 一.关于配置文件: nutch-default.xml:爬虫的默认配置.在${nu ...

  4. [转帖]nginx基础整理

    nginx基础整理 https://www.cnblogs.com/guigujun/p/6588545.html 目录结构如下: Nginx基础知识 Nginx HTTP服务器的特色及优点 Ngin ...

  5. JAVA基础整理-集合篇(一)

    集合作为JAVA的基础知识,本来感觉自己理解的很清楚了,但是在最近的一次面试中还是答得不尽如人意!再次做一下整理,以便加深理解以及随时查阅. 首先,java.util包中三个重要的接口及特点:List ...

  6. 关于JAVA面向对象基础整理以及个人的理解(适合初学者阅读)

    JAVA的基础语法等都跟C有很大的相似之处,所以这里就不多啰嗦了.直接从数组开始. 数组: 1.声明 int [] a; 在声明的过程中,并没有分配空间给数组.我们可以在声明的同时,用new来分配相应 ...

  7. C#基础整理

    元旦整理书架发现一本小册子——<C#精髓>中国出版社2001年出版的,粗略翻了下关于C#的知识点挺全的虽然内容谈得很浅也有很多过时的内容(话说这本书是我在旧书店花5块钱淘的)我保留原有章节 ...

  8. HTML5游戏开发技术基础整理

    随着HTML5标准终于敲定.HTML5将有望成为游戏开发领域的的热门平台. HTML5游戏能够执行于包含iPhone系列和iPad系列在内的计算机.智能手机以及平板电脑上,是眼下跨平台应用开发的最佳实 ...

  9. js数组基础整理

    首页: 主要整理了一下数组中常用的一些基础知识,代码都是自己手敲,有不对的地方希望能指出,目前只有4篇,后续会不断的增加这一板块. 由于少于100字不能发所以把一些最基本的创建数组也写上. // 创建 ...

  10. 机器学习 —— 基础整理(四)特征提取之线性方法:主成分分析PCA、独立成分分析ICA、线性判别分析LDA

    本文简单整理了以下内容: (一)维数灾难 (二)特征提取--线性方法 1. 主成分分析PCA 2. 独立成分分析ICA 3. 线性判别分析LDA (一)维数灾难(Curse of dimensiona ...

随机推荐

  1. [atcoder002E] Candy Piles [博弈论]

    题面: 传送门 思路: 每一堆糖排成一列,所有列横着放,形成一个阶梯型 两个决策相当于左边一列去掉和最下面一行去掉 那么这个模型可以转化为同样形状的网格图,向左上方走,走到边界的赢· 然后一波数学推导 ...

  2. vuemock数据

    http://www.jianshu.com/p/ccd53488a61b dev.server.js 61 行 app.use('/mock',express.static('./mock'))

  3. javascript 实现 接口编程

    // Constructor. var Interface = function (name, methods) { if (arguments.length != 2) { throw new Er ...

  4. MongoDB的使用[转]

    http://www.cnblogs.com/TankMa/archive/2011/06/08/2074947.html

  5. anaconda 安装

    1. 安装: 参考博客:https://blog.csdn.net/qq_36851515/article/details/82956150 2. 更新包: 更新失败:conda httperror ...

  6. 常用公共DNS服务器地址

    DNS,全称Domain Name System,即域名解析系统,帮助用户在互联网上寻找路径,它在互联网的作用是把域名转换成为网络可以识别的IP地址.目前国内电信运营商通过使用DNS劫持和DNS污染的 ...

  7. ASP.NET MVC 实现 AJAX 跨域请求

    ASP.NET MVC 实现AJAX跨域请求的两种方法 和大家分享下Ajax 跨域的经验,之前也找了好多资料,但是都不行,后来看到个可行的修改了并测试下 果然OK了   希望对大家有所帮助! 通常发送 ...

  8. koa2 从入门到进阶之路 (二)

    之前的文章我们已经能够在本地启动一个简单的项目,本章我们来看一下 koa 路由,get 传值,动态路由. 一.Koa 路由 路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP ...

  9. CSS定位与布局:浮动

    浮动的特点   浮动(float)属性提出的作用是实现文字的环绕效果,一个元素浮动后,会脱离普通流.主要的特点如下: 浮动的元素会向左或者向右移动直到它的外边缘接触容器框(containing blo ...

  10. JAVA基础之Set接口

    个人理解: Set接口是Collection接口的子类,其继承了所有方法,HashSet集合则实现了Set接口,其内部存储数据时依靠哈希表,一个类似数组和链表的结合体.设置空集合时,存在默认的容量和加 ...