【深入HTTP协议】
"HTTP是(Hyper Text Transfer Protocol)超文本传输协议的缩写.
HTTP的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC.
RFC 1945定义了HTTP/1.0版本,其中最著名的就是RFC 2616,RFC 2616定义了今天普遍使用一个版本——HTTP 1.1
------->
HTTP协议(Hyper Text Transfer Protocol)超文本传输协议是用于从WWW服务器传输超文本到本地浏览器的传送协议.
它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等.
@
HTTP响应模型
·
HTTP协议永远都是客户端发起请求,服务器回送响应,如下图:
这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端.
HTTP工作流程
·
一次HTTP操作称为一个事务,其工作过程可分为四步:
- 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始.
- 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号.
后边是MIME(声明文本信息)信息包括请求修饰符、客户机信息和可能的内容.- 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码.
后边是MIME信息包括服务器信息、实体信息和可能的内容.- 客户端接收服务器所返回的信息并通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接.
·
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,由显示屏输出.
对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了.
***
HTTP 请求
HTTP请求方式大全
序号 方法 描述 1 GET 请求指定的页面信息,并返回实体主体。 2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。 5 DELETE 请求服务器删除指定的页面。 6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 7 OPTIONS 允许客户端查看服务器的性能。 8 TRACE 回显服务器收到的请求,主要用于测试或诊断。 9 PATCH 实体中包含一个表,表中说明与该URI所表示的原内容的区别。 10 MOVE 请求服务器将指定的页面移至另一个网络地址。 11 COPY 请求服务器将指定的页面拷贝至另一个网络地址。 12 LINK 请求服务器建立链接关系。 13 UNLINK 断开链接关系。 14 WRAPPED 允许客户端发送经过封装的请求。 15 Extension-mothed 在不改动协议的前提下,可增加另外的方法。
HTTP请求包括的内容
·
客户端连上服务器后,向服务器请求某个Web资源,称之为客户端向服务器发送了一个HTTP请求.
·
一个完整的HTTP请求包括的内容:一个请求行、若干消息头、实体内容.
·
如下图:
HTTP请求细节——请求头
·
请求行中的GET称之为请求方式,请求方式有:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT,常用的有: GET、 POST
·
用户如果没有设置,默认情况下浏览器向服务器发送的都是GET请求,例如在浏览器直接输地址访问,点超链接访问等都是GET,用户如想把请求方式改为POST,可通过更改表单的提交方式实现.
·
不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上:如果请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:GET /mail/1.html?name=abc&password=xyz HTTP/1.1
·
GET请求的特点:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K.
·
如果请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,Post方式的特点:传送的数据量无限制.
HTTP请求细节——消息头
·
Accept
声明浏览器支持的数据类型
·
Accept-Charset
声明浏览器支持的字符集
·
Accept-Encoding
声明浏览器支持的压缩格式
·
Accept-Language
声明浏览器的语言环境
·
Host
声明浏览器要访问那台主机
·
If-Modified-since
声明浏览器缓存数据的时间
·
Referer
声明客户机是哪个页面来的,用于防盗链
·
Connection
浏览器通过这个头告诉服务器,请求完后是断开链接还是保持链接
·
X-Requested-with: XMLHttpRequest
代表通过ajax方式进行访问
·
User-Agent
请求载体的身份标识,浏览器标识
·
以上为HTTP请求中的常用消息头,如下图:
***
HTTP 响应
HTTP响应包括的内容
·
HTTP响应代表服务器向客户端回送的数据.
它包括:一个状态行、若干消息头、以及实体内容.
HTTP响应细节——状态行
·
状态行格式:
HTTP/1.1 200 OKHTTP版本号 状态码 原因叙述<CRLF>
·
状态码用于表示服务器对请求的处理结果.
状态码是一个三位的十进制数,响应状态码分为5类.
·
常见的HTTP状态码
·
100 客户端应继续发送请求
客户端应当继续发送请求,客户端应当继续发送请求的剩余部分.
或如果请求已经完成,忽略这个响应.
·
101 转换协议
在发送完这个响应的最后空行后,服务器将会切换到在Upgrade消息头中定义的那些协议.
只有在切换到新的协议更有好处的时候才应该采取类似的措施.
·
102 继续处理
由WebDAV(RFC 2518)扩展的状态码,代表请求将被继续执行.
·
200 请求成功
表示这条请求执行成功了.
处理方式:获得响应的内容,进行处理.
·
201 请求完成
表示这条请求执行完成了
结果是创建了新资源,新创建的资源的URL可在响应的实体中得到.
处理方式在爬虫中不会遇到.
·
202 请求被接受
请求被接受了,但处理尚未完成.
处理方式:阻塞等待.
·
204 服务器以实现请求
服务器已经实现了请求,但未返回新的信息.
如果客户端是用户代理,则无需为此更新自身的文档视图.
处理方式:丢弃.
·
300
该状态码不被HTTP/1.0的应用程序直接使用,只是作为3XX类型回应的默认解释,存在多个可用的被请求资源.
处理方式:若程序中能够处理,则进一步处理;若程序中不能够处理,则丢弃.
·
301 永久重定向
请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源.
处理方式:重定向到分配的URL,永久重定向.
·
302 临时重定向
请求到资源在一个不同的URL处临时保存.
处理方式:重定向到临时的URL,临时重定向.
·
304 请求的资源未更新
请求的资源未更新.
使用的是本地缓存文件(不会发送请求).
处理方式:丢弃.
·
400 非法请求
处理方式:丢弃.
·
401 未授权
处理方式:丢弃.
·
403 禁止
处理方式:丢弃.
·
404 没有找到
处理方式:丢弃.
·
500 服务器内部错误
服务器遇到了一个未曾预料的状况,导致它无法完成对请求的处理.
一般这个问题会在服务器端的源代码出现错误时出现.
即服务器问题,代码逻辑有问题.
·
501 服务器无法识别
服务器不支持当前请求需要的某个功能.
当服务器无法识别请求的方法时,将无法支持其对任何资源的请求.
·
502 错误网关
作为网关或代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应.
HTTP响应细节——常用响应头
·
Location
服务器通过这个头,来告诉浏览器跳到哪里
·
Server
声明服务器的型号
·
Content-Encoding
服务器通过这个头,告诉浏览器,数据的压缩格式
·
Content-Length
声明服务器回送的数据的长度
·
Content-Language
服务器通过这个头,告诉浏览器语言环境
·
Content-Type
声明服务器回送的数据的类型
·
Refresh
服务器通过这个头,告诉浏览器定时刷新
·
Content-Disposition
服务器通过这个头,告诉浏览器以下载方式打开数据
·
Transfer-Encoding
服务器通过这个头,告诉浏览器数据是以分块方式回送的
·
Expires: -1
控制浏览器不要缓存
·
Cache-Control: no-cache
·
Pragma: no-cache
更多:http://tools.jb51.net/table/http_header
"
【深入HTTP协议】的更多相关文章
- HTTP协议系列(1)
一.为什么学习Http协议 首先明白我们为什么学习HTTP协议,也就是说明白HTTP协议的作用.HTTP协议是用于客户端与服务器之间的通讯.明白了HTTP协议的作用也就知道了为什么要学习H ...
- 重温Http协议--请求报文和响应报文
http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...
- 协议森林17 我和你的悄悄话 (SSL/TLS协议)
作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...
- 协议森林16 小美的桌号(DHCP协议)
作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址.DNS域名服务器地 ...
- 简约之美Jodd-http--深入源码理解http协议
Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架.简单,却很强大! jodd-http是一个轻巧的HTTP客户端.现在我们以一个简单的示例从源码层看看是如何实现的? Http ...
- 【JavaScript】javascript中伪协议(javascript:)使用探讨
javascript:这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行. 比如下面这个死链接: <a href="javasc ...
- SNMP简单网络管理协议
声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...
- 海鑫智圣:物联网漫谈之MQTT协议
什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...
- linux-图形化远程管理协议
远程管理控制方式: RDP(remote desktop protocol)协议: telnet: SSH(Secure Shell): RFB(Remote FrameBuffer)协议(图形化远程 ...
- RTP与RTCP协议介绍(转载)
RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步.RTP中没有连接的概念,本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完 ...
随机推荐
- 常见通用框架的理解(Redis,Zookeeper,Thrift)
redis 主要功能是内存版的Hashta zookeeper 主要功能是分布式中的全局变量. thrift 跨平台的Client和Server通信架构. taskengine用于启动定时任务和查看 ...
- windows10 安装盘制作以及重装系统
1,安装盘制作 1),需要有系统的源文件才能装机,源文件请百度“windows10”选择microsoft官网的链接:这里,选择立即下载工具 2),很快就能下载好,双击运行,选择制作启动盘.启动盘的特 ...
- 算法竞赛入门经典第二版 蛇形填数 P40
#include<bits/stdc++.h> using namespace std; #define maxn 20 int a[maxn][maxn]; int main(){ ; ...
- 题解【洛谷P1618】 三连击(升级版)
设三个数分别为n1.n2.n3,因为三个数的比为A:B:C,取一份量i,使得A·i=x,B·i=y,C·i=z(·是*的意思). 所以我们的代码只需要枚举i,并以此判断n1.n2.n3是否为三位数且包 ...
- [BJWC2010] 外星联络 - 后缀数组
[BJWC2010] 外星联络 Description 求一个 \(01\) 串中所有重复出现次数大于 \(1\) 的子串所出现的次数,按照字典序排序输出. Solution 预处理出后缀数组和高度数 ...
- [Codechef - ADITREE] Adi and the Tree - 树链剖分,线段树
[Codechef - ADITREE] Adi and the Tree Description 树上每个节点有一个灯泡,开始所有灯泡都是熄灭的.每次操作给定两个数 \(a,b\) ,将 \(a,b ...
- python之pandas简介
一. Pandas简介 1.Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和 ...
- [转]Jarvis OJ- [XMAN]level2/3_x64-Writeup
学弟写的挺好的,我就直接转过来了 原文链接:http://www.cnblogs.com/ZHijack/p/7940686.html 两道64位栈溢出,思路和之前的32位溢出基本一致,所以放在一起 ...
- SpringBoot集成flowable碰见DMN不能初始化
在idea创建了SpringBoot项目,集成flowable,运行的时候DMN引擎初始化失败,花了一天时间也没解决. 抱着试试的态度重新建立一个项目,加入同样的依赖,成功运行. 但把成功运行的项目配 ...
- 常用的 19 条 MySQL 优化
一.EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划. 下面来个简单的示例,标注(1,2,3,4,5)我们要重点关注的数据 type列,连接类型.一个好的sql语句至少 ...




