HTTP协议基础知识
来源:互联网 发布:淘宝钻石店铺好做吗 编辑:程序博客网 时间:2024/06/07 00:35
Http 协议概述
HTTP 协议是一个标准,定义了web客户端如何与服务器对话,以及数据如何从服务器传回客户端。
一、如何发起一个请求
发起一个HTTP 请求的过程就是 建立一个socket通信的过程。
浏览器在建立socket链接之前,必须根据浏览器地址栏的URL的域名DNS解析出IP地址,然后根据这个IP地址和默认的80端口与远程的服务器建立socket连接。
然后浏览器根据这个URL组装成一个get类型的HTTP请求头,通过outputStream.write发送到目标服务器,服务器等待inputStream.read返回数据,最后断开这个连接。
如何模拟浏览器发送HTTP请求? linux中的curl命令或者开源的HttpClient
基本的四个步骤
- 1、默认情况下,客户端在端口80打开与服务器的一个TCP连接,URL中可以指定其他端口
- 2、客户端向服务器发送消息(GET 请求),请求指定路径上的资源。这个请求包括一个首部,可选的内容,以及请求的数据
- 3、服务器向客户端发送响应。响应以响应码开头,后面是包含元数据的首部,一个空行以及所请求的文档或者错误信息
- 4、服务器关闭链接
二、HTTP 解析
常见的HTTP请求头和响应头
1、请求头
原始的请求头
#请求行(request line) 包括一个方法,资源的路径 http版本GET /TestHttp/ HTTP/1.1 GET 方法,/TestHttp/资源的路径 HTTP/1.1 http版本#被请求资源的Internet主机和端口号Host: weixuan:8080#客户端告诉服务器它的基本属性,使用的浏览器及版本,操作系统等User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0#告诉服务器 ,客户端可以处理那些数据类型,一般服务器忽略这一点#text:表示人可读的文字,application二进制数据Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8#用于指定一种自然语言Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3#可接受的内容编码Accept-Encoding: gzip, deflate#cookieCookie: JSESSIONID=E4BB982F1928C825938CD50C0A82813B#当前连接是否保持Connection: keep-alive
格式化之后的请求头Accept :text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Encoding :gzip, deflateAccept-Language :zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3Connection :keep-aliveCookie : JSESSIONID=E4BB982F1928C825938CD50C0A82813BHost : weixuan:8080User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0最后以一个空行结束,两个回车换行 \r\n\r\n
2、响应头
原始的响应头#状态行 说明服务器使用的HTTP版本 和HTTP状态码HTTP/1.1 200 OK#使用的服务器名称Server: Apache-Coyote/1.1#指明发送给接受者的实体正文的媒体类型Content-Type: text/html;charset=ISO-8859-1#指明正文的长度,用以字节的方式存储的十进制数字表示Content-Length: 699#时间戳Date: Wed, 01 Jul 2015 07:54:24 GMT
格式化之后的响应头Content-Length :699Content-Type:text/html;charset=ISO-8859-1Date:Wed, 01 Jul 2015 07:54:24 GMTServer:Apache-Coyote/1.13、常见的状态码
三、浏览器缓存
缓存的字段
1、使用ctrl+F5 后的请求头
当我们使用ctrl+F5 刷新一个页面时,在HTTP 的请求头加入一些请求头,告诉浏览器我们要获取的是最新的数据而不是缓存
ctrl+F5 后的HTTP 请求头GET /TestHttp/ HTTP/1.1Host: weixuan:8080User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateCookie: JSESSIONID=E4BB982F1928C825938CD50C0A82813BConnection: keep-alive#和Cache-Control类似Pragma: no-cache#这个字段用于指定所有的缓存机制在整个请求/响应链中必须服从的指令Cache-Control: no-cache2、HTTP Head的可选值及说明
3、expires(有效期)
通常使用的格式是Expires:Wed, 01 Jul 2015 07:54:24 GMT。
过了这个时间值,缓存就失效了。浏览器在发出请求之前检查这个页面的字段,查看是否过期,如果过期了,重新向服务器发送请求4、Last-Modified/Etag
Last Modified Wed Jul 01 2015 17:05:14 GMT+0800,告诉浏览器这个页面最后的修改时间。浏览器再次请求时会在请求头中加入if-modified-since:Wed Jul 01 2015 17:05:14 GMT+0800字段,询问当前缓存的页面是否是最新的,如果是最新的就会返回304状态码,服务器不会传输新的信息。
Etag这个字段让服务器为每一个页面分配唯一编号,通过这个编号来区分当前这个页面是否是最新的。
0 0
- 【总结】HTTP协议基础知识
- HTTP协议基础知识
- HTTP协议基础知识
- HTTP协议的基础知识
- http协议基础知识
- 基础知识之HTTP协议
- http协议基础知识总结
- http协议基础知识总结
- http协议基础知识总结
- http协议基础知识
- http协议基础知识
- HTTP协议基础知识
- 【Android基础知识】Http协议基础
- 网络基础知识之 HTTP 协议
- 关于HTTP协议的基础知识
- HTTP项目1.0 -- HTTP协议基础知识
- JavaWeb基础知识:Tomcat服务器和http协议
- TCP/IP 和HTTP 协议基础知识
- cocos2d-x 3.3 之卡牌设计 NO.5 设置界面(透明层和屏蔽下层触控)
- 图片可控旋转效果
- 符号冲突问题解决
- vs2010 opencv 视频抓图
- 根据mysqlbin恢复丛库数据
- HTTP协议基础知识
- 关于springmvc3.2扫描Controller类的问题
- Java实现对Mysql的图片存取操作
- 织梦首页调用章标题和文章缩略图
- http://www.backlion.com/archives/3886
- Android开发学习资源之(二)
- springmvc里的web。xml详解
- 要的是快乐——求人帮忙。
- python (3):wxPython打包app,报错