1. 报文结构

1.1 请求报文结构

  • Start-Line

    单行,包括 Method + URL + HTTP Version
  • Headers

    多行,形式为 Name:Value
  • Body

    可选,主体部分
Get https://www.baidu.com/ HTTP/1.1
-------------------------------------------------------------------------------
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7,ja;q=0.6
Cache-Control: no-cache
Connection: keep-alive
Cookie: ...
Host: www.baidu.com
Pragma: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36

1.2 响应报文结构

  • Status-Line

    单行,包括 HTTP Version + Status Code + Description
  • Headers

    多行,形式为 Name:Value
  • Body

    可选,主体部分
HTTP/1.1 200 OK
-------------------------------------------------------------------------------
Bdpagetype: 2
Bdqid: 0xd511e4460001e2c0
Cache-Control: private
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Mon, 15 Oct 2018 15:34:34 GMT
Expires: Mon, 15 Oct 2018 15:34:34 GMT
Server: BWS/1.1
Set-Cookie: BDSVRTM=223; path=/
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=1434_21124_26350_20928; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Transfer-Encoding: chunked
X-Ua-Compatible: IE=Edge,chrome=1
-------------------------------------------------------------------------------
Body...

2. Http2 伪头部

2.1. 作用

与HTTP1.x使用起始行来指定URI,请求方法,状态码等不同, HTTP2使用专门的伪头部来实现此目的(以':'作为开头).

所有的伪头部必须在常用首部之前出现.

:authority: developer.mozilla.org
:method: GET
:path: /en-US/docs/Web/HTTP/Basics_of_HTTP
:scheme: https
Referrer Policy: no-referrer-when-downgrade
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7,ja;q=0.6
cache-control: max-age=0
cookie: ...
referer: https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
upgrade-insecure-requests: 1
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36

2.2. 连接专用伪头部

在HTTP2中除了TE头部以外不再有连接相关的头部,包括:Keep-Alive, Proxy-Connection,Transfer-Encoding,和Upgrade等

2.3. 请求伪头部

  • ':method'伪头部

    对应HTTP1.x起始行中的Method
  • ':scheme'伪头部

    对应HTTP1.x起始行中HTTP Version,值为http或者https
  • ':authority'伪头部

    对应HTTP1.x头部中的Host
  • ':path'伪头部

    对应HTTP1.x起始行中的URL,可以为*或/

2.4. 响应伪头部

  • ':status'伪头部

    对应HTTP1.x起始行中Status Code

2. 方法

  • GET | 请求指定的页面信息,并返回实体主体
  • HEAD | 与GET相同, 但仅返回状态和头部
  • POST | 请求服务器对内容进行处理
  • PUT | 从客户端向服务器传送的数据取代指定的文档的内容
  • DELETE | 请求服务器删除指定的资源
  • CONNECT | 要求用隧道协议连接代理(SSL/TLS)
  • OPTIONS | 查询针对请求URI指定资源支持的方法
  • TRACE | 让服务端将之前的请求通信还给客户端

详情查看[Web高级_Http方法详解]

3. 头部

  • 一般头: 同时适用于请求和响应消息,但与最终消息主体中传输的数据无关的消息头。
  • 请求头: 包含更多有关要获取的资源或客户端本身信息的消息头。
  • 响应头: 包含有关响应的补充信息,如其位置或服务器本身(名称和版本等)的消息头。
  • 实体头: 包含有关实体主体的更多信息,比如主体长(Content-Length)度或其MIME类型。

详情查看[Web高级_Http头部详解]

4. 状态码

  • 100-199 信息响应
  • 200-299 成功响应
  • 300-399 重定向
  • 400-499 客户端响应
  • 500-599 服务端响应

详情查看[Web高级_Http状态码详解]

refs:

https://tools.ietf.org/html/rfc2616

https://tools.ietf.org/html/rfc7540

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status

Web高级 HTTP报文的更多相关文章

  1. 【转】2012年7月12 – 腾讯公司 WEB高级应用开发工程师 最新面试题

    腾讯面试(WEB高级应用开发工程师<PHP>)非答案啊!!! 开始正题之前,容博主啰嗦两句吧,呵呵.(你也可跳过直接到红色字体看题!) 腾讯一直是我很敬重的企业,尽管小企鹅在战略上饱受争议 ...

  2. tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片

    本博文将一步步带领你实现抽屉官网的各种功能:包括登陆.注册.发送邮箱验证码.登陆验证码.页面登陆验证.发布文章.上传图片.form验证.点赞.评论.文章分页处理以及基于tornado的后端和ajax的 ...

  3. Web高级征程:《大型网站技术架构》读书笔记系列

    一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...

  4. Java Web高级编程(四)

    WebSocket 一.WebSocket的产生 用户希望Web页面可以进行交互,用于解决这个问题的技术是JavaScript,现在Web上有许多的可用的JavaScript框架,在使用极少的Java ...

  5. Java Web高级编程(三)

    使用过滤器改进应用程序 一.过滤器的目的 过滤器是可以拦截访问资源的请求.资源的响应或者同时拦截两者的应用组件.过滤器可以检测和修改请求和响应,同时也可以拒绝.重定向或转发请求.javax.servl ...

  6. Java Web高级编程(二)

    使用会话维持状态 一.会话 为了实现关联同一个用户端的多个请求和这些请求之间数据的共享,需要用到会话,会话用于维持请求和请求之间的状态.从服务器的角度,当用户的Web浏览器打开第一个链接到服务器的套接 ...

  7. Java Web高级编程(一)

    Servlet 一.创建Servlet类 在Java EE中,Servlet用来接收和响应终端用户的请求.Servlet是所有Web应用程序的核心类,是唯一既可以直接处理和响应用户请求,也可以将处理工 ...

  8. tornado web高级开发项目

    抽屉官网:http://dig.chouti.com/ 一.配置(settings) settings = { 'template_path': 'views', #模板文件路径 'static_pa ...

  9. Web高级 网站安全

    1. SQL注入 虽然现在SQL注入发生的情况总的来说越来越少,还是提二句.关于什么是SQL注入大家都知道就不多说了. 1.1 原理 我们在做前端页面的时候,少不了会又各种输入框,然后通过GET或者P ...

随机推荐

  1. 网络协议中HTTP,TCP,UDP,Socket,WebSocket的优缺点/区别

    先说一下网络的层级:由下往上分为 物理层.数据链路层.网络层.传输层.会话层.表示层和应用层 1.TCP和UDP TCP:是面向连接的一种传输控制协议.属于传输层协议.TCP连接之后,客户端和服务器可 ...

  2. 开始 第一个自己的python爬虫程序 爬磁力链

    不能一事无成,这么久了学python还是吊着,要落地,落在博客园好了,好像公司也只能上博客园了 昨天看了一篇用正则爬电影天堂的视频,直接拿来用,爬磁力吧,爬好玩的 #导入模块 import reque ...

  3. netstat和net命令粗谈

    网络连接查看命令netstat netstat -a 查看开启了哪些端口,常用netstat -an netstat -n 查看端口的网络连接情况,常用netstat -an netstat -v 查 ...

  4. 转自CSDN-详述 Java 中的别名现象

    在任何编程语言中,赋值操作都是最常见的操作之一,Java 自然也不例外.赋值时,使用赋值操作符=,它的意思是:“将等号右边的值(右值),复制给左边的值(左值)”.右值可以是任何常数.变量或者表达式(只 ...

  5. Python小白 哆唻a梦 用turtle绘图

    点击观看视频 # -*- coding: utf-8 -*- """ Created on Sat Nov 10 22:02:32 2018 @author: 10029 ...

  6. python程序在命令行执行提示ModuleNotFoundError: No module named 'XXX' 解决方法

    在ide中执行python程序,都已经在默认的项目路径中,所以直接执行是没有问题的.但是在cmd中执行程序,所在路径是python的搜索路径,如果涉及到import引用就会报类似ImportError ...

  7. python 读取默认配置文件和用户配置文件 configs

    优先从configs_default中读取配置,但是configs_override中的配置可以override它 import configs_default #import configs_ove ...

  8. gulp在项目中的基本使用

    在项目中用gulp做项目的代码的管理,用起来很方便.主要用到了下面一些功能 关于js的处理,包括合并.压缩.加hash. 关于css的处理,编辑scss,合并css,加hash,自动加入前缀 本地开发 ...

  9. Hadoop、Strom集群实现日志自动清理

    Hadoop+Storm集群,运行一段时间ZooKeeper等关键进程自动停止运行,经检测是系统磁盘不足 系统磁盘100%: 查找大文件后发现,空间均被ZooKeeper产生的log占用 find / ...

  10. SQLalchemy 字段类型

    常用的SQLAlchemy列选项 类型名 python中类型 说明 Integer int 普通整数,一般是32位 SmallInteger int 取值范围小的整数,一般是16位 BigIntege ...