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

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. 【SPOJ1297】Palindrome (SA+RMQ)

    求最长回文串.把原串翻转后,加在原串后面,中间插入一个辨别字符.然后求SA,Height.然后枚举每个字母作为回文串中心,分长度为奇数和偶数去讨论:奇数求 suffix(i)和suffix(n-i+1 ...

  2. 论文笔记《Fully Convolutional Networks for Semantic Segmentation》

    一.Abstract 提出了一种end-to-end的做semantic segmentation的方法,也就是FCN,是我个人觉得非常厉害的一个方法. 二.亮点 1.提出了全卷积网络的概念,将Ale ...

  3. codevs1690 开关灯

    1690 开关灯 USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description YYX家门前的街上有N( ...

  4. springboot使用restTemplate post提交值 restTemplate post值

      post提交有 FormData和Payload  两种形式: 第一种是formdata形式,在header参数里可以直接看到  payload则封装成json格式post过去,获取以后需要再解析 ...

  5. Python之面向对象:面向对象基础

    一.面向过程.面向对象对比 1.面向过程 根据业务逻辑从上到下写垒代码 2.函数式思想 将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 3.面向对象 对函数进行分类和封装 1.2.3一步 ...

  6. 当时用vuex的时候,使用...对象展开扩展符报错的解决办法

    出现这种问题的主要原因是当前的babel不支持...对象展开扩展符,只需要安装一个插件然后再在.babelrc当中进行下配置就好了 npm i babel-plugin-transform-objec ...

  7. 【转】手摸手,带你用vue撸后台 系列三(实战篇)

    前言 在前面两篇文章中已经把基础工作环境构建完成,也已经把后台核心的登录和权限完成了,现在手摸手,一起进入实操. Element 去年十月份开始用vue做管理后台的时候毫不犹豫的就选择了Elemen, ...

  8. 【04】【转】Nodejs学习笔记(四)--- 与MySQL交互(felixge/node-mysql)

    目录 简介和安装 测试MySQL 认识一下Connection Options MYSQL CURD 插入 更新 查询 删除 Nodejs 调用带out参数的存储过程,并得到out参数返回值 结束数据 ...

  9. [AGC004E] Salvage Robots (DP)

    Description 蛤蟆国的领土我们可以抽象为H*W的笼子,在这片蛤土上,有若干个机器人和一个出口,其余都是空地,每次蛤蟆会要求让所有的机器人向某个方向移动一步,当机器人移动到出口时会被蛤蟆活摘出 ...

  10. Ubuntu备份设置与恢复

    打开家目录,按CTRL+H,显示所有隐藏文件,把所有文件名前面带点的文件(比如 .config).目录备份即可下次有问题就覆盖它