HTTP是B/S网络架构的核心,发起一个http连接的本质就是建立一个Socket连接.建立连接之前根据域名dns解析出ip地址,然后根据这个ip地址和默认的80端口与远程服务器建立Socket连接,只不过格式要符合HTTP.
请求头,响应头和状态码
| 请求头(Request Headers) | 说明 |
|---|---|
| Accept-Charset | 用于指定客户端接受的字符集 |
| Accept-Encoding | 用于指定可接受的内容编码,如Accept-Encoding:gzip |
| Accept-Language | 用于指定一种自然语言,如Accept-Language:zh-cn |
| Host | 用于指定被请求资源的Internet主机和端口号 |
| User-Agent | 客户端将它的操作系统,浏览器和其他属性告诉服务器 |
| Connection | 当前连接是否保持,如Connection:keep-alive |
| 响应头(Response Headers) | 说明 |
| Server | 使用的服务器名称,如Server:Apache/1.3.6 |
| Content-Type | 用来指明发送给接受者的实体正文的媒体类型,如Content-Type:text/html;charset=UTF-8 |
| Content-Encoding | 与请求报文Accept-Encoding对应,告诉浏览器服务端采用的是什么压缩编码 |
| Content-Language | 描述了资源所用的自然语言,与Accept-Language:zh-cn对应 |
| Content-Length | 指明实体正文的长度,用以字节方式存储的十进制数字来表示 |
| Keep-Alive | 保持连接的时间,如Keep-Alive:timeout=16,max=120 |
| 状态码(Status Code) | 说明 |
| 200 | 客户端请求成功 |
| 302 | 临时跳转,跳转的地址通过Location指定 |
| 400 | 客户端请求有语法错误,不能被服务器识别 |
| 403 | 服务器收到请求,但是拒绝提供服务 |
| 404 | 请求的资源不存在 |
| 500 | 服务器发生不可预期的错误 |
浏览器缓存
当使用Ctrl+F5刷新页面的时候,浏览器会直接向目标URL发送请求,而不会使用浏览器缓存的数据.用这种方式请求数据时:
“请求头”中将会增加两个配置项:Cache-Control:no-cache和Pragma:no-cache.
这个HTTP Head字段用于指定所有缓存机制在整个请求/响应链中必须服从的指令,如果知道该页面是否为缓存,不仅可以控制浏览器,还可以控制和HTTP相关的缓存或代理服务器.
字段的可选值如下:
| 可选值 | 说明 |
|---|---|
| Public | 所有内容都将被缓存,在响应头中设置 |
| Private | 内存只缓存到私有缓存中,在响应头中设置 |
| no-cache | 所有内容都不被缓存,在请求头和响应头中设置 |
| no-store | 所有内容都不会被缓存到缓存或Internet临时文件中,在响应头中设置 |
| must-revalidation/proxy-revalidation | 如果缓存内容失效,请求必须发送到服务器或代理服务器进行重新验证,在请求头中设置 |
| max-age=xxx | 缓存的内容将在xxx秒后失效,这个选项只在http1.1中可用,和Last-Modifed一起使用时优先级较高,在响应头中设置 |
Cache-Control请求字段被各个浏览器支持的较好,而且优先级比较高.
Cache-Control和Pragma作用类似,Cache-Control:no-cache和Pragma:no-cache作用是一样的
阅读自 <深入分析Java Web技术内幕> 的读书笔记
请各位大牛多多指导
HTTP协议详解
本文详细介绍了HTTP协议中的请求头、响应头及状态码的作用,并解释了它们如何帮助客户端与服务器进行有效沟通。此外还探讨了浏览器缓存的工作原理,以及如何通过特定的HTTP头部字段来控制缓存行为。
3626

被折叠的 条评论
为什么被折叠?



