http

来源:互联网 发布:ebpocket 知乎 编辑:程序博客网 时间:2024/05/22 05:16

一、请求

1、请求行 GET   www.baidu.com/index.html   HTTP/1.1 (Method Request-URI HTTP-Version

请求方法GET、POST、HEAD、PUT、DELETE,语义不同,表现不同。

2、请求头

Cache(缓存)

If-Modified-Since:Wed, 11 Feb 2015 04:12:02 GMT   值为该请求上一次响应的得到的Last-Modified,服务器段据此判断文件是否改变过,没改变则返回304
If-None-Match:W/"2275-1423627922000"                  值为该请求上一次响应的得到的ETag,服务器收到If-None-Match后,对比新计算的tag,判断是否返回304

Client(客户端信息)
Accept:*/*          接受何种MIME类型(文档类型,格式为:类/子类)的响应
Accept-Encoding:gzip,deflate,sdch   接受何种压缩编码的响应
Accept-Language:en-US,en;q=0.8   浏览器支持的语言
User-Agent: AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 浏览器版本、内核
X-Requested-With:XMLHttpRequest  标明是ajax异步请求
Cookie:locale=zh_CN; language=zh_CN; Secure=true; HttpOnly=true; JSESSIONID=E3C4995099A245125E1E8D4C766891B2
Entity(实体)
Content-Length:73                 请求体长度  
Content-Type:application/json; charset=UTF-8  请求体的MIME类型,表单提交的Content-Type通常是application/x-www-form-urlencoded或multipart/form-data(有附件上传)
Miscellaneous(杂项)
Origin:https://www.sina.com              请求来源,只在POST请求中有
Referer:https://www.sina.com/index.html  请求详细来源
还有一些自定义的信息,如token
Transport(传输)
Connection:keep-alive   保持TCP链接,多个http请求,使用同一个TCP链接。close表示不保持
Host:https://www.baidu.com  请求目标域名
3、请求体

                                                                                                          二、响应
1、状态行 HTTP/1.1 200 OK (HTTP-Version Status-Code Reason-Phrase)
状态码
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态代码、状态描述、说明:
200 OK //客户端请求成功
304 Not Modified //响应体为空,客户端使用缓存
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

2、响应头
Cache(缓存)
Date:Tue, 17 Feb 2015 03:57:40 GMT 响应时间
Vary:Accept-Charset, Accept-Encoding, Accept-Language, Accept 指明该响应依据请求的哪些字段产生,因此如果下一次的请求有个字段的值不同,就不会使用该响应作为缓存
Expires:Tue, 24 Feb 2015 05:04:40 GMT 缓存有效期
Cache-Control:max-age=604800 缓存时长(秒),优先级高于Expires
Set-Cookie: UserID=JohnDoe; Max-Age=3600 httpOnly;    每条cookie除了key-value,还有各自的域、寿命、httpOnly、secure等属性。
Entity(实体)
Content-Length:3237 响应体长度
Content-Type:application/json;charset=UTF-8 响应体MIME类型
ETag:W/"22667-1423627922000" 文件标识符
Last-Modified:Wed, 11 Feb 2015 04:12:02 GMT 返回的文件的最后修改时间
Miscellaneous(杂项)
Server:apache 服务器名称
Accept-Ranges:bytes 支持断点续传的粒度
X-Download-Options:noopen 禁止浏览器打开下载的文件
Security(安全)
X-Content-Type-Options:nosniff 禁止浏览器自动判断文档类型
X-Frame-Options:SAMEORIGIN 禁止响应被其他网站frame
X-XSS-Protection:1; mode=block 开启xss防护并通知浏览器阻止而不是过滤用户注入的脚本。0 – 关闭xss防护 1 – 开启xss防护

Access-Control-Allow-Origin:http://www.test.com 允许来自www.test.com的跨域请求

Access-Control-Allow-Credentials:true 允许跨域请求时带cookie

Transport(传输)
Connection:keep-alive

Location: xxxx 跳转目标
3、响应体

                                                                                                                三、现象
1、浏览器是否使用缓存:
(1)、看缓存是否存在,存在则到第2步,不存在则到第3步。
(2)、看缓存是否过期(Expires、Cache-Control),不过期则使用缓存。无Expires、Cache-Control默认为过期,过期则到第3步。
(3)、发送请求,带上If-Modified-Since、If-None-Match,服务器判断资源是否发生变化,无变化,返回304,浏览器使用缓存。无If-Modified-Since、If-None-Match默认为变化,返回200,不使用缓存。

2、跳转或地址栏回车刷新与浏览器左上角刷新不一样


四、版本

HTTP 0.9,只有基本的文本 GET 功能。
HTTP 1.0,完善的请求/响应模型,并将协议补充完整。1996年发布
HTTP 1.1,在 1.0 基础上进行更新,增加了如 长久连接 keep-alive 与 chunked 等功能。1999 年发布
HTTP 2.0 语义与 1.1 兼容
1、多路复用流:多个请求或响应被拆分,在同一个连接上传输,到达目的地后再重新组装。资源合并、域名分区变得不重要。
2、优先权和依赖:客户端发出的请求带有 优先权和依赖 的信息
3、头部压缩:多个请求的头部 很多重复,可以进行压缩
4、服务器端推

默认连接方式
HTTP1.1下Connection: Keep-Alive
HTTP1.0下Connection: Close

0 0
原创粉丝点击