目录
概述
一、HTTP协议介绍
HTTP 协议一般指 HTTP(超文本传输协议)。HTTP协议是基于TCP协议来进行数据传输的
HTTP是一个客户端和服务器端请求和应答的标准,主要用于从万维网(即 WWW ,全称 world wide web )服务器传输超文本到本地浏览器之间的请求数据和响应数据的协议。客户端通过使用网页浏览器或者其它的工具发起一个HTTP请求到服务器上指定端口(默认端口为 80 ),服务器在收到请求之后,返回响应内容(文本.图片等) 。
超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议,是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准。(HTTP 是为 Web 浏览器与 Web 服务器之间的通信而设计的)
二、HTTP工作过程
- 浏览器进行DNS域名解析,得到对应的IP地址
- 根据这个IP,找到对应的服务器建立连接(三次握手)
- 建立TCP连接后发起HTTP请求(一个完整的http请求报文)
- 服务器响应HTTP请求,浏览器得到html代码(服务器如何响应)
- 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)
- 浏览器对页面进行渲染呈现给用户
- 服务器关闭TCP连接(四次挥手)
三、HTTP协议格式
1.请求:请求行、请求头部、空行和请求数据(主体信息)四部分组成
注意:头信息结束后有一个空行,(如果有头信息和主体信息),就需要这个空行做区分,即使没有主体信息,空行也不能少。
(1) 请求行:请求方法,请求路径,所用协议
例:POST /chapter17/user.html HTTP/1.1
请求方法:GET POST PUT DELETE TRACE HEAD OPTIONS PATCH CONNECT
请求路径:URL的一部分
所用协议:目前是HTTP/1.1
(2)请求头部+空行+请求体
Host:描述主机服务器地址
Content-Length:表示body数据的长度
Content-type:表示body数据的格式
- application/x-www-form-urlencoded:form表单提交数据的格式,body参数格式为,query: {字段:参数}
- application/json:body数据为json格式
Connection:keep-alive,表示长连接,HTTP 长连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。close已关闭
2.响应:响应行+响应头+空行+响应体
(1) 响应行:报文协议及版本,状态码及状态描述
例:HTTP/1.1 200 OK
(2) 响应头:
Location:指定响应的路径,与状态码302配合使用,完成跳转
Content-Type:响应正文的类型
Content-Disposition:通过浏览器以下载方式解析正文
Set-Cookie:与会话相关技术
(3) 响应体:
响应体,响应体是服务器回写给客户端的页面正文,浏览器将正文加载到内存,然后解析渲染 显示页面内容
四、HTTP请求方法
1.get请求 (重要)
从服务器获取指定的资源,只是用来查询数据,不对服务器的数据做任何的修改,新增,删除等操作。
get请求会把请求的参数附加在URL后面,这样是不安全的,在处理敏感数据时不用,或者参数做加密处理。
get请求其实本身HTTP协议并没有限制它的URL大小,但是不同的浏览器对其有不同的大小长度限制
2.post请求(重要)
根据请求负荷(报文body)对指定的资源做出处理,数据发送到服务器以创建或更新资源,侧重于更新数据.
post请求的请求参数都是请求body中
3.put请求
数据发送到服务器以创建或更新资源,侧重于创建数据
4.delete请求
用来删除指定的资源,它会删除URI给出的目标资源的所有当前内容
5.options请求
用来描述了目标资源的通信选项,返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性!
6.head请求
HEAD方法与GET方法相同,但没有响应体,仅传输状态行和标题部分。这对于恢复相应头部编写的元数据非常有用,而无需传输整个内容。
7.connect请求
CONNECT方法用来建立到给定URI标识的服务器的隧道;它通过简单的TCP / IP隧道更改请求连接,通常实使用解码的HTTP代理来进行SSL编码的通信(HTTPS)。
8.trace请求
TRACE方法用于沿着目标资源的路径执行消息环回测试;它回应收到的请求,以便客户可以看到中间服务器进行了哪些(假设任何)进度或增量。
五、HTTP状态码
状态码:由3位数字组成,第一个数字定义了响应的类别
1xx:指示信息,表示请求已接收,继续处理
2XX: 表示服务器成功处理了客户端的请求
- 200 OK:客户端请求成功
- 204 No Content:无内容。服务器成功处理,但未返回内容。一般用在只是客户端向服务器发送信息,而服务器不用向客户端返回什么信息的情况。不会刷新页面。
- 206 Partial Content:部分内容。服务器成功处理了部分 GET 请求。响应报文中包含Content-Range指定范围的实体内容
3XX: 表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向
- 300:(多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者选择一项操作,或提供操作列表供请求者选择。
- 301 Moved Permanently:永久重定向,表示请求的资源已经永久的搬到了其他位置。
- 302 Found:临时重定向,表示请求的资源临时搬到了其他位置
- 303 See Other:临时重定向,应使用GET定向获取请求资源。303功能与302一样,区别只是303明确客户端应该使用GET访问
- 304:(未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
4XX: 客户端错误,请求包含语法错误或无法完成请求
- 400 Bad Request:错误请求。客户端请求有语法错误,服务器无法理解。
- 401 Unauthorized:未授权。请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
- 403 Forbidden:禁止。服务器收到请求,但是拒绝提供服务
- 404 Not Found:未找到。请求资源不存在。比如,输入了错误的url
5XX: 这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错
- 500:(服务器内部错误) 服务器遇到错误,无法完成请求。
- 501:(尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
- 502:(错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
- 504:(网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。