HTTP原理入门

HTTP服务器用途

  • 用于Web服务器访问网站
  • 上传,下载
  • 注册,登录,数据请求交互操作
  • 服务器GM封号,限制登录,发放道具,后台充值
  • 其他企业级应用的数据获取

HTTP工作原理

HTTP协议采用请求/响应模型——客户端向服务器发送请求报文,服务器以一个状态作为响应。

客户端和服务器进行一次交互的过程主要可以拆解为一下5步:

  1. 客户端连接到HTTP服务器:Http客户端与Web服务器建立一个TCP连接
  2. 客户端向服务器发起HTTP请求:客户端通过已建立的TCP连接向服务器发送一个请求报文
  3. 服务器受到HTTP请求,并返回Http响应:服务器解析请求,定位请求资源,服务器将资源副本写道TCP连接,由客户端进行读取
  4. 释放TCP连接:若connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection模式为keep-alive,则该连接会保持一段时间,在该时间内可以继续接收请求
  5. 客户端浏览器解析html内容:客户端将服务器响应的信息进行解析

URL

何为URL?URL全拼Uniform Resource Locator,即统一资源定位符,我们俗称的网址一般就是指它。

组成:

  • 传送协议、层级URL标记符号(“//”)
  • 传送资源需要的凭证信息(可省略)
  • 服务器(通常为域名,有时为IP地址)
  • 端口号(以数字方式表示,若为Http的默认值“:80”可省略)
  • 路径(以“/”区分路径中的各级目录)
  • 查询(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突)

在浏览器内键入某个URL,其内部一般具体会有以下的流程:

  1. 浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址
  2. 之后,根据IP地址和默认端口80,和服务器建立TCP连接
  3. 浏览器发送出读取文件的Http请求
  4. 服务器对浏览器请求做出响应,将对应的请求数据发送给浏览器
  5. 释放TCP连接
  6. 浏览器将对应数据进行显示

报文

请求报文

请求报文的结构:

请添加图片描述

请求行(requestline)

  • 请求方法

GET方法主要用于查询和下载,参数直接显示在地址栏中,不适合传递私密数据,也不适合传递大量数据;
POST方法常用于游戏行业,将数据封装在请求数据中,对数据量没有限制,不会显示在地址栏中;
PUT方法主要用于上传,将资源存放到指定位置,与POST的区别主要体现在是否指定存放位置(POST是服务器自己决定位置);
HEAD
DELETE
OPTIONS
TRACE
CONNECT

  • 请求URL(不包括域名)
  • HTTP协议版本
POST /user HTTP/1.1 \r\n

请求头部(header)

请求头部由关键字/值对组成,每行一对。

HOST: 127.0.0.1:8080 \r\n
User-Agent: Mozilla/5.0 \r\n
Accept: text/xml, application/xml, text/html \r\n
Accept-Language: zh-cn,zh;q=0.5 \r\n
Accept-Encoding: gzip,deflate \r\n
Accept-Charset: gb2312,urf-8;q=0.7,*;q=0.7
Content-Type: application/x-www-form-urlencoded;charset=:UTF-8 \r\n
Content-Length: 12
Connection: keep-alive/close
Keep-Alive: 300
  • 客户端告诉服务器,其想要访问的主机名;
  • HTTP客户端运行的浏览器类型的详细信息;
  • 客户端希望接收的数据类型;
  • 指定HTTP客户端浏览器用来展示返回信息所优先选择的语言;
  • 浏览器能够进行解码的数据编码方式;
  • 请求头用来告诉服务器客户端所能够处理的字符集类型;
  • 显示此HTTP请求提交的内容类型;
  • 表示请求消息正文的长度;
  • 表示是否需要持久连接;
  • 显示此HTTP连接的Keep-Alive时间;

空行

请求头之后是一个空行,通知服务器以下不再有其他的请求头的内容。

\r\n

请求体

待发送的数据。

GET没有请求数据,POST有。相关的请求头内容有Content-TypeContent-Length

name=world

请求报文的实体举例:

请添加图片描述

响应报文

响应报文的结构:

请添加图片描述

状态行

HTTP/1.1 200 OK
  • 服务器HTTP协议版本
  • 响应状态码

由3位数字组成,第一个数字定义了响应的类别:

1xx消息——表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程;
2xx成功——表示成功接收请求并已完成整个处理过程,常用200;
3xx重定向——需要后续操作才能完成这一请求;
4xx请求错误——客户端的请求有错误,常用404,403;
5xx服务器错误——服务端出现错误,常用500;

  • 状态码的文本描述

取值举例:

200 OK:表示客户端请求成功;
400 Bad Request:表示客户端请求有语法错误,不能被服务器理解;
401 Unauthorized:表示请求未经授权;
403 Forbidden
404 Not Found

响应头部

用于描述服务器的基本信息以及数据的描述,服务器通过返回这些数据的描述信息,可以通知客户端如何处理它返回的信息。

  • Allow:服务器支持哪些请求方法
  • Content-Encoding:文档的编码方式
  • Content-Length:内容长度
  • Content-Type:后续文档属于什么类型
  • Date:当前的GMT时间
  • Expires:告知浏览器把回送的资源缓存多长的时间,-1或0表示不缓存
  • Last-Modified:文档的最后改动时间
  • Location:配合302状态码使用,用于重定向接收者到一个新的URL地址
  • Refresh:告诉浏览器隔多久刷新一次,以秒计
  • Server:服务器通过这个头告诉浏览器服务器的类型
  • Set-Cookie:设置和页面关联的Cookie
  • Transfer-Encoding:数据的传送格式
  • WWW-Authenticate:客户应该在Authorization头中提供什么类型的授权信息

空行

通过客户端以下不再有其他的响应头

响应体

响应的消息体。

响应报文的实体举例:

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Claude的羽毛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值