【积硅计划】http协议基础
http:超文本传输协议,它允许将超文本标记(html)文档从web服务器传送到浏览器。目前版本HTTP/1.1
http请求过程:
proxy:代理服务器,网络信息的中转站。功能如下:
1.提高访问速度(缓存)
2.突破限制(FQ)
3.隐藏身份
URl:统一资源定位符
基本格式:schema://host[:port#]/path/…/[;url-params][?query-string][#anchor]
schema--底层协议 http,https,ftp
host--web服务器的ip或域名
port#--web服务器的端口,默认是80,可以省略
path,url-params--访问资源路径及参数
query-string--发送到服务器的get数据
anchor--锚
http协议是有连接无状态,对于服务器来说,同一个客户端这次请求和上一次请求没有对应关系,它不知道两次请求来自同一个客户端。
http消息结构
request消息包括3部分:1、请求行 2、请求 header 3、body 其中header和body之间有空行
method--请求的方法,get或者postpath-to-resource--请求的资源http/version-number--http协议的版本号当method为get时,body为空response消息包括3部分:1、响应行 2、响应 header 3、body
http/version-number--http协议的版本号
status code & message--状态码及说明
get和post的区别
http定义了4种基本的与服务器交互的方法GET、POST,PUT、DELETE,分别对应查、改、增、删
区别如下:
1.get提交的数据放在url上,post提交的数据放在request消息的body中
2.get提交的数据有大小限制(浏览器对url长度有限制),post没有限制
状态码
http/1.1中定义了5类状态码,状态码由三位数字组成,其中第一个数字定义响应的类别
1XX 提示信息 -- 表示请求已被成功接收,继续处理 -- 100~101
2XX 成功 -- 表示请求已被成功接收、理解、接受 -- 200~206
3XX 重定向 -- 要完成请求必须做进一步的处理 -- 300~307
4XX 客户端错误 -- 请求有语法错误或请求无法实现 -- 400~417
5XX 服务器错误 -- 服务器未能实现合法的请求 -- 500~505
状态码详解
100 Continue继续收到了请求的起始部分,客户端应该继续请求 101 Switching Protocols切换协议服务器正根据客户端的指示将协议切换成Update Header列出的协议 200 ok服务器成功处理了请求 201 Created以创建对于那些要服务器创建对象的请求来说,资源已创建完毕。 202 Accepted已接受请求已接受, 但服务器尚未处理 203 Non-Authoritative Information非权威信息服务器已将事务成功处理,只是实体Header包含的信息不
是来自原始服务器,而是来自资源的副本。204 No Content无内容 Response中包含一些Header和一个状态行, 但不包括实体的主题内容
(没有response body205 Reset Content重置内容 另一个主要用于浏览器的代码。意思是浏览器应该重置当前页面上
所有的HTML表单。206 Partial Content部分内容 部分请求成功 300 Multiple Choices多项选择 客户端请求了实际指向多个资源的URL。这个代码是和一个选项列表一
起返回的,然后用户就可以选择他希望的选项了301 Moved Permanently已移走 请求的URL已移走。Response中应该包含一个Location URL, 说明资源
现在所处的位置302 Found已找到 与状态码301类似。但这里的移除是临时的。 客户端会使用Location中
给出的URL,重新发送新的HTTP request303 See Other参见其他 类似302 304 Not Modified未修改 客户的缓存资源是最新的, 要客户端使用缓存 305 Use Proxy使用代理 必须通过代理访问资源, 代理的地址在Response 的Location中 306 未使用 未使用 307 Temporary Redirect临时重定向 类似302 400 Bad Request坏请求 告诉客户端,它发送了一个错误的请求。 401 Unauthorized未授权 需要客户端对自己认证 402 Payment Required要求付款 这个状态还没被使用, 保留给将来用 403 Forbidden禁止 请求被服务器拒绝了 404 Not Found未找到 未找到资源 405 Method Not Allowed不允许使用的方法 不支持该Request的方法 406 Not Acceptable无法接受 407 Proxy Authentication Required请求
进行代理认证与状态码401类似, 用于需要进行认证的代理服务器 408 Request Timeout请求超时 如果客户端完成请求时花费的时间太长, 服务器可以回送这个状态码并
关闭连接409 Conflict冲突 发出的请求在资源上造成了一些冲突 410 Gone消失了 服务器曾经有这个资源,现在没有了, 与状态码404类似 411 Length Required要求长度指示 服务器要求在Request中包含Content-Length。 412 Precondition Failed先决条件失败 413 Request Entity Too Large请求实体太大 客户端发送的实体主体部分比服务器能够或者希望处理的要 414 Request URI Too Long请求的url太长 客户端发送的请求所携带的URL超过了服务器能够或者希望处理的长度 415 Unsupported Media Type不支持的媒体类型 服务器无法理解或不支持客户端所发送的实体的内容类型 416 Requested Range Not Satisfiable所请求
的范围未得到满足417 Expectation Failed无法满足期望 500 Internal Server Error内部服务器错误 服务器遇到一个错误,使其无法为请求提供服务 501 Not Implemented未实现 客户端发起的请求超出服务器的能力范围(比如,使用了服务器不支持的请求
方法)时,使用此状态码。502 Bad Gateway网管鼓掌 代理使用的服务器遇到了上游的无效响应 503 Service Unavailable未提供此服务 服务器目前无法为请求提供服务,但过一段时间就可以恢复服务 504 Gateway Timeout网关超时 与状态吗408类似, 但是响应来自网关或代理,此网关或代理在等待另一台
服务器的响应时出现了超时505 HTTP Version Not Supported
不支持的http版本服务器收到的请求使用了它不支持的HTTP协议版本。 有些服务器不支持HTTP
早期的HTTP协议版本,也不支持太高的协议版本
request header主要内容
Cache头域
If-Modified-Since -- 发送浏览器缓存页面的最后修改时间
If-None-Match -- 与Etag一起使用,用于服务器辨别缓存文件是否过期。如果过期返回200及新的Etag,否则返回304告诉浏览器使用缓存
Pragma:no-cache -- 防止页面被缓存
Cache-Control:public(可以被任何缓存所缓存)、private内容只能被缓存至私有缓存中、no-cache(所有内容不会被缓存)
Client头域
Accept -- 代表浏览器可以接受的媒体类型,如text/html
Accept-Encoding -- 浏览器申明自己接受的压缩方法,如gzip,defalte
Accept-Language -- 浏览器申明自己接受的语言
Accept-Charset -- 浏览器申明自己接受的字符集
User-Agent -- 告诉服务器客户端使用的操作系统和浏览器的名称和版本
Cookie/Login头域
Cookie -- 将cookie值发送到服务器
Entity头域
Content-Length -- 发送到服务器的内容长度
Content-Type -- 发送到服务器的内容类型
Miscellaneous
Referer -- 告诉服务器我是从哪个链接过来的
Transport头域
Connection -- keep-alive(内容传输完毕后保持tcp连接)、close(内容传输完毕后关闭tcp连接)
Host -- 指定被请求资源的 主机和端口号
response header主要内容
Cache头域
Date -- 生成消息的具体时间和日期
Expires -- 本地缓存的过期时间
Vary --
Cookie/Login头域
P3P -- 用于跨域设置cookie,可以解决iframe跨域访问cookie的问题
Set-Cookie -- 将cookie值放松到客户端浏览器
Entity头域
ETag -- 与If-None_Match配合使用
Last-Modified -- 指示资源的最后修改时间
Content-Type -- 告诉浏览器响应的类型和字符集
Content-Length -- 只是响应正文的长度
Content-Encoding -- 告诉浏览器服务器使用的压缩方法
Content-Language -- 只是响应的语言
Miscellaneous头域
Server -- 服务器的软件信息
X-AspNet-Version -- Asp.Net的版本
X-Powered-By -- 指示网站用什么技术开发的
Transport头域
Connection -- keep-alive(内容传输完毕后保持tcp连接)、close(内容传输完毕后关闭tcp连接)
Location头域
Location -- 告诉浏览器需要重定向的新url
HTTP压缩的过程
1. 浏览器发送http request给web服务器,request中有Content-Encoding:gzip/deflate,告诉浏览器支持压缩
2. web服务器接受到request后,生成原始的response,其中有原始的Content-Type和Content-Length
3. web服务器通过gzip,对response进行压缩编码,编码后的header中有压缩后的Content-Type和Content-Length,并且增加 Accept-Encoding,然后把response发送给浏览器
4. 浏览器接到respon后,根据Content-Encoding来进行解码,获得原始response后显示网页
*内容编码类型(Content-Encoding)gzip -- 采用GNU zip压缩compress -- 采用unix的文件压缩程序deflate -- 采用zlib格式压缩identity -- 表明没有对实体进行编码
gzip,compress,deflate都是无损压缩算法,可以减少传输报文的大小,不会导致信息损失。其中gzip效率最高
*压缩的好处
http压缩对纯文本可以压缩至原内容的40%,从而节省60%的数据传输