前言

  掌握HTTP协议是每一个开发者的基础,超详细的HTTP协议笔记

正文

  

HTTP协议格式总览

HTTP line

HTTP Method(方法)

  介绍了我们请求希望执行的操作类型。

  方法有:

  1. GET : 通过地址栏携带信息访问页面
  2. POST:表单提交的形式,请求内容放在body中
  3. HEAD:和get类似,只返回请求头,多数由javaScript发起
  4. PUT:语义上的一种约定:表示添加资源
  5. DELETE:语义上的一种约定:表示删除资源
  6. CONNECT:多用于HTTPS和WebSocket
  7. OPTIONS: 调试使用
  8. TRACE:调试使用

HTTP Status code(状态码)和Status text(状态文本)

  • 1XX:临时回应,表示客户端请继续。
  • 2xx:请求成功
    • 200:请求成功
  • 3xx:表示请求的目标有变化吗,希望客户端进一步处理。
    • 301&302永久性与临时性的跳转,表示当前资源已被转移,只不过一个是永久性转移,一个是临时性的,301更接近一种报错,提示客户端下次别来了。
    • 304:跟客户端缓存没有更新:产生前提是客户端本地已经有缓存的版本,并且在request中告诉了服务端,当服务端通过时间或tag,发现没有更新的时候了,就会返回一个不含body的304状态
  • 4xx:客户端错误
    • 403:无权限
    • 404:表示请求的页面不存在
    • 418:这是一个彩蛋
  • 5xx:服务端请求错误
    • 500:服务端错误
    • 503服务端暂时性错误,可以一会再试

HTTP Head(HTTP头)

  它可以被看做键值对,只是有些特殊。

Request Header

Response Header

HTTP Request Body

  HTTP 请求的Body主要用于表单场景。

  body中的格式可以是任何类型的数据,但是为了得到服务端的认可,也有一些常见的格式

  如:json,form-data,xml

  值得注意的是,当有文件上传时,则使用multipart/form-data

HTTP2

  http2.0是http1.1的升级版,

  HTTP2.0的改进:

    1  支持服务端推送

  服务端推送能够在客户端发生第一个请求时,提前把一部分内容推送给客户端,放入缓存中,

  避免客户端请求顺序带来的并行度不高,从而导致的性能问题

    2  支持TCP连接复用

  使用同一个TCP连接来传输多个HTTP请求,避免了 TCP连接建立时的,三次握手开销和初建TCP连接时窗口小的问题

    3  使用二进制代理文本进行传输

    极大提高了传输的效率

HTTPS

  HTTPS的两个作用

    1  确定请求的目标服务端身份

    2  保证传输的数据不会被网络中间节点窃听和篡改

  HTTPS通过加密通道来传输HTTP内容

  HTTPS首先与服务端建立一条TLS加密通道,TSL构建在TCP协议之上,它实际是对传输的内容做一次加密,所以从传输的内容来看,HTTPS和HTTP是一样的。

结尾

  HTTP协议是每个工程师的基础。

  希望大家都能理解透彻。

以上内容为个人的学习笔记,仅作为学习交流之用。

欢迎大家关注公众号,不定时干货,只做有价值的输出

作者:Dawnzhang 
出处:https://www.cnblogs.com/clwydjgs/

HTTP协议 详解的更多相关文章

  1. HTTP协议详解(转)

    转自:http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的 ...

  2. HTTP协议详解

    Author :Jeffrey 引言 HTTP 是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和 扩展. ...

  3. 动态选路、RIP协议&&OSPF协议详解

    动态选路.RIP协议&&OSPF协议详解 概念 当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路.路由器之间必须采用选路协议进行通信,这样的选路协议 ...

  4. ASP.NET知识总结(3.HTTP协议详解)

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...

  5. 接口测试之HTTP协议详解

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...

  6. 计算机网络(12)-----HTTP协议详解

    HTTP协议详解 http请求 http请求由三部分组成,分别是:请求行.消息报头.请求正文 (1)请求行 请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Metho ...

  7. OSPF协议详解

    CCNP OSPF协议详解 2010-02-24 20:30:22 标签:CCNP 职场 OSPF 休闲 OSPF(Open Shortest Path Fitst,ospf)开放最短路径优先协议,是 ...

  8. HTTP协议详解(真的很经典)

    HTTP 是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和 扩展.目前在WWW中使用的是HTTP/1.0 ...

  9. HTTP协议详解--转载http://blog.csdn.net/gueter/article/details/1524447

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...

  10. 关于http协议详解

    Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前 ...

随机推荐

  1. .net prams关键字

    先举个例子: 代码如下: class Program { static void Main(string[] args) { Console.WriteLine(Sum(1)); Console.Wr ...

  2. Mysql 创建事件任务

    DELIMITER $$ CREATE DEFINER=`root`@`%` EVENT `test` ON SCHEDULE EVERY 1 DAY STARTS '2019-02-12 00:00 ...

  3. Java 8 Stream介绍及使用2

    (原) stream中另一些比较常用的方法. 1. public static<T> Stream<T> generate(Supplier<T> s) 通过gen ...

  4. LoRa---她的芯片和她的几种工作模式

    LoRa对应的芯片------sx1278芯片 sx1278芯片为Semtech公司推出的具有新型LoRa扩频技术的RF芯片,具有功耗低.容量大.传输距离远.抗干扰能力强的优点.我接下来在这块芯片上进 ...

  5. java接口测试入门

    一.什么是接口 接口是前端和后端的数据通道 二.如何获取接口 1.开发不提供接口文档,通过抓包工具比如fiddler进行抓取,如下: 步骤一:设置浏览器(比如火狐)代理 步骤二:设置url过滤器,进入 ...

  6. 使用py,根据日志记录自动生成周报

    日志格式如下,思路是如果检测到文件中的内容为5位或者8位,即12.11或18.12.11,同时存在.即认为当前行为日期数据仅作为方便查看日志使用,生成脚本时过滤此行.每次读取到空白行的时候则认为下一条 ...

  7. Linux下一些简单常用命令的总结

    Cent os常用命令 查看当前目录信息: l s a:显示所有包括隐藏文件 l :列表显示数据 h:显示数据大小 查看命令帮助: XXX --help[比如:l shel p] 清除控制台信息: c ...

  8. 快速排序-python

  9. 聊聊 Scala 的伴生对象及其意义

    2019-04-22 关键字:Scala 伴生对象的作用 关于 Scala 伴生对象,比教材更详细的解释. 什么是伴生对象? 教材中关于伴生对象的解释是:实现类似 Java 中那种既有实例成员又有静态 ...

  10. settings 配置 + 测试环境搭建

    若想将模型转为mysql数据库中的表,需要在settings中配置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', ...