HTTP协议
基础内容
介绍
HTTP协议(HyperText Transfer Protocol,超文本传输协议)
是用于从WWW服务器传输超文本到本地浏览器的传送协议。
它可以使浏览器更加高效,使网络传输减少。
它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
协议栈位置
- HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS
- 默认HTTP的端口号为80,HTTPS的端口号为443。
- HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。
- HTTP是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。
工作流程
- 1− 客户机与服务器建立TCP连接,只要单击某个超级链接,HTTP的工作开始。
-
2−
建立连接后,客户机发送一个请求给服务器
- 请求方式的格式为:
- 统一资源标识符(URL)
- 协议版本号
- MIME信息包括请求修饰符、客户机信息和可能的内容。
-
3−
服务器接到请求后,给予相应的响应信息
- 其格式为:
- 信息的协议版本号
- 一个成功或错误的代码
- MIME信息包括服务器信息、实体信息和可能的内容。
- 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器更具请求的内容决定是否关闭连接
具体格式
请求格式
总略
![HTTP请求](/Users/Toudsour/Desktop/屏幕快照 2016-03-26 下午4.00.29.png)
从上到下分别是:
- 请求方法 URL 版本信息
- 请求头
- 请求正文
请求方法 URL 版本信息
有时候有这个一行+host就可以完成请求,至少我们学校网站是这样
请求方法
在HTTP中请求方法如下:
方法名 | 提供的服务 |
---|---|
GET | 检索URI中标识资源的一个简单请求 |
HEAD | 与GET方法相同,服务器只返回状态行和头标,并不返回请求文档 |
POST | 服务器接受被写入客户端输出流中的数据的请求 |
PUT | 服务器保存请求数据作为指定URI新内容的请求 |
DELETE | 服务器删除URI中命名的资源的请求 |
OPTIONS | 关于服务器支持的请求方法信息的请求 |
TRACE | Web服务器反馈Http请求和其头标的请求 |
CONNECT | 已文档化但当前未实现的一个方法,预留做隧道处理 |
在互联网中最常用的是GET和POST
URL
关于URL的具体定义可以百度一下
在这里,通常只要给出相对服务器根目录的相对地址就可以了,所以通常以 / 开头
版本信息
就是版本信息吧,现在主要用的都是HTTP/1.1
注意一下后边有回车换行,表示下边是头域
请求头
Host
Host头域指定请求资源的Intenet主机和端口号
HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。
Accept
即客户端可以接受的MIME 类型列表,如image/gif text/html, application/msword
Connection
如果此项为keep-alive的话,请求完成后服务器和客户端不会立即断开连接
Cookie
具体可以查看Cookie/Session的相关知识
有点类似于在干洗店开了个会员,你去洗衣服出示的会员证吧。
User-Agent
User-Agent头域的内容包含发出请求的用户信息。
Referer
允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。
请求正文
请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束。
接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息等等。
在这里POST在这里提交信息,而GET的信息直接写在URL中
响应格式
总略
![HTTP请求](/Users/Toudsour/Desktop/屏幕快照 2016-03-26 下午4.00.07.png)
HTTP应答与HTTP请求相似,HTTP响应也由3个部分构成,分别是:
- 协议状态版本代码描述
- 响应头
- 响应正文
协议版本 状态代码 描述
协议状态
没什么好说的
状态代码
HTTP状态码反映了Web服务器处理HTTP请求状态。
HTTP状态码由3位数字构成,其中首位数字定义了应答码的类型:
- 1XX-信息类(Information),表示收到Web浏览器请求,正在进一步的处理中
- 2XX-成功类(Successful),表示用户请求被正确接收,理解和处理例
- 3XX-重定向类(Redirection),表示请求没有成功,客户必须采取进一步的动作
- 4XX-客户端错误(Client Error),表示客户端提交的请求有错误
- 5XX-服务器错误(Server Error)表示服务器不能完成对请求的处理
下边是一些著名的状态码:
版本号 | 状态码 | 描述 | 内容 |
---|---|---|---|
HTTP1.1 | 100 | continue | 继续追加后继内容 |
HTTP1.1 | 200 | OK | 一切正常 |
HTTP1.1 | 301 | Moved Permanently | 请求的文档在其它地方,会自动连接 |
HTTP1.1 | 403 | Forbidden | 绝对拒绝你访问这个资源,不管授权没有 |
HTTP1.1 | 400 | Bad Request | 客户端请求中的不良语法 |
HTTP1.1 | 404 | Not Found | 最常见,绝对是大名鼎鼎的找不到 |
响应头
Date
D表示消息发送的时间,时间的描述格式由rfc822定义
Server
Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。
Content-Length
响应中的字节数,只在浏览器使用永久(Keep-alive)HTTP连接时需要
Keep-alive
对于keep-alive的相关信息
Connection
如果此项为keep-alive的话,请求完成后服务器和客户端不会立即断开连接
Content-Type
用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型
Tips
没有什么比抓包更好的方法学习网络拉。