HTTP协议
HTTP协议(超文本传输协议),用于万维网服务器传输超文本到本地浏览器的传输协议。HTTP是一个基于TCP/IP通信协议来传送数据(HTML/文件/图片等)等的应用层协议。HTTP协议工作在C/S或者B/S架构。浏览器作为HTTP客户端通过URI想HTTP的服务器发送所有请求。web服务器根据收到 的请求后,向客户端发送响应消息。 http://www.runoob.com/http/http‐tutorial.html
http : 协议部分 www.runoob.com: 域名部分或IP地址,[端口]
/http/: 虚拟目录部分
http‐tutorial.html:文件
- 工作流程
- 服务端
- 建立连接或者处理请求
- 接受请求
- 处理请求
- 访问资源
- 构建响应报文
- 发送响应报文
- 日志记录
- 服务端
- 请求报文
- request消息格式:请求行、请求头部、空行、数据部分四个部分
GET /562f25980001b1b106000338.jpg HTTP/1.1 #请求行:请求方法 URL 协议/协议号
Host img.mukewang.com # 请求资源的主机
User‐Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 # 包含发送用户信息等
Accept image/webp,image/,/*;q=0.8 # 首选的媒体类型
Referer http://www.imooc.com/ # 指明当前资源的原始资源的URL
Accept‐Encoding gzip, deflate, sdch # 支持编码方式
Accept‐Language zh‐CN,zh;q=0.8 # 支持使用语言空行
name=Professional%20Ajax&publisher=Wiley #请求数据
- request消息格式:请求行、请求头部、空行、数据部分四个部分
HTTP协议是一个无状态协议,cookie和session可以去做会话记录。
cookie一般放在客户端,形式是键值对,由于cookie是存放在本地浏览器中可能会造成大量存储。
session一般放在服务端,形式也是键值对,缓存在服务器之上,可以避免本地cookie过多所带来的影响。
响应报文
- response消息格式:状态行、响应报头、空行和响应数据四个部分组成
状态行:协议/协议版本 状态码 状态消息
响应头部:说明客户端使用的一些附加信息 空行 响应数据
- response消息格式:状态行、响应报头、空行和响应数据四个部分组成
请求方法
- GET:请求指定的页面信息
- HEAD:类似get请求,但是返回仅仅是报头
- POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)
- PUT:从客户端向服务器传送的数据取代指定的文档内容
- DELETE:请求服务器删除指定的页面
- CONNECT: 预留给能够将连接改为管道方式的代理服务器
- OPTIONS:允许客户端查看服务器的性能
- TRACE: 回显服务器收到的请求,主要用于测试或诊断!
get和post的区别
1.GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx? name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中。
2.GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制。
3.GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。 4.GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL 上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。状态码
- 1xx:指示信息——表示请求已经接收,继续处理
- 2xx:成功,表示请求已经被成功接收、理解、接收
- 3xx:重定向——要完成请求必须进行更进一步的操作
- 4xx:客户端错误——请求的语法有错误或请求无法实现
- 5xx:服务端错误——服务器未能实现合法的请求!
- HTTP协议版本:
- HTTP/0.9:仅支持GET方法,仅能访问HTML格式的资源
- HTTP/1.0:增加POST和HEAD方法,MIME支持多种数据格式,开始支持Cache
- HTTP/1.1:支持持久连接(保持连接),一个TCP连接允许多个请求,新增PUT、PATCH、DELETE等方法
- HTTP/2.0:性能大幅提升,新的二进制格式,多路复用,header压缩,服务端推送。
