Http简介
❝❞
- Http协议是「Hyper Text Transfer Protocol」(超文本传输协议)的缩写,是用于服务器传输超文本到本地浏览器的传输协议
- Http是一个基于TCO/IP的通信协议来传递数据
Http的工作原理
❝Http的协议工作于客户端-服务端的架构上。浏览器作为Http客户端通过「URL」向Http服务端及web服务器发送的所有请求
❞
Http三点注意事项
- Http是无连接的:无连接的含义是每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后断开连接「这种方式可以节省传输的时间」
- Http是媒体独立的:只要客户端和服务端知道如何处理的数据内容,任何类型的数据都可以通过Http发送,客户端以及服务器指定使用适合的MIMME-type内容类型
- 「浏览器显示的内容都有HTML,XML,GIF,Flash等,浏览器通过MIME Type区分他们,决定用什么内容什么形式来显示 --- 媒体类型通常通过Http协议,由Web服务器告知浏览器,更准确地说是通过
Content-Type
来表示的。例如Content-Type:text/HTML
」
- 「浏览器显示的内容都有HTML,XML,GIF,Flash等,浏览器通过MIME Type区分他们,决定用什么内容什么形式来显示 --- 媒体类型通常通过Http协议,由Web服务器告知浏览器,更准确地说是通过
- Http:是无状态协议,是指协议对于交互场景没有记忆能力
Http的消息结构
Http客户端请求消息结构
客户端发送一个Http请求到服务器的请求消息包括以下格式
Http服务器响应消息结构
Http响应也由四个部分组成,分别是:状态行,消息报头,空行和响应正文
Http的请求方法
- 「根据Http标准,Http可以使用多种请求方式」
- 「Http1.0定义了三种请求方式:GET,POST,HEAD」
- 「Http1.1新增了六种请求方式:OPTIONS,PUT,PATCH,DELETE,TRACE和CONNECT方法」
------------------------- | |
---|---|
GET | 请求指定页面信息,并返回实体主体 |
HEAD | 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头 |
POST | 向指定资源提交数据进行处理请求(例如表单提交或者上传文件)。数据被包含在请求体中,POST请求可能会导致新的资源建立和/或已有资源修改 |
PUT | 向指定资源位置上传其最新内容。 |
DELETE | 请求服务去删除Request-URI 所标识的资源 |
CONNECT | Http/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
OPTIONS | 允许客户端查看服务器的性能。 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
Http请求头信息
Accept
:浏览器可接受的MIME类型,也就是代表着浏览器希望接受到什么样的文件Accept-Charset
:浏览器可接受的字符集Accept-Encoding
:浏览器能够进行解码的数据编码方式Accept-Language
:浏览器所接受的语言Authorization
:授权信息Content-Length
:表示请求消息的正文的长度Host
:客户端通过这个头告诉服务器,想访问的主机名If-Modified-Since
:告诉服务器,资源的缓存时间Referer
:表明客户机是从哪里来User-Agent
:User-Agent头域的内容包含发出请求的用户信息,浏览器类型
Http响应头信息
Allow
:服务器支持的哪写请求方式Content-Encoding
:文档的编码的方法Content-Length
:表示内容的长度Content-Type
:表示后面文档属于什么MIME类型Date
:当前的GMT时间【可以通过setDateHeader来设置这个头,避免转化时间格式的麻烦】Expires
:表示在什么时候文档过期,不在进行缓冲Server
:服务器的名字WWW-Authenticate
:客户应该在Authorization头中提供什么类型的授权信息
请求方式的区别
POST VS GET
- GET后退按钮/刷新无害,POST数据会被重新提交(浏览器应该告知用户数据会被提交)
- GET书签可收藏,POST为书签不可收藏,GET能被缓存,POST不能缓存
- GET的历史参数会被保留在浏览器的历史中,而POST请求不会
- GET对数据长度有限制,当发送数据的时候GET方法想URL添加数据,URL的长度是受限制的「最大长度是2048个字符」,POST无限制
- GET只允许ASCII字符,POST没有限制,也允许二进制数据
- 与POST相比,GET的安全性比较差
- GET只会产生一个TCP数据包,而POST会产生两个TCP数据包;对于GET请求方式,浏览器会把header和data一起发送出去,服务返回200响应,而对于POST,浏览器先发送header,服务器响应continue,浏览器在发送data,服务器响应200
POST VS PUT
- PUT请求:如果两个请求相同,后一个请求会把第一个请求覆盖掉【所以PUT用来改资源】
- POST请求:后一个请求不会把第一个请求覆盖掉【所有POST用来增资源】