目录
一、 HTTP说明
1.HTTP简介
- 概念:HyperText Transfer Protocol,超文本传输协议,规定了浏览器与服务器之间数据传输的规则。
- 特点:
- 基于TCP协议:面向连接,安全
- 基于请求-响应模型:一次请求对应一次响应
- HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。
- 缺点:多次请求间无法共享数据(使用会话技术cookie、session解决这个问题)
- 优点:简单快速、灵活
2.HTTP请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法:GET
,POST
和HEAD
方法。
HTTP1.1新增了五种请求方法:OPTIONS
,PUT
,DELETE
,TRACE
和CONNECT
方法。
3.HTTP工作原理
HTTP协议基于客户/服务器模式,且面向连接。典型的HTTP事务处理包含如下过程。
以下是 HTTP 请求/响应的步骤:
1、客户端与服务器建立连接
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。
2、客户向服务器发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头、空行和请求体4部分组成。
3、服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由响应行、响应头、空行和响应体4部分组成。
4、客户与服务器关闭连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
二、 HTTP请求数据格式
HTTP请求由三部分组成,分别是:请求行、请求头(请求报头)、请求体(请求正文)。
请求行
请求头1
请求头2
...
请求空行
请求体
1.请求行
1. 请求行:请求数据的第一行。格式如下:
method request-URI HTTP-Version
其中method
代表请求方式,request-URI
代表请求统一资源表示符,HTTP-Version
代表协议版本。如下图:对于此请求行,
GET
代表请求方式,/
代表请求统一资源表示符,HTTP/1.1
代表协议版本。
2.请求头
2. 请求头:在请求行的下一行,格式为key:value形式
HTTP常见请求头:
Content-Type: 数据类型(text/html等)
Content-Length: Body的长度
Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
User-Agent: 声明用户的操作系统和浏览器版本信息;
referer: 当前页面是从哪个页面跳转过来的;
location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能.
如下图:
3.请求体
3. 请求体:POST请求的最后一部分,存放请求参数
- GET与POST请求区别
- GET请求的请求参数在请求行中,没有请求体。POST的请求的请求参数在请求体中。
- GET请求的请求参数大小有限制,POST没有。
GET和POST的区别
①GET请求的请求参数会放在请求行中、URL之后,以?分割URL和传输数据,参数之间以&相连,如csdn.net/md?name=test1&id=123。POST的请求的请求参数在请求体中。
②GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
③GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
④GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.
三、 HTTP响应数据格式
在接受和解释请求消息后,服务器返回一个HTTP响应信息。HTTP响应也是由三部分组成,分别是:响应行、响应头、响应体。
响应行
响应头1
响应头2
...
响应空行
响应体
1.响应行
1. 响应行:响应数据的第一行。格式如下:
HTTP-Version status-code status-phrase
其中HTTP-Version
代表协议版本,status-code
代表响应状态码,status-phrase
代表状态描述。如下图:
对于此响应行,HTTP/1.1
代表协议版本,200
代表响应状态码,OK
表示状态码描述。
2.响应头
2. 响应头:在响应行的下一行,格式为key:value形式 HTTP常见响应头
Content-Type:表示被响应内容的类型,例如text/html,image/jpeg
Content-Length:表示被响应内容的长度(字节数)
Content-Encoding:表示该响应压缩方式,例如gzip
Cache-Control:指示客户端如何缓存,例如max-age=300表示最多可以缓存300秒
如下图:
3.响应体
3. 响应体:最后一部分,存放响应数据
四、HTTP之状态码
状态码由3位数字组成,第一个数字定义了响应类别,共5大类:
状态码分类 | 说明 |
---|---|
1xx | 响应中–临时状态码,表示请求已接收,继续处理 |
2xx | 成功–表示请求已被成功接收并处理完成 |
3xx | 重定向–让客户端再次发起一个请求以完成处理 |
4xx | 客户端错误–请求有语法错误或请求无法实现 |
5xx | 服务器端错误–服务器未能实现合法的请求 |
常见状态码
状态码 | 状态码描述 | 解释 |
---|---|---|
200 | OK | 请求已正常处理 |
302 | Found | 指示锁清秋的资源已移动到由Location响应头给你的那个的URL,浏览器自动重新访问这个页面 |
304 | Not Modified | 隐式重定向,告知客户端所请求的资源至上次取得后服务器并未改变,直接使用本地缓存即可 |
400 | Bad Request | 客户端有语法错误,不能被服务器所理解 |
403 | Forbidden | 服务器收到请求,但拒绝提供服务。例:无权限访问相关资源 |
404 | Not Found | 请求资源不存在,一般是URL输入有误,或网站资源被删除 |
428 | Precondition Required | 服务器要求有条件的请求,告诉客户端想要访问某资源,必须携带特定的请求头 |
429 | Too Many Requests | 请求太多,可以限制客户端请求某个资源的数量,配合Retry-After(多长时间后可以请求)响应头一起使用 |
500 | Internal Server Error | 服务器发生不可预期的错误。服务器端在执行请求时发生了错误。也有可能是web应用存在bug或某些临时故障 |
503 | Service Unavailable | 服务器暂时处于超负载或正在停机维护,现在无法处理请求 |
511 | Network Authentication Required | 客户端需要进行身份验证才能获取网络权限 |