对HTTP协议的理解

HTTP协议 — 超文本传输协议

HTTP协议是应用层协议,在互联网上广泛被使用,BS结构通讯的
基础协议。浏览器与服务端之间就是使用HTTP协议交互数据的,
而HTTP协议要求必须建立在可靠的传输协议基础之上进行,所以
底层的通讯协议通常使用TCP协议。

HTTP协议规定了客户端(浏览器)与服务端之间传输的数据的格式
及内容,并且也规定了两者之间的通讯方式。

在HTTP协议中要求的通讯方式为:一次请求一次响应。
即:
客户端主动连接服务端并发起请求(Request),服务端在收到请求
后给予响应(Response).
服务端永远不会主动连接客户端,也不会主动发送任何响应。

HTTP常见的两个版本:1.0和1.1,现在基本都是使用HTTP1.1协议
1.0与1.1协议有一个比较明显的改动:
1.0协议在通讯时,客户端与服务端建立一次TCP连接后,发送一
次请求,当服务端处理并给予响应后即断开连接。
1.1协议则是在建立一次TCP连接后,可以经历多次请求与响应的
过程后再断开连接(connection : keep-alive 长连接 )。在当今互联网应用中,这样的做法可以减少
不小的系统开销并提高响应效率。

HTTP协议中所有字符信息所使用的字符集为:ISO8859-1,该字符集
是一个欧洲编码集,里面不含有中文等字符信息。所以HTTP协议中
的字符信息部分不得出现如中文这样的字符,一般只用字母,数字,
符号.

HTTP请求定义(Request):

一个请求应当包含三部分:
请求行,消息头,消息正文
在这里插入图片描述
1:请求行
请求行是由一行字符串组成的(以CRLF两个符号结尾表示一行结束)

格式:
method url protocol(CRLF)
请求方式 请求资源路径 协议版本

例:
GET /index.html HTTP/1.1(CRLF)

注:
CR,LF是两个不可见符号,在ASC编码中对应的数字为13,10
CR:回车符 LF:换行符

请求方式常见的有两种:
GET:地址栏请求,用户若传递数据则是直接拼在资源路径中
POST:将用户传递的数据包含在消息正文中传递

2:消息头
消息头是由若干行构成,每一行为一个消息头。消息头是客户端
通讯过程中传递给服务端的一些附加信息,比如有的用来告知
服务端客户端的基本情况(浏览器内核,操作系统信息等),有的
是用来维持通讯过程的必要信息,有的是用来说明是否含有消息
正文以及正文内容及长度等等。

每个头的格式:
name: value(CRLF) (键值对)

在最后一个消息头后面会单独跟一个CRLF,表示消息头部分结束

例如:
Host: localhost:8088(CRLF)
Connection: keep-alive(CRLF)
Upgrade-Insecure-Requests: 1(CRLF)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36(CRLF)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8(CRLF)
Accept-Encoding: gzip, deflate, br(CRLF)
Accept-Language: zh-CN,zh;q=0.9(CRLF)(CRLF)

3:消息正文
一个请求中可以不包含消息正文部分,消息正文是2进制数据。
是用户提交给服务端的数据。
具体消息正文有多少字节,这些字节表示的是什么类型的数据
可以根据该请求中的两个消息头:
Content-Type与Content-Length得知.

一个请求内容大致为:
GET /index.html HTTP/1.1
Host: localhost:8088
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9(CRLF)

响应(Response)

响应是服务端发送给客户端的内容,HTTP协议对响应的格式有
所规定。一个响应也含有三部分:状态行,响应头,响应正文
在这里插入图片描述
1:状态行
状态行也是由一行字符串构成(以CRLF结尾)
格式:
protocol status_code status_reason(CRLF)
协议版本 状态代码 状态描述

状态代码是由一个3位数字组成,不同的状态代码是用来告知
客户端服务端对此请求的处理结果。它分为5类:
1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务端错误

常见的状态代码:
200 OK:请求处理成功,正常响应客户端
302 Moved Temporarily:要求客户端重定向到指定地址
400 Bad Request:客户端请求有语法错误,不能被服务器所理解
401 Unauthorized:请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用
403 Forbidden:服务器收到请求,但是拒绝提供服务
404 Not Found:客户端请求错误,服务端无法处理该请求
500 Internal Server Error:服务端处理请求时发生了错误
503 Service Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常

状态代码与对应的描述:
200 OK
201 Created
202 Accepted
204 No Content
301 Moved Permanently
302 Moved Temporarily
304 Not Modified
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable

2:响应头
响应头的格式与请求中的消息头一样,由若干行组成,每行的
格式:
name: value(CRLF)
并且最后一个响应头发送完毕后会单独发送一个CRLF表示响应
头部分发送完毕。
响应头是服务端发送给客户端的附加信息。

3:响应正文
响应正文也是2进制数据,是服务端响应客户端所请求的资源数据。

一个响应大致内容如下:
HTTP/1.1 200 OK(CRLF)
Content-Type: text/html(CRLF)
Content-Length: 3452(CRLF)(CRLF)
10010110100101010100101001…

在浏览器地址栏键入URL,按下回车之后经历的流程

  1. DNS解析URL中的域名对应的IP地址
  2. 得到IP地址后,会和对应端口(默认80)建立TCP三次握手连接
  3. 发送HTTP请求
  4. 服务器处理请求并返回HTTP报文
  5. 浏览器解析渲染页面
  6. 连接结束,关闭连接
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值