文章目录

  • 一:request
    • (1)请求报文基本构成
    • (2)请求方法
  • 二:respond
    • (1)响应报文基本构成
    • (2)HTTP常见状态码
  • 三:HTTP常见Header(字段)

注意下面需要分析请求报头和响应报头的构成,需要使用到抓包工具,推荐使用fillder

一:request

(1)请求报文基本构成


在浏览器中输入百度的网址,选中相应数据,右侧显示中上半部分为请求报头,下半部分显示为相应报头,点击raw(原始数据)查看


信息具体如下

GET https://www.baidu.com/ HTTP/1.1 #请求行
Host: www.baidu.com #请求的主机
Connection: keep-alive #长连接 HTTP可以选择不断开TCP,从而连接持久化
sec-ch-ua: " Not;A Brand";v="99", "Microsoft Edge";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)#浏览器,操作系统信息
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.59
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: BIDUPSID=9F74B621908F780204441F86DCCE03A5; PSTM=1598331815; BAIDUID=9F74B621908F7802E2D41BCA0AE628E1:FG=1; BAIDUID_BFESS=9F74B621908F7802E2D41BCA0AE628E1:FG=1; BD_UPN=12314753; COOKIE_SESSION=0_1_1_1_0_0_0_0_1_0_0_0_0_0_0_1_0_1624878202_1624878201%7C1%230_1_1624878201%7C1; BDUSS=kFjVE4wOVphT2l-Ym82YnE5RHdJUlZTRW10MU5qM1lqS1p4eVUxaVNHR2pPUUZoRVFBQUFBJCQAAAAAAAAAAAEAAADjDoXG1-7Lp77NysfO0jYyMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOs2WCjrNlgR; BDUSS_BFESS=kFjVE4wOVphT2l-Ym82YnE5RHdJUlZTRW10MU5qM1lqS1p4eVUxaVNHR2pPUUZoRVFBQUFBJCQAAAAAAAAAAAEAAADjDoXG1-7Lp77NysfO0jYyMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKOs2WCjrNlgR; BD_HOME=1; H_PS_PSSID=34099_34225_31253_34226_33848_34133_33607_34134_26350; sugstore=0; BA_HECTOR=ah85al8g252h0l05ui1gdoqqk0r #缓存信息
# 此行为空行

(2)请求方法

HTTP请求方法如下

1:GET方法
GET方法用来请求已经被URI识别的资源,指定的资源经过服务器解析后返回响应内容。比如请求的资源是文本,那么就会保持原样返回

使用GET方法请求的例子

2:POST方法
虽然用GET方法也可以传输实体的主体,但是一般不用GET方法进行传输,而是采用POST。虽然说POST的功能与GET很相似,但是POST的主要目的并不是获取响应的主体内容

使用POST方法请求的例子

GET和POST的区别
你现在打开我的这篇文文章阅读,浏览器就会发送GET请求给服务器,服务器则会返回相应的数据

而如果你在我的文章下面评论,点击提交后,浏览器就会执行一次POST请求,把你的评论放进请求报文里,然后拼接好POST请求头,再通过TCP协议发送服务器

3:PUT方法
PUT方法用来传输文件,比如QQ邮箱发送邮件添加附件,上传百度云盘文件都可以近似理解为PUT方法。为什么说近似呢,因为实际上PUT方法是不安全的,一旦对服务器进行写操作都是不安全的,而且在HTTP1.1中PUT方法自身又不带验证机制,因此任何人都可以上传文件,存在极大的安全隐患。所以一般的web网站是不会使用这样的方法的。

4:HEAD方法
HEAD方法只请求报文首部,而不获得报文正文

如下

5:DELETE方法
DELETE方法用于删除文件,和PUT相反。当然DELETE肯定也是不安全的,所以一般不会开放

二:respond

(1)响应报文基本构成


抓包信息如下

HTTP/1.1 200 OK #响应行
Bdpagetype: 2
Bdqid: 0x8231b40200113aab
Cache-Control: private
Connection: keep-alive # 长连接
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8 # 返回的文件类型
Date: Wed, 30 Jun 2021 13:08:55 GMT
Expires: Wed, 30 Jun 2021 13:08:55 GMT
Server: BWS/1.1
Set-Cookie: BDSVRTM=271; path=/ # 服务器给客户端设置cookie
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=34099_34225_31253_34226_33848_34133_33607_34134_26350; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Traceid: 162505853526142891629381477419473517227
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked
# 此行为空行,下面是正文
dabk k u  V ?@ EͽC4ޏ #Gd  ()! -*   @    NIv I$[  S \N *  D +J  , ǘ3 > /d= Y q t ;   4  } >        ' ?  w*** FIDDLER: RawDisplay truncated at 128 characters. Right-click to disable truncation. ***

可以看到响应报头正文部分均为乱码,其实这是HTTPS请求,已经被加密了

这里我们使用Linux中telnet工具尝试抓包
在命令行中输入telent www.baidu.com 80,请求百度的80端口

接着我们手动进行请求,请求方法是GET,请求URL如果输入/表示请求首页,版本为1.1

请求正文略过,直接输入换行,此时会发现百度服务器会将百度的首页,也就是一个HTML文件返回过来,这就是响应正文

其中content-length就是标识响应正文的长度的

(2)HTTP常见状态码

当客户端向服务器端发送请求时,会返回状态,借助它,用户可以知道服务器到底是正常了请求,还是出了问题,如果处理问题,到底是出了怎样的问题

HTTP状态码常见的共有五大类,不同数字具有不同的含义

2XX-成功

  • 204-No Content服务器已经成功处理了请求,但在返回的响应报文中不含实体的主体部分(另外,也不会允许返回任何实体的主体)。举例,如果你从浏览器发出的请求处理后,若返回204,那么浏览器显示的页面则不会发生更新。使用场景主要集中在只需要从客户端向服务器发信息,而对客户端不需要发送新信息内容的情况下使用

  • 206-Partial Content表示客户端发起了范围请求,同时服务器成功执行了此次请求。响应报文中的“Content-Range”指定范围的实体内容

3XX-重定向
该状态码表示浏览器需要执行某些特殊的操作才能正确处理请求
以302为例,你在没有淘宝网时,点击上面的购物车选项

本应该跳转到购物车页面,但是由于没有登录,所以服务器强制让你重定向到登录页面,可以发现次登录页面状态码是302

  • 301-Moved Permanently意思是永久重定向,表示请求的资源已经分配了新的URL,意思可以理解为人家网址已经变了,你的快捷方式(收藏)还指向以前的URL

  • 302-Found:意思是临时重定向,表示请求的资源已经分配了新的URL,希望用户可以新的URL访问,但是这一次先放过你,虽然访问错了,但是服务器帮你跳转过来。

  • 303-See Other该状态码表示由于请求的圆存在着另一个URL,应使用GET(这一点和302有所区别)获取资源

  • 304-Not Modified不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存定定向,用于缓存控制

4xx-客户端错误

  • 400-Bad Request表示客户端的请求报文有错误,是一个很笼统的错误。

  • 403-Forbidden意思是服务器拒绝访问,并不是客户端的请求出错

  • 404-Not Found表示请求的资源在服务器上找不到,无法提供客户端

    5xx-服务器错误

  • 500-Internal Server Error和400一样,是一个笼统性的错误,只是表明服务器出现了错误

  • 501-Not Implemented表示客户端请求的功能还不⽀持,类似“即将开业,敬请期待”的意思

  • 502 Bad Gateway通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误

  • 503-Service Unavailable表示服务器当前很忙,暂时无法响应服务器,类似“网络服务正忙,请稍后再试”的意思。

三:HTTP常见Header(字段)

可以看到不管是request还是response都有请求行这一部分

Host字段:客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上


Content-Length:服务器在返回数据时,会有 Content-Length 字段,表明本次回应的数据长度。

Connection字段:常用于客户端要求服务器使用 TCP 持久连接,以便其他请求复用。

  • HTTP/1.1 版本的默认连接都是持久连接,但为了兼容⽼版本的 HTTP,需要指定 Connection 首部字段的值为Keep-Alive 。

Content-Type 字段:用于服务器回应时,告诉客户端,本次数据是什么格式

  • Content-Type: text/html; charset=utf-8表示发送的是网页及其编码格式
  • 客户端请求的时候,可以使用 Accept 字段声明自己可以接受哪些数据格式。Accept: */*表示可以接受任意格式

Content-Encoding 字段:段说明数据的压缩⽅法。表示服务器返回的数据使⽤了什么压缩格式

User-Agent: 声明用户的操作系统和浏览器版本信息,这东西在爬虫中涉及较多
referer: 当前页面是从哪个页面跳转过来的
location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问
Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能

3-3:HTTP协议之request和respond及常见请求方法和常见状态码相关推荐

  1. TCP/IP协议族(一) HTTP简介、请求方法与响应状态码

    接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的.接下来的几篇博客都是关于TCP/IP协议族的,本篇博客就先简单 ...

  2. http接口测试:了解协议、请求方法、响应状态码

    http接口测试:了解协议.请求方法.响应状态码 接口在各个系统间的重要性无需重申,主要体现在外部系统与系统之间以及内部各子系统之间的交互点.通过这些特定的交互点和一些特殊的规则标准(协议)来进行系统 ...

  3. HTTP协议学习笔记(一)请求方法名及状态码

    HTTP协议是位于TCP协议之上的应用层协议,是应用进程之间通讯的一种协议.之所以称之为应用层协议,是因为它无需关心数据是通过什么方式到达对端的,在到达对方的应用程序之前都经历了什么,而只需要协商好使 ...

  4. HTTP协议中常见请求方法以及一些常见错误代码

    GET: 请求指定的页面信息,并返回实体主体. HEAD: 只请求页面的首部. POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体. PUT: 从客户端向服务器传送的数据取代指定 ...

  5. HTTP协议、HTTP请求方法、常见状态码、HTTP消息

    HTTP协议 客户端请求,服务端响应.浏览器与服务器不建立持久连接,响应后连接失效. HTTP请求方法 一.GET GET方法用于获取请求页面的指定信息. 二.HEAD 除了服务器不能在响应里返回消息 ...

  6. HTTP协议中request报文请求方法和状态响应码

    一个HTTP请求报文由4部分组成: 请求行(request line) 请求头部(header) 空行 请求数据 下图给出了请求报文的一般格式: 请求行中包括了请求方法,常见的请求方法有: GET:从 ...

  7. HTTP协议之http状态码详解

    什么是HTTP状态码 HTTP状态码的作用是:Web服务器用来告诉客户端,发生了什么事. 状态码位于HTTP Response 的第一行中,会返回一个"三位数字的状态码"和一个&q ...

  8. 302状态码_HTTP协议详解(基础概念 方法 状态码 首部 连接 Cookie 新特性 安全)

    一 .基础概念 URI URI 包含 URL 和 URN. 请求和响应报文 1. 请求报文 2. 响应报文 二.HTTP 方法 客户端发送的 请求报文 第一行为请求行,包含了方法字段. GET 获取资 ...

  9. [转]HTTP协议之状态码详解

    HTTP协议之状态码详解 HTTP状态码,我都是现查现用. 我以前记得几个常用的状态码,比如200,302,304,404, 503. 一般来说我也只需要了解这些常用的状态码就可以了.  如果是做AJ ...

最新文章

  1. CUDA 内存统一分析
  2. js中获取时间new date()的用法
  3. python codecs模块(用于执行编码转换之类的)
  4. 五、JavaScript基础知识,学会操作元素的简单事件(一)
  5. 常用贴片三极管主要参数
  6. WPF中一个控件绑定另一个控件的属性
  7. 【Retinex】【Frankle-McCann Retinex】matlab代码注释
  8. sqlserver、mysql删除重复数据
  9. 从智能门锁,看3D视觉的安全性突围
  10. java技术可行性分析_java毕业设计管理系统需求分析
  11. java番茄钟_番茄时间管理 - java Swing版
  12. H3C 无线控制器WX2510H-F与无线接入点WA5320-C-EI的安装与关联详细指导书
  13. AWVS14.1.2下载安装教程(2021.3.6版本)
  14. php免费项目下载文件,php——文件下载
  15. LeetCode1818:绝对差值和
  16. Bootstrap-table 如何合并相同单元格
  17. wex5 ajax,关于Ajax请求 - WeX5开发者论坛 - 起步软件技术论坛 - Powered by Discuz!
  18. 浅谈精准提取日志中的URL
  19. android 图片ps处理图片大小,【精】【教程】用Photoshop调整图片大小,以方便上传到论坛...
  20. uniapp一套代码开发app和微信小程序

热门文章

  1. 分区创建 linux_在 Intel NUC 上安装 Linux
  2. iphone怎么看wifi密码_无线网密码正确但是手机连接不上wifi怎么回事?
  3. 原来这么看导师对论文或文稿的批注才不会辜负!
  4. 国家粮食与物资储备局揭示中国稻谷产毒真菌分布及仓储动态变化
  5. 修复MacBook Touch Bar(触控栏)无法正常工作的方法
  6. fcpx插件:Beautiful Slideshow - 时尚简洁图片幻灯片开场
  7. 这款免费小工具,让你的Mac也能实现右键新建
  8. python安装matlab库_[python][matlab]在python36上安装matlab2015b引擎
  9. 大熊猫学生网页设计模板 静态HTML动物保护学生网页作业成品 DIV CSS大熊猫野生动物主题静态网页
  10. CentOS7 安装 Nginx PHP