2 HTTP协议详解(应用层)

初识了大的网络传输框架,现在先来学习HTTP协议。

推荐博文:https://www.cnblogs.com/whgk/p/6130882.html

应用层

直接为用户使用的应用进程,通俗的来说就是程序员写的一个个解决实际问题的网络程序、APP。

协议
协议就是一种约定吧,双方或者多方达成统一的共识。就像接口的存在意义。

因为应用层是程序员实现的程序,所以这个应用层协议也应该是程序员自己定的,但其实不用这么麻烦,已经存在的协议,譬如HTTP协议、HTTPS协议、FTP协议、DNS协议、SSH协议等,好用又方便。
接下来就了解一下HTTP超文本传输协议。

HTTP协议


是一种基于TCP的应用层协议,也是目前为止最为流行的应用层协议之一,可以说HTTP协议是万维网的基石。历经了0.9、HTTP/1.0、HTTP/1.1、HTTP/2几个版本。
首先需要明白HTTP是一种客户端请求、服务器应答式的应用层传输协议,也就是说服务器端是不可能主动向客户端发送数据的,如果服务器能主动向客户端发送数据那这个世界就乱套了,同时还说明了在网络正常的情况下请求和响应都是一一对应的。

1.请求报文

客户端—>服务器

1.第一行:方法(POST、GET等)+URL+协议版本号

​ eg:GET http://www.baidu.com/s HTTP/1.1

2.协议头部 header:每一行都是一对属性键值对(下面介绍),用":"分隔

3.空行 :标志协议报头结束

4.正文 body :通常情况下GET方法对应的请求没有body,

POST方法对应请求有body。键值对用"&"分隔,和URL格式一样。

具体和哪个协议格式一样,还要看协议头部中的Content-Type。

在这里插入图片描述

GET /admin_ui/rdx/core/images/close.png HTTP/1.1
Accept: */*
Referer: http://xxx.xxx.xxx.xxx/menu/neo
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Host: xxx.xxx.xxx.xxx
Connection: Keep-Alive
Cookie: startupapp=neo; is_cisco_platform=0; rdx_pagination_size=250%20Per%20Page; SESSID=deb31b8eb9ca68a514cf55777744e339

1.1 URL

首先我们认识一下URL,它并不陌生,其实就是我们俗称的“网址”

URL组成:
协议方案名+登陆信息+服务器地址+服务器端口号
+带层次的文件路径+查询字符串(wd= 查询关键字)+片段标识

  • http:/ /www.baidu.com/java/java-tutorial.html

    协议名:https: //
    服务器地址(域名):www.baidu.com/s
    通过域名能知道IP地址,IP地址也能查到域名。
    带层次的文件路径:/java/java-tutorial.html

  • http: //tieba.baidu.com /f? kw=java&fr=ala0&tpl=5
    查询字符串: kw=java

URL中包含了很多信息,那些符号也都表示着特殊含义,但我们搜索的内容如果有这些字符怎么办?那就需要转义操作,我们需要了解那些转义规则。
规则:
将转码的字符转化为16进制,从右向左,取四位,每两位做一位,前面加%,格式:%XY

参数格式:键值对用"=“分隔,用”&"分隔。用decode解译。


1.2 HTTP常见方法

  • GET—获取资源
    意思是获取URL指定的资源,这个请求方式是最简单的也是最常用的。使用GET 方法时,可以将请求参数和对应的值附加在 URI 后面,利用一个问号(“?”)将资源的URI和请求参数隔开,参数之间使用与符号(“&”)隔开,因此传递参数长度也受到了限制,而且与隐私相关的信息也直接暴露在URI中。不安全,会暴露信息。

  • POST—传输实体主体
    一般用提交信息或数据,请求服务器进行处理(例如提交表单或者上传文件)。表单使用POST相对GET来说还是比较隐秘的,而且GET的URL有长度限制,而上传大文件就必须要使用POST了。

  • PUT—传输文件

  • HEAD—获得报文首部

  • DELETE—删除文件

  • LINK—建立和资源之间的练习

  • UNLIKE—断开联系关系

  • OPTION—询问支持的方法

  • CONNECT—要求用隧道协议连接代理


GET和POST区别?

用户自定义的数据是放在URL(GET)里面还是body(POST)里面(键值对结构)。

剩下实现功能都一样。


2.响应报文

服务器—>客户端

1.首行:协议版本号 状态码 状态码描述信息

​ eg: HTTP/1.1 200 OK

2.协议头部 header部分 :每一行都是一对键值对,用":"分隔

3.空行 :标志协议头结束

4.正文 body :HTML格式数据

响应报文

HTTP/1.1 200 OK
Bdpagetype: 1
Bdqid: 0xacbbb9d800005133
Cache-Control: private
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html
Cxy_all: baidu+f8b5e5b521b3644ef7f3455ea441c5d0
Date: Fri, 12 Oct 2018 06:36:28 GMT
Expires: Fri, 12 Oct 2018 06:36:26 GMT
Server: BWS/1.1
Set-Cookie: delPer=0; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: BD_HOME=0; path=/
Set-Cookie: H_PS_PSSID=1433_21112_18560_26350_27245_22158; path=/; domain=.baidu.com
Vary: Accept-Encoding
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked
 
<!DOCTYPE html>
<!--STATUS OK-->

2.1 HTTP状态码

  • 1**—信息性状态码—接收的请求正在处理

  • 2**—成功状态码—请求正常处理完毕

  • 3**—重定向状态码—需要进行附加操作以完成(类比呼叫转移)

    报文最底端有Location,表示原地址。

    永久性、暂时性。

  • 4**—客户端错误状态码—服务器无法处理请求

  • 5**—服务器错误状态码—服务器处理请求出错

200:客户端请求成功。

302:重定向。

400:请求语法错误,服务器无法理解。

403:无权限,服务器收到请求,但拒绝提供服务。

404:Not Found请求资源不存在。

418:teapot 彩蛋

500:服务器内部错误。

502:bad gateway 某服务器可能挂了

503:服务器当前不能处理客户端请求,可能需要一段时间后才能恢复正常。

504:Gateway Timeout上层服务器没有及时响应请求


3. HTTP头部属性字段

  • Contect-Type—数据类型(text、html等)

  • Content-Length—body长度

    防止少读多读正文部分。

  • Host—客户端告诉服务器资源所在的主机端口

  • User-Agent—声明用户的操作系统和浏览器的版本信息

  • referer—当前页面所跳转过来的页面(用于获取从哪个浏览器跳转)

    避免运营商劫持,可以HTTPS加密,防止修改报文。

  • location—搭配3**状态码使用,告诉客户端接下来访问哪里

    location+接下来访问的地址链接

  • Cookie(字符串)—通常用于会话功能

    字段包含用户的身份标识信息,每个域名保存一份,有些浏览器上限4k。


4. 分享几个抓包工具

  • Hping
    Hping是最受欢迎和免费的抓包工具之一。可用于各种平台。它允许你修改和发送自定义的ICMP,UDP,TCP和原始IP数据包。此工具由网络管理员用于防火墙和网络的安全审计和测试。
  • Ostinato
    可以轻松地修改任何协议的任何字段。是一个开源和跨平台网络包生成器和分析工具,可用于各种平台。
  • Colasoft Packet Builder
    是一个用于创建和编辑网络数据包的免费工具。如果你是网络管理员,你可以使用此工具来测试你的网络。它适用于所有可用版本的Windows操作系统。
  • Netcat
    是一个流行的工具,可以在TCP或UDP网络中读取和写入数据。它可以创建几乎所有种类的网络连接与端口绑定。这个工具最初被称为Hobbit。
  • epb – Ethernet Packet Bombardier
    也是一个类似的工具。它允许你发送自定义的以太网包。此工具不提供任何GUI,但它是易于使用。
  • fiddler
    fildder 是位于客户端和服务器端的http代理,也是目前最常用的http抓包工具,它能记录客户端和服务器之间的所有的http请求,可以针对特定的http请求,分析请求数据,设置断点,调试web应用,修改请求的数据,甚至可以修改服务器返回的数据,既然是代理,也就是说,客户端所有的请求都要先经过fiddler,然后转发给相应的服务器,反之服务器所有的响应,也会先通过fildder然后转发给客户端。

要查看HTTP的报文内容,建议用fiddler抓包比较方便清晰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值