更新内容:新增视频教程 - WEB系统测试、PHP的HTTP协议、okhttp框架解析与应用、走进Requests库、接口测试基础入门篇、JMeter之HTTP协议接口性能测试;
更新时间:2017-04-03javascript
为了方便有兴趣的朋友一块儿维护HTTP资源大全,我把资源放到了 Github 上。但愿你们多多推荐哈,谢谢你们!php
浏览器-服务器(Browser/Server)结构,简称B/S结构,与C/S结构不一样,其客户端不须要安装专门的软件,只须要浏览器便可,浏览器经过Web服务器与数据库进行交互,能够方便的在不一样平台下工做;服务器端可采用高性能计算机,并安装Oracle、Sybase、Informix等大型数据库。B/S结构简化了客户端的工做,它是随着Internet技术兴起而产生的,对C/S技术的改进,但该结构下服务器端的工做较重,对服务器的性能要求更高。—— 维基百科html
在电脑术语中,统一资源标识符(英语:Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串。 该种标识容许用户对网络中(通常指万维网)的资源经过特定的协议进行交互操做。URI的最多见的形式是统一资源定位符(URL),常常指定为非正式的网址。更罕见的用法是统一资源名称(URN),其目的是经过提供一种途径。用于在特定的命名空间资源的标识,以补充网址。—— 维基百科前端
URI文法由URI协议名(例如“
http
”,“ftp
”,“mailto
”或“file
”),一个冒号,和协议对应的内容所构成。特定的协议定义了协议内容的语法和语义,而全部的协议都必须遵循必定的URI文法通用规则,亦即为某些专门目的保留部分特殊字符。—— 维基百科java
下面展现了 URI 例子及它们的组成部分:node
权限 路径
┌───────────────┴───────────────┐┌───┴────┐
abc://username:password@example.com:123/path/data?key=value&key2=value2#fragid1
└┬┘ └───────┬───────┘ └────┬────┘ └┬┘ └─────────┬─────────┘ └──┬──┘
协议 用户信息 主机名 端口 查询参数 片断复制代码
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。 —— 百度百科python
每一个 MIME 类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。jquery
常见的 MIME 类型有:linux
资源名称 | 后缀 | 类型 |
---|---|---|
超文本标记语言文本 | .html | text/html |
xml文档 | .xml | text/xml |
普通文本 | .txt | text/plain |
PNG图像 | .png | image/png |
PDF文档 | application/pdf |
了解更多的 MIME 类型 - 互联网媒体类型android
超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是互联网上应用最为普遍的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。经过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。—— 维基百科
HTTP 协议是基于请求与相应,具体以下图所示:
HTTP 请求报文由请求行、请求头、空行 和 请求体(请求数据) 4 个部分组成,以下图所示:
GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding: gzip, deflate, sdch, br Accept-Language: zh-CN,zh;q=0.8,en;q=0.6,id;q=0.4 Cookie: PSTM=1490844191; BIDUPSID=2145FF54639208435F60E1E165379255; BAIDUID=CFA344942EE2E0EE081D8B13B5C847F9:FG=1;复制代码
请求行由请求方法、URL 和 HTTP 协议版本组成,它们之间用空格分开。
GET / HTTP/1.1复制代码
请求头由 key-value
对组成,每行一对,key (键) 和 value (值)用英文冒号 :
分隔。请求头通知服务器有关于客户端请求的信息,典型的请求头有:
www.baidu.com
最后一个请求头以后是一个空行,发送回车符和换行符,通知服务器如下再也不有请求头。
请求数据不在 GET 方法中使用,而是在 POST 方法中使用。与请求数据相关的最常使用的请求头是 Content-Type和 Content-Length。
HTTP响应报文由状态行、响应头、空行和响应体4 个部分组成,以下图所示:
HTTP/1.1 200 OK
Server: bfe/1.0.8.18
Date: Thu, 30 Mar 2017 12:28:00 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Cache-Control: private
Expires: Thu, 30 Mar 2017 12:27:43 GMT
Set-Cookie: BDSVRTM=0; path=/复制代码
状态行格式: HTTP-Version Status-Code Reason-Phrase CRLF
响应头由 key-value
对组成,每行一对,key (键) 和 value (值)用英文冒号 :
分隔。响应头域容许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和Request-URI进一步的信息,典型的响应头有:
最后一个响应头以后是一个空行,发送回车符和换行符,通知浏览器如下再也不有响应头。
服务器返回给浏览器的响应信息,下面是百度首页的响应体片断:
<!DOCTYPE html>
<!--STATUS OK-->
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<link rel="icon" sizes="any" mask href="//www.baidu.com/img/baidu.svg">
<title>百度一下,你就知道</title>
</head>
<body>
...
</body>
</html>复制代码
HTTP 协议的请求方法有:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT、PATCH、HEAD
HTTP 经常使用的请求方法:
http://www.example.com/users
- 获取全部用户http://www.example.com/users/a-unique-id
- 新增用户http://www.example.com/users/a-unique-id
- 更新用户http://www.example.com/users/a-unique-id
- 删除用户状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
常见状态代码、状态描述的说明以下:
github.io - HTTP 协议 (笔试面试知识整理) - 资料很全面
若只使用python3.X, 下面能够不看了, 记住有个urllib的库就好了
python2.X 有这些库名可用: urllib, urllib2, urllib3, httplib, httplib2, requests
python3.X 有这些库名可用: urllib, urllib3, httplib2, requests
二者都有的urllib3和requests, 它们不是标准库. urllib3 提供线程安全链接池和文件post支持,与urllib及urllib2的关系不大. requests 自称HTTP for Humans, 使用更简洁方便。
详细信息请参考 - 开源中国 - python中 urllib, urllib2, httplib, httplib2 几个库的区别