HTTP协议报文结构

HTTP协议

HTTP协议(Hyper Text Transfer Protocol,超文本传输协议),是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议,是一种应用层的协议。

URL与URI的区别

统一资源标识符URI(uniform resource identifier):用来唯一标识一个资源,这个资源可以一个名字(URN)、一串编号、一个地址(URL)…

统一资源定位符URL(uniform resource locator):用来唯一定位一个资源,这个资源是一个网络上地址。

URI是一种抽象,URL是URI的一种具体实现,URI是URL的超集,URI包含URL。

一个完整的URL

下面是一个完整的URL:

https://blog.csdn.net/u022812849/article/details/107067859#t6

URL一般包含以下部分:

  • schema:协议部分,在Internet中可以使用多种协议,如HTTP,FTP。
  • host: web服务器的ip地址或者域名。
  • port: 服务端端口,http默认端口是80,https默认端口是443。
  • path: 资源访问路径。
  • query-string: 查询参数。

具体HTTP协议的格式可以参考RFC2616:https://tools.ietf.org/html/rfc2616。

一次完整的HTTP请求过程

  1. 首先通过DNS对域名进行解析(如果是IP地址就不用解析了),DNS解析的顺序:浏览器缓存->操作系统缓存->hosts文件->DNS服务器。
  2. 通过TCP三次握手,浏览器与服务器端建立连接。
  3. 浏览器发起HTTP请求。
  4. 服务器响应HTTP请求。
  5. 浏览器解析html代码,并请求html代码中的资源(css/js/image)。
  6. 浏览器对页面内容进行渲染并展示。
  7. TCP四次挥手关闭连接。

HTTP请求报文格式

在这里插入图片描述

请求报文示例:

GET / HTTP/1.1
Host: localhost:8899
Proxy-Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9

请求方法:

  • GET:主要用于获取信息,查询参数会拼接在URL中,显示在浏览器地址栏。
  • POST:主要用于提交表单,提交的内容会包含在正文中。
  • PUT:主要用于更新资源。
  • DELETE:主要用于删除资源。

HTTP响应报文格式

在这里插入图片描述
响应报文示例:

HTTP/1.1 200
Content-Type: text/html;charset=UTF-8
Content-Length: 5
Date: Mon, 02 Nov 2020 03:18:21 GMT
Keep-Alive: timeout=60
Connection: keep-alive

hello

状态码类别:

类别说明
1xxInformational(信息性状态码)接收的请求正在处理
2xxSuccess(成功状态码)请求正常处理完毕
3xxRedirection(重定向状态码)需要进行附加操作以完成请求
4xxClient Error(客户端错误状态码)服务器无法处理请求
5xxServer Error(服务器错误状态码)服务器处理请求出错

常见状态码:

状态码描述说明
100Continue上传大文件前使用
101Switch Protocols升级协议使用
102Processing服务正在处理
200OK成功返回响应
201Created有新资源在服务器端创建成功
301Moved Permanently资源永久性的重定向到另一个URI中
304Not Modified资源未被修改,可以复用缓存
400Bad Request请求格式错误
401Unauthorized用户信息认证失败
403Forbidden服务器没有权限执行此请求
404Not Found服务器没有找到对应的资源
405Method Not Allowed服务器不支持请求行中的method方法
500Internal Server Error服务器内部错误
502Bad Gateway代理服务器无法获取到合法响应
503Service Unavailable服务器尚未准备好处理当前请求

使用命令模拟http协议

使用Telnet模拟http协议。

# telnet 10.1.9.98 8899
Trying 10.1.9.98...
Connected to 10.1.9.98.
Escape character is '^]'.
GET / HTTP/1.0

HTTP/1.1 200 
Content-Type: text/plain;charset=UTF-8
Content-Length: 5
Date: Mon, 02 Nov 2020 03:55:01 GMT
Connection: close

hello

使用文件描述符模拟http协议:

# cd /proc/$$/fd
# exec 8<> /dev/tcp/www.baidu.com/80
# echo -e 'GET / HTTP/1.0\n' >& 8
# cat <& 8
...
  • 14
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

morris131

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值