去了某家大公司面测试开发,问到了一些HTTP请求相关的内容,我竟然支支吾吾打不出来~~
赶紧恶补一波,还有一个复试~~
HTTP协议 超文本传输协议 基于TCP/IP通讯协议来传递数据
主要特点:
1.简单快速
2.灵活
3.无连接
4.无状态
5支持B/S及C/S模式
URL 统一资源定位符
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
1.http: 协议名称
2.www.aspxfans.com 域名部分
3.8080 端口部分
4./news/ 虚拟目录部分
5.index.asp 文件名部分
6.#到最后 锚部分
7.?到#中间的部分 参数部分
HTTP 请求消息Request,格式包括:
1.请求行 请求类型,访问的资源及HTTP版本(不同请求区别在与请求行的 GET/POST请求头)
2.请求头部 说明服务器要使用的附加信息,浏览器相关的内容,由浏览器来自己定义
3.空行 请求头部后面的空行是必须的
4.请求数据 请求数据如name=多少 id等于多少等等
GET /562f25980001b1b106000338.jpg HTTP/1.1
Host img.mukewang.com
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept image/webp,image/*,*/*;q=0.8
Referer http://www.imooc.com/
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.8、
HTTP响应消息Response,格式包括:
1.状态行,由HTTP协议版本号、状态码、状态消息组成
2.消息报头,用来说明客户端要使用的一些附加信息
3.空行
4.响应正文,服务器返回给客户端的文本信息
HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8
<html>
<head></head>
<body>
<!--body goes here-->
</body>
</html>
HTTP之状态码:三位数字组成,第一个数字定义响应的类别
1xx:指示信息--表示请求已经接受,继续处理
2xx:成功,表示请求已被成功接收、理解、接受
3xx: 重定向,要完成请求必须进行更进一步的操作
4xx: 客户端错误,请求有语法错误或请求无法实现
5xx: 服务器端错误,服务器未能实现合法的请求
常见状态码:
200 OK 客户端请求成功
400 Bad Request 客户端请求有语法错误,不能被服务器所理解
403 Forbidden 服务器收到请求,但是拒绝提供服务
404 Not Found 请求资源不存在,输入了错误的URL
500 Internal Server Error 服务器发生了不可预期的错误
503 Server Unavailable 服务器当前不能处理客服端的请求,一段时间后可能恢复正常
HTTP请求方法:
1.0定义了三种请求方法:
GET:请求指定的页面信息,并返回实体主体
POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)
HEAD:类似get请求,只不过返回的响应中没有具体的内容,用于获取报头
HTTP工作原理: 工作步骤:
1. 一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口,建立一个TCP套接字连接
2.发送HTTP请求,即上面的上面的request等
3.服务器接受请求并返回HTTP响应,Web服务器解析请求,定位请求资源,即response
4.释放连接TCP
5.客户端解析服务器返回的HTML内容
浏览器输入URL,按下回车之后会经历以下流程:
1.浏览器像DNS服务器请求解析该URL中的域名所对应的IP地址
2.解析IP地址后,根据ip地址和端口,和服务器建立TCP连接
3.浏览器发出读取文件的HTTP请求,改请求报文作为TCP三次握手的第三个报文的数据发给服务器;
4.服务器对浏览器请求做出响应,并把对应的html文本发送给浏览器;
5.释放TCP连接
6.浏览器将该html文本并显示内容
GET、POST的区别
1. GET会将参数附加到地址上,而POST请求不会
2.浏览器和服务器对URL长度一般来说会有限制,所以采用GET方法提交的时候,传输数据就会受到URL长度的限制。
3.POST的安全性要比GET的安全性高,通过GET提交数据,数据会明文显示在URL上