2_http协议详解
当客户端与服务器进行交互时,就存在web请求,这种请求都基于统一的应用层协议(http协议)交互数据。它允许将HTML文档从web服务器传送到web浏览器。
http协议是无状态的协议。无状态是指web浏览器和web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,web服 务器返回响应,连接就被关闭了,在服务器端不保留连接的有关信息。也就是说,HTTP请求只能由客户端发起,服务器端不能主动向客户端发送数据。
除了通过浏览器发起HTTP请求,也可以通过linux的curl命令发起HTTP请求。浏览器在HTTP协议方面只不过多了HTML渲染的功能,让用户看到更直观的界面。
URL统一资源定位符:
格式:scheme://login:password@address:port/path/to/resource?query_string#fragment
scheme协议名称:http,https(SSL),ftp,mailto(SMTP)
伪协议:一部分浏览器内部支持的协议并不需要向外部请求资源,而是调用本地浏览器的脚本解析功能或是其他功能。比如:javascript:和data:等。
login:password:访问资源的身份验证,此处身份验证的字段只与URL开端指定的协议有关,和实际请求的内容无关。如果没有身份验证字段,浏览器默认以匿名方式访问资源。
address:服务器地址 port:服务器端口
/path/to/resource:层级文件路径
?query_string:查询字符串(这里会引发跟多安全问题)
#fragment:片段ID
http请求:包括三部分,分别是请求行(请求方法,请求的资源路径,http版本),请求头(请求的主机地址,浏览器的标识),请求体(请求正文,可选,最常出现在POST方法中)。
请求头:
Host:用于指定请求的URL中的主机名称。
User-Agent:提供浏览器或其他发送HTTP请求的客户端软件的相关消息。
Referer:指示当前请求源自哪个URL
Accept:这个字段将客户端允许接受的内容类型传输给服务器端。
Accept-Language:用于声明浏览器可以支持什么语言。
Accept-Encoding:用于声明浏览器可以支持的编码类型。
Cookie:它是一段文本,用来表示请求者的身份(服务器使用Set-Cookie消息头来设置cookie,一般用于身份验证)
Connection:通知通信的另一方,是否在完成HTTP传输后关闭TCP连接。
x-forward-for:它代表请求端的IP,可以有多个,以逗号分开。
HTTP响应:也是包括三部分,响应行(HTTP版本,状态码以及消息"OK"),第二行至末尾的空白行是响应头,之后是响应正文,是服务器向客户端发送的HTML数据。
Accept-Ranges:
Content-Length:指定消息主体的字节长度。
Content-Type:规定消息主体内容类型
Conetent-Language:规定消息主题的语言
Date:表示消息产生的日期和时间。
Server:说明所使用的web服务器软件,和服务器操作系统
Set-cookie:用来向客户端传递/更新cookie。
Location:服务器通过这个头告诉浏览器去访问哪个页面,浏览器收到这个请求之后,会立即访问Location头所指向的页面。通常和302状态码使用。
Refresh:服务器通过Refresh头告诉浏览器定时刷新浏览器。
http请求方法:
GET POST HEAD(不会出现在响应消息里) TRACE(和ping命令类似) OPTIONS(会列出所能支持的方法列表) PUT DELETE CONNECT
HTTP状态码:是HTTP响应的必要部分。
200~299成功 300~399重定向和其他状态信息 400~499客户端错误 500~599服务器端错误
200 OK 301 Moved Permanently 302 Found 303 See Other
404 Not Found 403 Forbidden 401 Unauthorized 400 Bad Request
HTTP代理: