抱歉,您的瀏覽器無法訪問本站
本頁面需要瀏覽器支持(啟用)JavaScript
了解詳情 >

HTTP协议

简介

HTTP协议,即超文本传输协议(Hypertext transfer protocol),它是基于应用层的协议,由request和response构成,是一个标准的客户端浏览器模型,同时它还是无状态协议。HTTP协议作为TCP/IP模型中应用层的协议也不例外。HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。

特点

  1. 基于请求/响应模型的协议,请求和响应必须成对,先有请求后有响应。
  2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  3. 灵活:http协议允许传输任意数据对象,传输类型由Content-type标识数据类型。
  4. 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。

版本

HTTP/1.0:发送一次请求,创建一次连接,获得一个Web资源,连接断开。
HTTP/1.1:发送一次请求,创建一次连接,获得多个Web资源,连接断开。

协议的组成

HTTP协议由HTTP请求和HTTP响应组成,其中请求和响应分别可以分为请求行、请求头、请求体和响应行,响应头,响应体。

pasted-49

请求头

例如: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
2
3
4
5
6
POST http://39.108.107.149:8080/vk/app/rest/ddp/iModelServiceImpl/findModelByType HTTP/1.1
User-Agent: Fiddler
Host: 39.108.107.149:8080
Content-Length: 20

name=城市&status=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 服务器名称

响应体

响应报文体,服务器发送给浏览器的正文响应体,响应体是服务器回写给客户端的页面正文,浏览器将正文加载到内存,然后解析渲染显示页面内容。

HTTPS