HTTP 协议请求方法和状态码 &HTTP 协议 Header 相关

本贴最后更新于 2043 天前,其中的信息可能已经时异事殊

URL 格式

schema://host[:port#]/path.../[?query-string][#anchor]

  • schema 指低层使用的协议(例如 http,https,ftp)

  • host HTTP 服务器的 IP 地址或者 Domain name

  • port# HTTP 服务器的端口默认是 80,可省略,如果使用其他端口需要指明

  • path 访问资源的路径

  • query-string 发送给 HTTP 服务器的数据

  • anchor 锚

URL 中的锚点

  • 是一种超链接,只是他是页面内部的超链接

  • 假如有一个网页很长,里面的内容可以分为 N 个部分,这样的话,就可以在网页的顶部设置一些锚点,以便浏览者单击相应的锚点,快速到达本页内相应的位置,可以不必在很长的网页中自行寻找

  • 锚点在 URL 的最右边,前面有一个字符"#"

HTTP 请求方法

  • GET 请求指定的页面信息并返回实体主体

  • GET 是最常见的方法,用于获取资源,常用于服务器查询某些信息,打开网页一般都是 GET 方法,因为要从 Web 服务器获取信息

  • 带参数的 GET 方法

  • 浏览器也可以在 GET 方法中把数据传给服务器,数据放在 URL 的'?'后面

  • 将查询字符串追加到 URL 末尾,一边将信息发送给服务器,这种方式叫查询字符串Query String

例如在百度中搜索某 URL:
https://.baidu.com/swd=abc&rsv_spt=1&rsv_iqid=0x99d541420020da12&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf8&rqlang=cn&tn=baiduhome_pg&rsv_enter=1&oq=sssss&inputT=388&rsv_t=b2a8td06KxWF5SxzU1ebZevafl6twuMdpgDWeQzErgjzdTQaXQmWpuclHX%2F%2BGcTlkZmM&rsv_sug3=10&rsv_sug1=4&rsv_sug7=100&rsv_pq=8459df0b0009d665&rsv_sug2=0&rsv_sug4=7296

  • 查询字符串以"名=值"这样的形式出现,多个名值之间用字符"&"隔开

  • 在 Fiddler 中的 WebForms 选项卡可以更清楚地看到 GEt 方法中的查询字符串参数

  • POST 向指定资源提交数据并进行处理请求(例如提交表单或上传文件),数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或对已有资源的修改

  • POST 方法通常用来把表单中填好的数据发送给服务器

  • 使用 WebForms 选项卡可以更清楚地看到 Body 主体里面的内容

  • HEAD 类似 GET 请求,只不过返回的响应中没有具体内容,用于获取报文头

  • PUT 从客户端向服务器传送的数据取代指定文档的内容

  • DELECT 请求服务器删除指定的内容

GET 和 POST 方法的区别

(1)GET 提交的数据会放在 URL 后,以'?'分割 URL 和传输数据,参数之间以'&'相连,例如 EditPosts.aspx?name=test1&id=123456,POST 方法是把提交的数据放在 HTTP 包的 Body 中

(2)GET 提交的数据大小有限制(因为浏览器对 URL 的长度有限制),而 POST 方法提交的数据大小没有限制

(3)GET 方法需要 Reuqest.QueryString 来取得变量的值,而 POST 方法则通过 Request.Form 来获取变量的值

(4)GET 方法提交数据会带来安全问题,比如登陆一个页面通过 GET 方式提交数据时,用户名和密码将出现在 URL 上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史纪录中获取该用户名的账号和密码

HTTP 状态码

  • 每个 HTTP Response 报文都会携带一个状态码,用于告诉客户端请求是否成功,状态码是一个 3 位数字的代码

  • HTTP 状态码存在 HTTP 中的响应报文中,其作用是 Web 服务器用来告诉客户端发生了什么事

  • HTTP 响应报文中的第一行,由 HTTP 协议版本号,状态码,状态消息 3 部分组成

状态码分类

状态码 已定义范围 分类
1XX 100~101 信息提示,表示请求已被成功接收,继续处理
2XX 200~206 成功,表示请求已被成功接收,理解,接受
3XX 300~305 重定向,要完成请求,必须进行更进一步的处理
4XX 400~415 客户端错误,请求有语法错误或请求无法实现
5XX 500~505 服务器错误,服务器未能实现合法的请求

常见的状态码

名称 释义
200 OK:服务器成功处理了请求
301/302 Move Permanently(重定向):请求的 URL 已移走。Response 中应该包含一个 Location URL,说明资源现在所处的位置
304 Not Modified(未修改):客户端的缓存资源是最新的,需要客户端使用缓存
404 Not Found:未找到资源
401 禁止访问
501 Internal Server Error:服务器遇到一个错误,使其无法对请求提供服务
  • 200(OK)

  • 最常见的成功响应状态代码,它表明该请求成功地完成,所请求的资源成功的发送回客户端

  • 204(No Content,没有内容)

  • 返回的 HTTP 响应中只有一些 Header 和状态行,没有 Response Body

  • 作用:

  • 再不获取资源的情况下了解资源的情况(比如判断其类型)

  • 通过查看 HTTP 响应中的状态码查看某个对象是否存在

  • 通过查看 Header 测试资源是否被修改

(浏览器访问 ditu.google.cn,会捕获到很多 204)

  • 206(Partial Content,部分内容)

  • 206 状态码代表服务器已经成功处理了部分 GET 请求(只有发送 GET 方法的 HTTP 请求,Web 服务器才可能返回 206)

  • 206 的应用场景如下

  • FlashGet、迅雷或 HTTP 下载工具都是使用 206 状态码来实现断点续传的

  • 将一个大文档分解为多个下载同时下载,比如在线看视频(在线视频中,边看边下载,原理就是浏览器发送很多 Request,Web 服务器返回 206 状态码来实现的)

  • 例如 GET 方法的 HTTP 请求,Header 中包含 Range:bytes=5303296-5336063(意思就是请求得到 5303296~5336063 之间的数据)

  • 301(Moved Permanently)

  • 表示请求的网页已经永久性的转移到另一个地址

  • 使用情况

  • 防止用户数错域名:比如 Google 担心用户输错域名,就买下其他类似域名比如 go0gle.com,然后重定向到 www.google.com

  • 网站更换域名,比如京东以前的域名是 www.360buy.com,现在的域名是 www.jd.com

  • 有多个权重不错的域名,需要把所有的权重都传递到新域名上,这就需要 301 重定向。如果不设置 301,把多个域名绑定在一个主机头上,会被搜索引擎认为是两个相同的站点,不利于网站的排名。帮规定的域名越多,内容重复度越高,排名越低。

  • 302(Found)

  • 当我们访问一个 URL 时,服务器要我们访问另一个资源,这时候浏览器会继续发送一个 HTTP,请求访问新的资源。

  • 实例:在未登录状态下,直接访问需要登录才能访问的页面,会被服务器返回 302,跳转到登录页面。

  • 301 和 302 区别

  • 在语法上一模一样,都是在 location 中返回新的 URL,区别在于:

  • 301 表示旧地址的资源已经被永久移除了(资源不可访问),搜索引擎会把权重算到新地址

  • 302 表示旧地址资源还在(仍然可以访问),这个重定向只是临时地从旧地址跳转到新地址,搜索引擎会把权重算到旧地址

  • 304(Not Modified)

  • 304 状态码表示上次的文档已经被缓存了,还可以继续使用,304 的响应是没有 Body 的

  • 如果不想使用缓存,可以用 Ctrl+F5 强制刷新页面

  • 400(Bad Request)

  • 表示客户端请求有语法错误,发送的 HTTP 请求中的数据有错误(如表单有错误,Cookie 有错误)。不能被服务器所理解

  • 401(Unauthorized)

  • 指未授权错误。有些网页采用的是 HTTP 基本认证(Basic Authentication),需要在 HTTP 请求中带上 Authorization,否则服务器会返回状态码 401

  • 403(Forbidden)

  • 表示 Web 客户端发送的请求被 Web 服务器拒绝了。如果服务器向说明为什么拒绝请求,可以在 Body 中描述原因,但这个状态码通常表示服务器不想说明拒绝原因

  • 404(Not Found)

  • 当你访问一个 URL,这个 URL 的域名是正确的,但是资源不存在,服务器就会返回 404 状态码,告诉浏览器资源不存在(意味着输错了 URL)

  • 500(Internal Server Error)

  • 状态码 500 表示服务器内部错误,出现错误的原因很多:代码错误,数据库连接语句错误,程序内部抛出异常,空指针错误

  • 503(Server Unavailable)

  • 表示服务器暂时不可用。由于服务器维护或过载,服务器当时无法处理请求,这个状况是临时的,并在一段时间后恢复

Fiddler 中设置断点修改 HTTP 请求

全局断点

  • 点击菜单栏中的 Rules > Automatic Breakpoint > Before Requests ,或者【F11】,这种方法会拦截所有的会话

  • 取消全局断点,单击 Rules > Automatic Breakpoint > DIsabled,或者【Shift + F11】

单个断点

  • 在 Fiddler 左下角的 QuickExec 命令行中输入命令 bpu www.baidu.com,这种方法只会拦截 www.baidu.com

  • 想要消除消除单个断点,在命令行中输入 bpu

实例,Fiddler 修改 HTTP 请求

  • 浏览器想要访问 www.163.com,则通过 Fiddler 修改 HTTP 请求,让浏览器去访问 www.cnblogs.com

(1)在菜单栏单击 Rules > Automatic Breakpoint > Before Requests

(2)打开浏览器,输入 www.163.com,这时候你会发现任务栏的 Fiddler 图标在闪烁,这说明 Fiddler 拦截住了 HTTP 请求

(3)回到 Fiddler 界面,菜单栏单击单击 Rules > Automatic Breakpoint > Disabled(因为已经拦截住想要的 HTTP 请求,其他 HTTP 请求不需要拦截了)

(4)被拦截的 HTTP 请求有一个红色的 T 图标,选中所需要修改的 HTTP 请求,选中“Inspectors”面板,使用“Raw”选项卡修改

(5)把 GET 'url' url 改为"http://www.cnblogs.com/tankxiao",同时把 HOST 改为"www.cnblogs。com",然后单击绿色的"Run to Completion"俺妞放行

(6)返回浏览器,此时会发现浏览器打开的是 cnblogs 的页面了,如果单击黄色按钮"Break on Response",则会继续拦截这个 HTTP 请求的响应

Fiddler 设置断点修改 HTTP 响应

全局断点

  • 点击菜单栏中的 Rules > Automatic Breakpoint > After Response ,这种方法会中断所有的会话

  • 取消全局断点,单击 Rules > Automatic Breakpoint > Disabled,

单个断点

  • 在命令行中输入"bpafter www.baidu.com",这种方法只会中断 www.baidu.com

  • 想要消除单个断点,可以在命令行中输入"bpafter"

Fiddler 修改网页的标题

(1)启动 Fiddler,进行单个断点:"bpafter url"或全局断点"After Response"

(2)打开浏览器输入'url'

(3)在 Fiddler 选中该'url',在 Inspector 面板中选择 Raw 选项卡

(4)在 HTML 代码中修改标签,然后单击"RUN to Completion"放行</p>

#伪造 Refere

如果没有 Refere,网站会认为是盗链

(1)启动 Fiddler,设置全局断点"Before Requests"

(2)打开浏览器输入'url'

(3)这 Fiddler 会拦截该 Request,在 Raw 选项卡中修改 HTTP 请求,添加"Refere:url"

(4)单击绿色的"Run to Completion"

#Web 页面简单的性能测试

  • 一个网页的加载速度跟父请求和子请求都是有关系的

  • 子请求出现了 404 或者 500 之类的错误,会严重影响整个网页的加载速度

  • 子请求的响应速度慢也会影响网页加载的速度

  • Statistics 是一个详情和数据统计面板,显示每条 HTTP 请求的具体统计信息,在 Over Elapsed 中能看到 HTTP 响应返回所需要的响应的时间

  • HTTP
    75 引用 • 128 回帖 • 1 关注
  • Fiddler
    5 引用 • 26 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...