HTTP协议初探

什么是http协议?

  • rfc文档中文版
  • 官方rfc文档位置
  • rfc文件,Request For Comments(RFC),是一系列以编号排定的文件
  • ietf 组织,国际互联网工程任务组(The Internet Engineering Task Force,简称 IETF)是一个公开性质 的大型民间国际团体,汇集了与互联网架构和互联网顺利运作相关的网络设计者、运营者、投资人和 研究人员,并欢迎所有对此行业感兴趣的人士参与。
  • RFC 1945定义了HTTP/1.0版本
  • RFC 2616定义了今天普遍使用的一个版本——HTTP 1.1
  • RFC 7540定义了HTTP/2.0版本

既然http是超文本传输协议,那么遵守协议的双方是谁呢?

遵守协议的双方

  • 浏览器君:ie,chrome ,firefox
  • web服务器君:(iis , Apache,Tomcat ,lighttpd , nginx ,http://tengine.taobao.org/ , gws-google )

再来回答什么是http协议

  • 不就是客户端往服务端发送一段文本,服务端回复客户端一段文本么。

  • 当然,这个过程是不可逆的

抓到这两段文本

可以使用以下工具抓取到这段文本 
TOOLS: chrome dev tool ,firefox firebug ,fiddler …… 
示例:

可以总结出以下规律

  1. Http请求由三部分组成,分别是:请求行、消息报头、请求正文

  1. HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文

HTTP 请求命令(动作,谓词 ,METHOD)

GET 和 POST

  1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中。
  2. GET请求没有请求体,
  3. GET提交的数据大小有限制,最多只能有1024字节(因为浏览器对URL的长度有限制),而POST方法提交的数据理论上没有限制。(服务端会限制)
  4. GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。

常见HTTP状态码

  • 200 请求被正常处理
  • 206 部分请求被成功响应,返回对应的部分(其实不常见,用于断点续下,多线程下载)
  • 301 永久重定向
  • 302 临时重定向
  • 304 你请求的内容没有更新,可以用你本地缓存的(不属于重定向)
  • 400 你说的什么,听不懂
  • 404 找不到你请求的资源
  • 500 服务端出现异常

HTTP报头

类型:

  • 普通(通用)报头 General Headers 
    请求响应都会使用的
  • 实体报头 Entity Headers 
    用来描述请求体或者响应体的报头,跟实体有关
  • 请求报头 RequestHeaders 响应报头 Response Headers 
    出现的地方不同,只会出现在请求和响应上的报头

HOST 报头是必须的请求报头 
报头的数量在不断的增加中,来满足互联网需求的变更 
可以自定义报头

  • 常见普通(通用)报头如下:

  • 常见实体报头

  • 常见请求报头

  • 常见响应报头

如何发出http请求

  • 浏览器
  • Code
  • telnet
  • 工具 fiddler postman 等等
  • ……

回到问题,什么是HTTP协议

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。 
HTTP协议永远都是客户端发起请求,服务器回送响应。 
HTTP协议的主要特点可概括如下:

  1. 支持客户/服务器模式。支持基本认证和安全认证。
  2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  3. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
  4. HTTP 0.9和1.0使用非持续连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。HTTP 1.1使用持续连接:不必为每个web对象创建一个新的连接,一个连接可以传送多个对象。
  5. 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。

关于应用层协议有一幅很流行的图示:

参考资料:

HTTP协议初探的更多相关文章

  1. gopher 协议初探

    Gopher 协议初探 最近两天看到了字节脉搏实验室公众号上有一篇<Gopher协议与redis未授权访问>的文章,其中对gopher协议进行了比较详细的介绍,所以打算跟着后面复现学习一下 ...

  2. HTTP协议和HTTPS协议初探

    概况 HTTP是hypertext transfer protocol(超文本传输协议)的简写.它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEBserver之间交换数据的过程. HT ...

  3. (转载)PIM-SM协议初探(一)路由角色选举

    PIM是Protocol Independent Multicast(协议无关组播)的简称,表示可以利用静态路由或者任意单播路由协议(包括RIP.OSPF.IS-IS.BGP等)所生成的单播路由表为I ...

  4. RTP-RTCP-RTSP协议的区别与联系

    一.产生的背景 随着互连网的发展,人们已经不满足于传统的HTTP,FTP和电子邮件等文本信息和服务,而对内容丰富多彩的多媒体信息,服务以及多媒体通信方式提出了需求,包括声音,图象,图形,视频信息等等, ...

  5. 《图解HTTP》读书笔记

    目前国内讲解HTTP协议的书是在太少了,记忆中有两本被誉为经典的书<HTTP权威指南>与<TCP/IP详解,卷1>,但内容晦涩难懂,学习难度较大.其实,HTTP协议并不复杂,理 ...

  6. Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  7. (一)----使用HttpClient发送HTTP请求(通过get方法获取数据)

    (一)----使用HttpClient发送HTTP请求(通过get方法获取数据) 一.HTTP协议初探: HTTP(Hypertext Transfer Protocol)中文 “超文本传输协议”,是 ...

  8. 《图解HTTP》读书笔记(转)

    reference:https://www.cnblogs.com/edisonchou/p/6013450.html   目前国内讲解HTTP协议的书是在太少了,记忆中有两本被誉为经典的书<H ...

  9. Android之网络----使用HttpClient发送HTTP请求(通过get方法获取数据)

    [正文] 一.HTTP协议初探: HTTP(Hypertext Transfer Protocol)中文 "超文本传输协议",是一种为分布式,合作式,多媒体信息系统服务,面向应用层 ...

随机推荐

  1. (I/O完成端口中的)995错误

    在windows下,可能会出现995的错误,msdn对该错误的解释为: The I/O operation has been aborted because of either a thread ex ...

  2. mysql由浅入深探究(二)----mysql用户操作

    上一节我们完成了mysql的安装,现在我们将开启实战模式,完成一些基本的mysql操作.这节我们分为一些几个内容: mysql中用户新建 mysql中用户删除 mysql中用户修改 mysql中用户查 ...

  3. 动态插入的html代码,点击节点无效以及获取节点下标的方法

    动态插入的html,需要使用delegate或者on事件来监听,方式如下. 如果需要获取节点对应的下标,$(this).index()是无法获取的,需要以$(selectot).index(this) ...

  4. 移动端tab目录(有待完善)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  5. Noip2016day1 天天爱跑步running

    题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.«天天爱跑步»是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 个结点 ...

  6. Linux —— awk命令

    - 作用: 强大的文本分析工具,对于文本分析来说绝对是一把利器 - 语法: awk '{pattern + action}' {filenames} pattern需要查找的内容 action 查找到 ...

  7. spring boot 事务

    spring事务:默认自动提交只读:@Transactional(readOnly = true)读写:@Transactional(),因为等同于@Transactional(readOnly = ...

  8. <pre></pre>标签自动换行

    原文地址:https://www.cnblogs.com/qq78292959/p/4193142.html   pre { white-space: pre-wrap; word-wrap: bre ...

  9. NET高性能IO

    System.IO.Pipelines: .NET高性能IO https://www.cnblogs.com/xxfy1/p/9290235.html System.IO.Pipelines是一个新的 ...

  10. Codeforces Round #378 (Div. 2) D. Kostya the Sculptor 分组 + 贪心

    http://codeforces.com/contest/733/problem/D 给定n个长方体,然后每个长方体都能选择任何一个面,去和其他长方体接在一起,也可以自己一个,要求使得新的长方体的最 ...