HTTP协议
简介
HTTP协议,即超文本传输协议(Hypertext transfer protocol),它是基于应用层的协议,由request和response构成,是一个标准的客户端浏览器模型,同时它还是无状态协议。HTTP协议作为TCP/IP模型中应用层的协议也不例外。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。
特点
- 基于请求/响应模型的协议,请求和响应必须成对,先有请求后有响应。
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
- 灵活:http协议允许传输任意数据对象,传输类型由Content-type标识数据类型。
- 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
版本
HTTP/1.0:发送一次请求,创建一次连接,获得一个Web资源,连接断开。
HTTP/1.1:发送一次请求,创建一次连接,获得多个Web资源,连接断开。
协议的组成
HTTP协议由HTTP请求和HTTP响应组成,其中请求和响应分别可以分为请求行、请求头、请求体和响应行,响应头,响应体。
请求头
例如:POST /chapter17/user.html HTTP/1.1
格式:请求方法 请求路径 请求协议
常用的请求方法有POST,GET,PUT,DELETE,在RESTFUL风格中分别对应CRUD。
GET和POST有啥区别
这个问题真的是老是被问到。。。
1.传输数据方式:
请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。
POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数据。
2. 传输数据的大小:
在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。
对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。
请求行
例如:Host: 39.108.107.149:8080
格式:键:值 (跟没写是一样的。。)
常见请求头
Accept(声明可以接受的MIME资源)
Accept:text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, image/apng, /; q=0.8
作用: 向服务器申明客户端(浏览器)可以接受的媒体类型(MIME)的资源
解释: 浏览器可以接受 text/html、application/xhtml+xml、application/xml类型,通配符/ 表示任意类型的数据。并且浏览器按照该顺序进行接收。( text/html —> application/xhtml+xml —> application/xml)
Accept-Encoding(声明可以接受的编码格式)
Accept-encoding: gzip, deflate, br
作用:向服务器申明客户端(浏览器)接收的编码方法,通常为压缩方法
解释:浏览器支持采用经过 gzip,deflate 或 br 压缩过的资源
Accept-Language(声明可以接受的语言格式)
作用:向服务器申明客户端(浏览器)接收的语言
解释:浏览器能够接受 en-US, en 和 zh-CN 三种语言,其中 en-US 的权重最高 ( q 最高为1,最低为 0),服务器优先返回 en-US 语言
延伸:语言与字符集的区别:zh-CN 为汉语,汉语中有许多的编码:gbk2312 等
Refer(声明该页面从那里来的)
Refer:https://www.baidu.com/xxxxxxxxxx
作用:告诉服务器该页面从哪个页面链接的
解释:该页面从 https://www.baidu.com 中的搜索结果中点击过来的
User-Agent(声明客户端电脑信息)
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
作用:告诉服务器,客户端的浏览器信息与操作系统相关信息(一般就是通过这个头属性来区分手机和电脑用户的)
Content-Length(请求体的长度)
请求体
当请求方法是POST时请求体会有请求的参数。
1 | POST http://39.108.107.149:8080/vk/app/rest/ddp/iModelServiceImpl/findModelByType HTTP/1.1 |
响应头
例如:HTTP/1.1 200 OK
格式:协议/版本 状态码 状态码描述
常见状态码
1xx:通知
1xx开头的状态码用来表示信息
状态码 | 含义 | 描述 |
---|---|---|
100 | 继续 | 表示请求已接受,请客户端继续发送剩下部分 |
101 | 切换协议 | 请求客户端切换协议 |
2xx:成功
2xx开头的状态码表示操作成功
状态码 | 含义 | 描述 |
---|---|---|
200 | 成功 | 服务器已成功处理请求 |
201 | 已创建 | 请求成功且创建了新的资源 |
202 | 已接受 | 请求成功但还未处理 |
204 | 无内容 | 服务器成功处理内容但没有返回任何内容 |
3xx:重定向
3xx开头的状态码表示客户端需要做些额外工作才能得到所需要的资源
状态码 | 含义 | 描述 |
---|---|---|
301 | 永久移动 | 表示请求的页面已跳转到新的url去了 |
302 | 暂时移动 | 服务器目前从不同位置的网页响应请求,但请求仍继续使用原有位置来进行以后的请求 |
4xx: 客户端错误
4xx开头的状态码表示客户端请求错误
状态码 | 含义 | 描述 |
---|---|---|
400 | 错误请求 | 服务端不明白该请求 |
401 | 未授权 | 要求用户的身份验证 |
403 | 禁止 | 服务端禁止请求 |
404 | 未找到 | 服务器找不到指定页面 |
5xx:服务端错误
5xx开头的状态码表示服务端出现错误
状态码 | 含义 | 描述 |
---|---|---|
500 | 服务端错误 | 服务端报错无法处理改请求 |
503 | 服务不可用 | 服务器目前无法使用 |
响应头
响应头跟请求头一样,也是由多个键值属性构成的
常见响应头
常见响应头 | 描述 |
---|---|
Location | 指定响应的路径,需要与状态码302配合使用,完成跳转。 |
Content-type | 响应正文的类型(MIME类型) |
Content-Disposition | 通过浏览器以下载方式解析正文 |
Content-Encoding | 服务器使用的压缩格式 |
Content-length | 响应正文的长度 |
Refresh | 定时刷新,格式:秒数;url=路径。url可省略,默认值为当前页 |
Server | 服务器名称 |
响应体
响应报文体,服务器发送给浏览器的正文响应体,响应体是服务器回写给客户端的页面正文,浏览器将正文加载到内存,然后解析渲染显示页面内容。