HTTP协议详细分析
1、HTTP概述
1.1、什么是HTTP?
它是Hyper Text Transfer Protocol的缩写。超文本传输协议。
它是客户浏览器和web服务器之间的一种一问一答的规则。问答机制/握手机制。
1.2、HTTP版本
1.0版本:
创建连接(TCP/IP)
发送请求
接收响应
关闭连接
1.1版本:
创建连接(TCP/IP)
发送请求1
接收响应1
发送请求2
接收响应2........
请求超时(手动关闭)
1.1版本比1.0版本多了几个消息头
1.3、特殊说明
当浏览器发现script标签,link标签和img标签时,会自动发出请求。
2、HTTP主要组成
2.1、请求部分
请求行
请求消息头
请求正文
GET /myapp/2.html HTTP/1.1 //如请求行
Host:"localhost:8080"
User-Agent:"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0"
Accept:"*/*"
Accept-Language:"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"
Accept-Encoding:"gzip, deflate"
Referer:"http://localhost:8080/jeecg/logController.do?statisticTabs&isIframe"
Cookie:"JEECGINDEXSTYLE=hplus; JSESSIONID=051CDE615BD426D727B41B2481B4A1C3; ZINDEXNUMBER=1990"
Connection:"keep-alive"
2.2、响应部分
响应行
响应消息头
响应正文
HTTP/1.1 200 OK // 响应行
Cache-Control:"no-cache, no-store"
Content-Language:"zh-CN"
Content-Type:"text/html;charset=UTF-8"
Date:"Wed, 17 May 2017 02:42:27 GMT"
Expires:"Thu, 01 Jan 1970 00:00:00 GMT"
Pragma:"no-cache"
Server:"Apache-Coyote/1.1"
Transfer-Encoding:"chunked"
如下图:

2.3、消息头的共性
(1)头名称首字母大写,多个单词每个单词的首字母都大写。
(2)多个单词用-分隔
(3)名称和值之间用:分隔
(4)值和:之间有一个空格
(5)多个值之间用,分隔
(6),和值之间也有一个空格
(7)两个头之间用回车分隔
MIME类型:多用途互联网邮件扩展类型
MIME:(Multipurpose Internet Mail Extensions)
3、请求部分详解
请求行:GET /myapp/2.html HTTP/1.1
GET:请求的方式。GET和POST
/myapp/2.html:请求资源URI。
URI:Uniform Resource Identifier 统一资源标识符
URL:Uniform Resource Locator 统一资源定位符
URL: http://localhost:8080/jeecg/logController.do?statisticTabs&isIframe
协议 主机 端口 URI
HTTP/1.1:协议的版本
请求消息头:客户浏览器给服务器的暗语
Accept:
告知服务器,浏览器所支持的MIME类型。
Accept-Encoding:
告知服务器,浏览器所支持的压缩编码格式。常用的一个GZIP压缩。
Accept-Language:
告知服务器,浏览器所支持的语言。例如zh_CN,en_US等等。
Referer:
告知服务器,当前请求的来源。注意:只有有来源的才会有此消息头。
作用:
1.投放广告。
2.防盗链。
Content-Type:
告知服务器,请求正文的MIME类型。
Content-Length:
告知服务器,请求正文的长度。
User-Agent:
客户浏览器的相关信息
Connection: Keep-Alive
连接状态:保持连接
If-Modified-Since:
客户端缓存的最后更新时间。
Cookie:
会话管理相关。(非常重要)
请求的正文:
什么时候有,什么时候没有,当什么属性取什么值的时候,请求的正文是什么体现形式?
POST方式:username=test&password=123 key=value&key=value 在请求体中
GET方式: username=test&password=123 key=value&key=value 在地址栏中
表单输入域中,只要有name属性的时候,正文内容就会被提交。如果没有name属性,则不会被提交.
正文的体现形式不受请求的方式控制。
表单的第三个重要属性:enctype属性:控制编码表单的MIME类型
enctype是有默认值的:application/x-www-form-urlencoded 它对应的表单正文的体现形式就是key=value
enctype取值为multipart/form-data时,请求正文的体现形式是:
-----------------------------7df1592a410fc
Content-Disposition: form-data; name="username"
test
-----------------------------7df1592a410fc
Content-Disposition: form-data; name="password"
123
-----------------------------7df1592a410fc
Content-Disposition: form-data; name="fileone"; filename="C:\Users\zhy\Desktop\请求部分.jpg"
Content-Type: image/pjpeg
??
-----------------------------7df1592a410fc
4、响应部分详解
响应行:HTTP/1.1 200 OK
HTTP/1.1:使用的协议及版本
200:响应状态码
常用的状态码:
200 :一切都OK
302/307 :重定向
304 :请求资源未改变,使用缓存
404 :请求资源未找到
500 :服务器内部错误
OK:状态码描述
响应消息头:服务器给客户浏览器的暗语
Location:
重定向的地址
Server:
服务器相关信息
Content-Type:
告知浏览器,响应正文的MIME类型
Content-Length:
告知浏览器,响应正文的长度
Content-Encoding
告知浏览器,响应正文使用的压缩编码格式。
Content-Language:
告知浏览器,响应正文语言。
Content-Disposition:
告知浏览器,以下载的方式打开。
Refresh:
定时刷新
Last-Modified:
服务器资源的最后修改时间。当浏览器发出请求时,会使用客户端缓存最后更新时间和该消息头的值进行比较。如果一致则使用缓存。如果不一致,发送新的请求。
Set-Cookie:
会话管理相关(非常重要)
Expires:-1:设置缓存时间。当设置为-1时,表示不要缓存。时间是以毫秒为单位。
Catch-Control: no-catch(1.1)//针对http协议1.1版本
Pragma:no-catch(1.0)//针对http协议1.0版本
响应的正文:
和你在浏览器右键查看源文件,看到的内容是一模一样的。
HTTP协议详细分析的更多相关文章
- Ubuntu搭建NFS服务器,NFS协议详细分析
目录 1. Ubuntu搭建NFS服务器 2. NFS协议分析 2.1 实验拓扑: 2.2 在kali抓包分析 1. Ubuntu搭建NFS服务器 NFS(Network FileSystem,网 ...
- tcpdump抓包二进制tcp协议详细分析
1.tcpdump -i eth0 port 11751 and src host 192.168.1.34 -x -s0 tcpdump: verbose output suppressed, us ...
- 韩顺刚-tcp报文头协议详细分析第一包数据:序号是0,发送数据的长度是0,因为没有收到对端的数据,所以确认号是0, Syn的标志位设置成1,这里没有发送的数据,只发送TCP的20个字节的头部
TCP报文段首部格式 大部分TCP报文头部都是20个字节,有的数据包要加上选项. 上面一行代表4个字节,源端口和目的端口都是2个字节. TCP协议是面向字节流的协议 TCP是一段一段分块的发送数据的 ...
- Android IOS WebRTC 音视频开发总结(八十六)-- WebRTC中RTP/RTCP协议实现分析
本文主要介绍WebRTC中的RTP/RTCP协议,作者:weizhenwei ,文章最早发表在编风网,微信ID:befoio 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID ...
- NS2仿真:两个移动节点网络连接及协议性能分析
NS2仿真实验报告2 实验名称:两个移动节点网络连接及协议性能分析 实验日期:2015年3月9日~2015年3月14日 实验报告日期:2015年3月15日 一.实验环境(网络平台,操作系统,网络拓扑图 ...
- HashMap 源码详细分析(JDK1.8)
一.概述 本篇文章我们来聊聊大家日常开发中常用的一个集合类 - HashMap.HashMap 最早出现在 JDK 1.2中,底层基于散列算法实现.HashMap 允许 null 键和 null 值, ...
- LinkedHashMap 源码详细分析(JDK1.8)
1. 概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题.除此之外,Linke ...
- ArrayList 源码详细分析
1.概述 ArrayList 是一种变长的集合类,基于定长数组实现.ArrayList 允许空值和重复元素,当往 ArrayList 中添加的元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个 ...
- 一个DOS攻击木马的详细分析过程
一个DOS攻击木马的详细分析过程 0×01 起因 网路流量里发现了大量的的1.exe的文件,而且一直在持续,第一感觉就像是一个木马程序,而且每个1.exe的MD5都不一样,对比发现只有几个字节不一样( ...
随机推荐
- 5步告诉你QQ音乐的完美音质是怎么来的,播放器的秘密都在这里
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由QQ音乐技术团队发表于云+社区专栏 一.问题背景与分析 不久前,团队发现其Android平台App在播放MV视频<凤凰花开的路口 ...
- [转] Scala Try 与错误处理
一.概述 当你在尝试一门新的语言时,可能不会过于关注程序出错的问题, 但当真的去创造可用的代码时,就不能再忽视代码中的可能产生的错误和异常了. 鉴于各种各样的原因,人们往往低估了语言对错误处理支持程度 ...
- 基于Python3的漏洞检测工具 ( Python3 插件式框架 )
目录 Python3 漏洞检测工具 -- lance screenshot requirements 关键代码 usage documents Any advice or sugggestions P ...
- Spring MVC HelloWorld入门及运行机制 (一)
完整的项目案例: springmvc.zip 介绍 SpringMVC是一款Web MVC框架. 它跟Struts框架类似,是目前主流的Web MVC框架之一. 文章通过实例来介绍SpringMVC的 ...
- 初学ubuntu之文件权限权限
今天接着做笔记,坚持学习下去. 文件权限修改命令,初学者看见这个命令之后总有些摸不着头脑,这命令里面用到了一些数字,我 自己也是,这次写一篇自己的认识.希望能够帮助到需要学习的人. 首先你可以通过 l ...
- c#数据批量插入
由于之前面试中经常被问到有关EF的数据批量插入问题,今天以Sqlserver数据库为例,对.net中处理数据批量处理的方案进行了测试对比. 1.四种测试方案 (1)普通的EF数据批量插入:即调用DbS ...
- 【底层原理】深入理解Cache (上)
存储器是分层次的,离CPU越近的存储器,速度越快,每字节的成本越高,同时容量也因此越小.寄存器速度最快,离CPU最近,成本最高,所以个数容量有限,其次是高速缓存(缓存也是分级,有L1,L2等缓存),再 ...
- redmine screenshot paste(粘贴截图)
前言 本文所使用的 redmine 3.1.x 查看redmine版本:以管理员帐号登录 – 点 管理 – 点 信息,示例如下: 在线插件库 插件仓库,可以下载丰富的插件: http://www.re ...
- Android中使用ViewGroup.removeViews()时出现NullPointException解决方案
在ViewGroup的内部写一个动画效果,在效果结束之后会调用onAnimationEnd(Animation arg0),在此方法中如果直接使用removeViews()时,可能会出现NullPoi ...
- window中常用的命令
1.Ctrl+s 保存 2.Ctrl+c 复制 3.Ctrl+v 粘贴 4.Ctrl+x 剪切 5.Ctrl+a 全选 6.Ctrl+f 查找 7.Windows+d 桌面 8.Windows+e 计 ...