http:
超文本传输协议 (HTTP-Hypertext transfer protocol) 是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
超链接:将不同服务器的信息连接起来。
超文本:包含了超链接的文本。
html:
超文本标记语言,HyperText Mark Language。格式如下:
<html> <title>浏览器标签页中显示的 标题</title> <body> 网页的实际内容 </body> </html>
http属于应用层协议,需要基于TCP/IP的通信子网传输。
端口号:用来标记进程的地址。也就是当客户端请求到达web服务器后,知道该和哪个进程通信。
动态端点:用户请求的是一个程序,而不是静态的html页面。
客户端动态:根据用户请求的页面根据时间、请求方法等而临时生成的页面。
早期http版本使用applet工具,在客户端的浏览器上执行后,展示不同页面。
applet是一段java代码,需要浏览器有一个java虚拟机。
当java代码被下载后,被java虚拟机执行以展示页面。
但是服务器无法控制客户端,所以非常不安全。
服务端动态:
CGI: Common Gateway Interface通用网关接口
不同于静态html的请求,比如,当客户端请求了当前时间时。
此时如果在服务器简单的放一个可以执行的bash脚本获取时间时,
如果使用静态html,那么只是获取bash脚本内容。
如果是CGI,则可以将bash脚本转交给bash进程执行,
然后再将结果返回http,最后由http返回最终的信息给用户。
httpd/0.9:stateless
httpd/1.0:MIME、keep-alive
MIME:
Multipurpose Internet Mail Extesions,多用户互联网邮件扩展协议。
由于http传输的只是纯ASCII文本信息,所以在用户请求MP3、VIDEO等时,就需要MIME协议
将这些信息转码为文本信息,然后客户端浏览器再将这些信息转换为MP3。
而播放MP3时,则需要客户具有这样的外部播放器,或者是浏览器内置的插件。
格式:
资源主类型/次类型(major/minor)
image/jpg
image/gif
text/html
video/quicktime
application/x-httpd-php
keep-alive:
早期客户端建立一次TCP连接时一次请求只能返回一次数据,而当客户端请求大量数据时,
则需要重复的进行TCP的3次握手4次断开。这样不仅影响服务器性能,而且影响客户体验。
所以keep-alive的出现,使得一次TCP连接,使得客户端可以请求多次内容。
URI:
统一资源标识符,Uniform Resource Identifier
用于标识不同的网站。
URL:统一资源定位符,Uniform Resource Locator,属于URI的子集。但是目前与URI不加区分。
格式:scheme://[username:password@]HOST:port/path/to/source
http://caduke.blog.51cto.com
URN:统一资源命名符
http事物:一个请求(request)与其对应的相应报文(respone)
http方法:
GET :完整请求一个资源。
HEAD :仅响应首部。
PUT :上传数据,不安全。
DELET :删除数据,不安全。
OPTIONS:返回请求的资源 所支持的方法 的方法。
也就当客户端不知道服务器有几种方法时,所以发送options询问。
TRACE:追求一个资源请求中间所经过的代理。
http缓存机制:
私有缓存:客户端浏览器自身的缓存。
公共缓存:比如百度将自己不经常更新的首页内容放在联通各地的服务中。
HTTP的响应码:
1xx: 信息性状态码
100, 101
2xx: 成功状态码
200:OK[常用]
3xx: 重定向状态码
301: 永久重定向, 告诉资源已经永久转移
Location响应首部的值(head)仍为当前URL,因此为隐藏重定向;
302: 临时重定向,暂时性的转移资源
显式重定向, Location响应首部(head)的值为新的URL
304:Not Modified没有修改,
也即是在使用缓存时,对于经常不改动的信息,
返回304表示刚才没有改过,浏览器可以使用本地缓存
4xx: 客户端错误状态码
403:表示服务器能够得到客户端请求,但是客户端没有权限去访问资源
404: Not Found
5xx: 服务器端错误状态码
500: Internal Server Error服务器在执行或配置上有问题
502: Bad Gateway
代理服务器找不到上级的代理或根,认为自己错误了
503:服务不可用
504:Gateway Timeout
二级代理可以联系到一级代理,但是在有限的时间内,一级代理没有给于响应
http报文格式:
起始行:
首 部:可以有多个
主 体:
request(请求报文首部):
<method请求方法> <request-URL请求的资源路径> <version>
<headers首部,可以多个>
<entity-body请求的主题部分>
验证:
web服务可以使用telnet命令查看:
# telnet 192.168.1.210 80 Connected to 192.168.1.210. Escape character is ‘^]‘. GET / http/1.1 (这里可以是上面的几种方法比如HEAD、OPTIONS) host: 192.168.1.210 (这里需要两次回车) HTTP/1.1 200 OK Date: Wed, 12 Mar 2014 17:01:47 GMT Server: Apache/2.2.15 (CentOS) Last-Modified: Wed, 12 Mar 2014 16:56:50 GMT ETag: "e0891-54-4f46bb90e3639" Accept-Ranges: bytes Content-Length: 84 Connection: close Content-Type: text/html; charset=UTF-8
response(回应信息)