SlideShare a Scribd company logo
1 of 200
Download to read offline
HTTP 
& Your Angry Dog 
ZendCon 2014 
Ross Tuck
Freerange Codemonkey 
Know-It-All 
Hot-Air Balloon
@rosstuck 
rosstuck.com
Today's topic:
Dogs
HTTP & Dogs
The Agenda
Basics
Request 
Response 
Client Server
Request 
POST /gists HTTP/1.1 
Authorization: Basic xxxxxxxx 
Host: api.github.com 
Content-Length: 146 
{ 
"description": "the description for this gist", 
"public": false, 
"files": { 
...
Request 
POST /gists HTTP/1.1 
Authorization: Basic xxxxxxxx 
Host: api.github.com 
Content-Length: 146 
{ 
"description": "the description for this gist", 
"public": false, 
"files": { 
... 
2 Parts
Request 
POST /gists HTTP/1.1 
Authorization: Basic xxxxxxxx 
Host: api.github.com 
Content-Length: 146 
{ 
"description": "the description for this gist", 
"public": false, 
"files": { 
... 
The body
Request 
POST /gists HTTP/1.1 
Authorization: Basic xxxxxxxx 
Host: api.github.com 
Content-Length: 146 
<!DOCTYPE html> 
<html> 
<head> 
<meta charset='utf-8'> 
<title>My application</title> 
... 
The body
Request 
POST /gists HTTP/1.1 
Authorization: Basic xxxxxxxx 
Host: api.github.com 
Content-Length: 146 
{ 
"description": "the description for this gist", 
"public": false, 
"files": { 
... 
The body
Request 
POST /gists HTTP/1.1 
Authorization: Basic xxxxxxxx 
Host: api.github.com 
Content-Length: 146 
{ 
"description": "the description for this gist", 
"public": false, 
"files": { 
...
Request 
POST /gists HTTP/1.1 
Authorization: Basic xxxxxxxx 
Host: api.github.com 
Content-Length: 146 
{ 
"description": "the description for this gist", 
"public": false, 
"files": { 
... 
The headers
Request 
POST /gists HTTP/1.1 
Authorization: Basic xxxxxxxx 
Host: api.github.com 
Content-Length: 146 
{ 
"description": "the description for this gist", 
"public": false, 
"files": { 
... 
The good stuf
Request 
POST /gists HTTP/1.1 
Authorization: Basic xxxxxxxx 
Host: api.github.com 
Content-Length: 146 
{ 
"description": "the description for this gist", 
"public": false, 
"files": { 
...
Request 
POST /gists HTTP/1.1 
Authorization: Basic xxxxxxxx 
Host: api.github.com 
Content-Length: 146 
{ 
"description": "the description for this gist", 
"public": false, 
"files": { 
... 
GET, POST, PUT, DELETE
Request Relative URL 
POST /gists HTTP/1.1 
Authorization: Basic xxxxxxxx 
Host: api.github.com 
Content-Length: 146 
{ 
"description": "the description for this gist", 
"public": false, 
"files": { 
... 
HTTP version
Request 
POST /gists HTTP/1.1 
Authorization: Basic xxxxxxxx 
Host: api.github.com 
Content-Length: 146 
{ 
"description": "the description for this gist", 
"public": false, 
"files": { 
... 
Key/Value pairs
Request 
POST /gists HTTP/1.1 
Authorization: Basic xxxxxxxx 
Host: api.github.com 
Content-Length: 146 
{ 
"description": "the description for this gist", 
"public": false, 
"files": { 
...
Response 
HTTP/1.1 201 Created 
Date: Sun, 09 Sep 2012 11:42:41 GMT 
Content-Length: 1848 
Location: https://api.github.com/gists/a43a0cf58 
{ 
"description": "the description for this gist", 
"comments": 0, 
"created_at": "2012-09-09T11:42:40Z", 
... 
Status code
• 2xx 
• 3xx 
• 4xx 
• 5xx 
OK! 
Over there! 
Client screwed up! 
Server screwed up!
Content Negotiation
Request 
GET /dogs/corgi HTTP/1.1 
Host: api.example.com
Response 
HTTP/1.1 200 OK 
Date: Sun, 26 Aug 2012 18:00:43 GMT 
{ 
"cute": true, 
"big": false, 
"data_dog": true 
}
Response 
HTTP/1.1 200 OK 
Date: Sun, 26 Aug 2012 18:00:43 GMT 
<dog breed="corgi"> 
<cute>true</cute> 
<data capacity="on" /> 
</dog>
Request 
GET /dogs/corgi HTTP/1.1 
Host: api.example.com
Request 
GET /dogs/corgi.json HTTP/1.1 
Host: api.example.com
/dogs/corgi.json !== /dogs/corgi.xml
Imagine the URL as your primary key.
Request 
GET /dogs/corgi HTTP/1.1 
Host: api.example.com
Request 
GET /dogs/corgi?_format=json HTTP/1.1 
Host: api.example.com
Request 
POST /dogs/corgi?_format=json HTTP/1.1 
Host: api.example.com
Request 
GET /dogs/corgi HTTP/1.1 
Host: api.example.com
Request 
GET /dogs/corgi HTTP/1.1 
Host: api.example.com 
Accept: application/json
More POWAH
Request 
GET /dogs/corgi HTTP/1.1 
Host: api.example.com 
Accept: application/json
Request 
GET /dogs/corgi HTTP/1.1 
Host: api.example.com 
Accept: application/json, application/xml 
How do I choose?
Request 
GET /dogs/corgi HTTP/1.1 
Host: api.example.com 
Accept: application/json, application/xml
Response 
HTTP/1.1 200 OK 
Date: Sun, 26 Aug 2012 18:00:43 GMT 
Content-Type: application/json 
{ 
"cute": true, 
"big": false, 
"data_dog": true 
}
Nifty.
Request 
GET /dogs/corgi HTTP/1.1 
Host: api.example.com 
Accept: application/json, application/xml
text/html, text/plain
text/html;key=value, text/plain
text/html;key=value;foo=bar, text/plain
text/html, text/plain
Quality 
(Default 1.0) 
text/html, text/plain;q=0.5
text/html, text/plain;q=0.5, text/*;q=0.1 
Wildcards
Anything at all 
text/html, text/plain;q=0.5, */*;q=0.1
Accept Headers 
Little weird...
But not so scary.
text/html,application/xhtml+xml, 
application/xml;q=0.9,*/*;q=0.8
Cool...
What the heck is it good for?
Accept is a “Pattern”
Accept-Language 
Accept-Encoding 
Accept-Charset 
Accept-Ranges
Content-Language 
Content-Encoding 
(works differently) 
Content-Range
/dog/corgi 
Resource vs Representation 
JSON, 
Dutch, 
Gzipped, 
/dog/corgi
Resource vs Representation
Best way to version your API. 
Arguably. 
Right now.
/v1/dogs/corgi
Accept: application/vnd.dogipedia-v1+json
Accept: application/vnd.dogipedia-v2+json
Vary
GET /dogs/corgi HTTP/1.1 
Host: api.example.com 
Client Server
GET /dogs/corgi HTTP/1.1 
Host: api.example.com 
Client Server
GET /dogs/corgi HTTP/1.1 
Host: api.example.com 
Client Proxy Server
GET /dogs/corgi HTTP/1.1 
Host: api.example.com 
Accept: application/json, text/plain 
User-Species: cat 
Client Proxy Server
Same URL. 
Different output. 
WTF should I return?
GET /dogs/corgi HTTP/1.1 
Host: api.example.com 
Accept: application/json, text/plain 
User-Species: cat 
Client Proxy Server
Client Proxy Server
Here's how. 
Hint: 
Involves the 
Vary header!
/dogs/corgi 
Accept: application/json, text/plain 
User-Species: cat 
Client Proxy Server
Response 
HTTP/1.1 200 OK 
Date: Sun, 26 Aug 2012 18:00:43 GMT 
Content-Type: application/json 
Vary: Accept 
{“json”: “omgz”}
URL and Accept? 
Okay, I got this. 
Client Proxy Server
Some time later...
/dogs/corgi 
Accept: application/json, text/plain 
User-Species: aardvark 
Client Proxy Server
Valid cache. 
I has it. 
Client Proxy Server
ZZZ 
Z Z 
Z 
Client Proxy Server
Response 
HTTP/1.1 200 OK 
Date: Sun, 26 Aug 2012 18:00:43 GMT 
Content-Type: application/json 
Vary: Accept 
{“json”: “omgz”}
Response 
HTTP/1.1 200 OK 
Date: Sun, 26 Aug 2012 18:00:43 GMT 
Content-Type: application/json 
Vary: Accept, User-Species 
{“json”: “omgz”}
Response 
HTTP/1.1 200 OK 
Date: Sun, 26 Aug 2012 18:00:43 GMT 
Content-Type: application/json 
Vary: Accept, User-Species 
{“json”: “dogs rule, cats drool”}
Request headers. 
Not Response!
Bad Reputation? 
2 Reasons
1. Accept-Encoding 
-Language
2. Internet Explorer
Caching
Expires 
Pragma 
Cache-Control
Expires 
Pragma 
Cache-Control
Expires 
Cache-Control 
HTTP 1.0 
HTTP 1.1
Response 
HTTP/1.1 200 OK 
Expires: Wed, 29 Oct 2014 22:00:00 GMT 
{“herp”: “derp”}
Response 
HTTP/1.1 200 OK 
Cache-Control: max-age=120 
{“herp”: “derp”}
Response 
HTTP/1.1 200 OK 
Cache-Control: max-age=120
Expires 
Cache-Control 
HTTP 1.0 
HTTP 1.1
Response 
HTTP/1.1 200 OK 
Cache-Control: max-age=120 
{“herp”: “derp”}
Response 
HTTP/1.1 200 OK 
Cache-Control: max-age=120, s-maxage=120 
{“herp”: “derp”} 
Dude, Where's 
my dash?
public 
private 
no-store 
no-cache 
no-transform 
must-revalidate 
proxy-revalidate
Much better 
than me. 
Mark Nottingham's Caching Tutorial 
http://www.mnot.net/cache_docs/
Conditional Requests
Conditional Requests
The Part About ETags
Conditional Requests
Request 
DELETE /ross/reputation HTTP/1.1 
Host: api.joind.in 
If-Talk-Quality: Crap
if ($talkQuality === 'Crap') { 
real code 
delete($rossReputation); 
Not } Server
What kind of conditions?
If-Match 
If-None-Match 
If-Modified-Since 
If-Unmodified-Since 
If-Range 
ETags 
Datetimes 
Either
Wait a second, Ross. 
Audience
What the heck is an ETag?
A string. 
Any string.
One rule:
Represent the current state.
“14” 
“a381bedb5d4478053eb04be35f8798dd” 
“winnie-the-pooh”
...for the current representation.
etag(“v14-json-en”) !== etag(“v14-xml-en”) 
Don't cross the streams 
Server
Last Modified Date sounds easier... 
Audience
One second 
of precision 
Wed, 15 Nov 1995 04:58:08 GMT
Caching With Conditionals
Use Case
Request 
GET /gists/3481910 HTTP/1.1 
Host: api.github.com 
Accept: */*
Response 
HTTP/1.1 200 OK 
Server: nginx/1.0.13 
Date: Sun, 26 Aug 2012 18:00:43 GMT 
Vary: Accept 
ETag: "f4e15911542b92b44bb38186e71cc8f5" 
"history": [ 
{ 
"version": "529f6311d5518977534b6e1fd313...", 
...
Response 
... 
"user": { 
"gravatar_id": "c26bfcbd5f786591e036fa0", 
"avatar_url": "https://secure.gravatar...", 
"login": "rosstuck", 
"url": "https://api.github.com/users/rosstuck", 
"id": 146766 
}, 
"change_status": { 
"additions": 1, 
"deletions": 0, 
"total": 1 
},
Response 
"url": "https://api.github.com/gists/348...", 
"committed_at": "2012-08-26T17:40:03Z" 
} 
], 
"git_pull_url": "git://gist.github.com/34819...", 
"forks": [ 
], 
"html_url": "https://gist.github.com/3481910", 
"git_push_url": "git@gist.github.com:3481910.git", 
"comments": 0, 
"user": {
Response 
HTTP/1.1 200 OK 
Server: nginx/1.0.13 
Date: Sun, 26 Aug 2012 18:00:43 GMT 
Vary: Accept 
ETag: "f4e15911542b92b44bb38186e71cc8f5" 
{ 
"history": [ 
{ 
"version": "529f6311d5518970903cb5427534b6e1fd313aca", 
"user": { 
"gravatar_id": "c26bfcbd5f786591e036fa0958a11e8b", 
"avatar_url": "https://secure.gravatar.com/avatar/c26bfcbd5f786591e036fa0958a11e8b?d=https://a2... 
"login": "rosstuck", 
"url": "https://api.github.com/users/rosstuck", 
"id": 146766 
}, 
"change_status": { 
"additions": 1, 
"deletions": 0, 
"total": 1 
}, 
"url": "https://api.github.com/gists/3481910/529f6311d5518970903cb5427534b6e1fd313aca", 
"committed_at": "2012-08-26T17:40:03Z" 
} 
], 
"git_pull_url": "git://gist.github.com/3481910.git", 
"forks": [ 
], 
"html_url": "https://gist.github.com/3481910", 
"git_push_url": "git@gist.github.com:3481910.git", 
"comments": 0, 
"user": { 
"gravatar_id": "c26bfcbd5f786591e036fa0958a11e8b", 
"avatar_url": "https://secure.gravatar.com/avatar/c26bfcbd5f78659....",} 
"login": "rosstuck", 
"url": "https://api.github.com/users/rosstuck", 
"id": 146766 
}, 
"public": true, 
"created_at": "2012-08-26T17:40:03Z", 
"files": { 
"gistfile1.txt": { 
"type": "text/plain", 
"filename": "gistfile1.txt", 
"raw_url": "https://gist.github.com/raw/3481910/8b6946739e8098408ee3af96... 
"content": "Hello PFC!", 
"language": null, 
"size": 10 
} 
}, 
"description": "", 
"url": "https://api.github.com/gists/3481910", 
"updated_at": "2012-08-26T17:40:03Z", 
"id": "3481910" 
}
Request 
GET /gists/3481910 HTTP/1.1 
Host: api.github.com 
Accept: */* 
If-None-Match: "f4e15911542b92b44bb38186e71cc8f5"
Response 
HTTP/1.1 304 Not Modified 
Server: nginx/1.0.13 
Date: Sun, 26 Aug 2012 18:00:43 GMT 
Vary: Accept 
ETag: "f4e15911542b92b44bb38186e71cc8f5"
Response 
HTTP/1.1 304 Not Modified 
Server: nginx/1.0.13 
Date: Sun, 26 Aug 2012 18:00:43 GMT 
Vary: Accept 
ETag: "f4e15911542b92b44bb38186e71cc8f5"
Response 
HTTP/1.1 304 Not Modified 
Server: nginx/1.0.13 
Date: Sun, 26 Aug 2012 18:00:43 GMT 
Vary: Accept 
ETag: "f4e15911542b92b44bb38186e71cc8f5" 
No giant body!
Caching. 
You has it.
Request 
GET /gists/3481910 HTTP/1.1 
Host: api.github.com 
Accept: */* 
If-None-Match: "a381bedb5d4478053eb04be35f8798dd"
Request 
GET /gists/3481910 HTTP/1.1 
Host: api.github.com 
Accept: */* 
If-None-Match: "ross-is-a-poo-poo-head"
Response 
HTTP/1.1 200 OK 
Server: nginx/1.0.13 
Date: Sun, 26 Aug 2012 18:00:43 GMT 
Vary: Accept 
ETag: "f4e15911542b92b44bb38186e71cc8f5" 
"history": [ 
{ 
"version": "529f6311d5518977534b6e1fd313...",
Recap
No ETag 
Old ETag 
Matching ETag 
Full Body 
Full Body 
No Body 
→ 
→ 
→
...on supported servers.
Why?
Parsing 
Bandwidth 
Response time 
Probably 
.Maybe
However...
“The fastest request is one you don't make.” 
- Jesus
More Fun With ETags
Optimistic Concurrency Control 
“Record Versioning”
Request
Request 
GET /gists/3481910 HTTP/1.1 
Host: api.github.com 
Accept: */* 
If-None-Match: "f4e15911542b92b44bb38186e71cc8f5"
Request 
PATCH /gists/3481910 HTTP/1.1 
Host: api.github.com 
Accept: */* 
If-None-Match: "f4e15911542b92b44bb38186e71cc8f5"
Request 
PATCH /gists/3481910 HTTP/1.1 
Host: api.github.com 
Accept: */* 
If-Match: "f4e15911542b92b44bb38186e71cc8f5"
Request 
PATCH /gists/3481910 HTTP/1.1 
Host: api.github.com 
Accept: */* 
If-Match: "f4e15911542b92b44bb38186e71cc8f5" 
{ "description": "cheese om nom nom" }
Response
Response 
HTTP/1.1 200 OK 
Server: nginx/1.0.13 
Date: Sat, 01 Sep 2012 14:01:38 GMT 
ETag: "899b76047a5e68445668374c2e0faa32" 
{ 
"description": "cheese om nom nom", 
"user": { 
"login": "rosstuck", 
...
It works.
So what?
What if I send something...
Request 
PATCH /gists/3481910 HTTP/1.1 
Host: api.github.com 
Accept: */* 
If-Match: "899b76047a5e68445668374c2e0faa32" 
{ "description": "cheese om nom nom" }
Request 
PATCH /gists/3481910 HTTP/1.1 
Host: api.github.com 
Accept: */* 
If-Match: "stay-puft-marshmellow-dog!" 
{ "description": "cheese om nom nom" }
Response 
HTTP/1.1 412 Precondition Failed 
Server: nginx/1.0.13 
Date: Sun, 26 Aug 2012 18:00:43 GMT
Response
Server 
if (“stay-puft-marshmellow-dog” == “f4e1591..”) { 
patchTheRecord(); 
}
Server 
if (“stay-puft-marshmellow-dog” == “f4e1591..”) { 
patchTheRecord(); 
} else { 
sendScary412Message(); 
}
Your ETag is out of date.
“Two guys on the same record” problem
Scary Precondition Error pt. 2
Disclaimer 
New Stuff Ahead
Request 
DELETE /gists/3481910 HTTP/1.1 
Host: api.github.com
Response 
HTTP/1.1 428 Precondition Required 
Server: nginx/1.0.13 
Date: Sun, 26 Aug 2012 18:00:43 GMT
Am I operating on the latest version?
Request 
DELETE /gists/3481910 HTTP/1.1 
Host: api.github.com
Request 
DELETE /gists/3481910 HTTP/1.1 
Host: api.github.com 
If-Match: "f4e15911542b92b44bb38186e71cc8f5"
Response 
HTTP/1.1 204 No Content 
Server: nginx/1.0.13 
Date: Sun, 26 Aug 2012 18:00:43 GMT
Look before you leap.
Tooling
Epilogue: HTTP & Dogs
Content Negotiation 
Vary 
Caching 
Preconditions
Treat it like your framework.
Questions?
Resources 
• RFC 7231 
–Sections 4 - 7 
• http://redbot.org/ 
• http://mnot.net/cache_docs/ 
• http://charlesproxy.com/ 
• http://guzzlephp.org/
Image Credits 
• http://www.sxc.hu/photo/555539 
• http://www.flickr.com/photos/thedalogs/2953136078/ 
• http://www.sxc.hu/photo/678952 
• http://www.flickr.com/photos/designgate/8317884432/ 
• http://www.flickr.com/photos/barretthall/3289317664/ 
• http://www.flickr.com/photos/binaryape/3702275400/lightbox/ 
• http://www.flickr.com/photos/istolethetv/2956799679/in/photostream/ 
• http://theflashbackspodcast.blogspot.nl/2012/01/30-day-film-challenge-day-8.html 
• http://www.flickr.com/photos/jonomueller/6906420190/ 
• http://www.flickr.com/photos/cookbookman/6175752147 
• http://www.flickr.com/photos/creativedc/2913123330/ 
• http://www.flickr.com/photos/epc/44053757/ 
• http://www.flickr.com/photos/soggydan/4698849104/ 
• http://www.flickr.com/photos/owldreams/4430175427/ 
• http://www.flickr.com/photos/piddleville/2499539542/ 
• http://www.flickr.com/photos/danja/5665671907/ 
• http://www.flickr.com/photos/cradlehall/3574160744/ 
• http://www.flickr.com/photos/ironypoisoning/7114801437/ 
• http://www.flickr.com/photos/piddleville/2499539542/lightbox/ 
• http://everydayidrawadog.blogspot.nl/2009_02_01_archive.html
joind.in/12071 
Ross Tuck rosstuck.com 
@rosstuck

More Related Content

What's hot

Improving SparkSQL Performance by 30%: How We Optimize Parquet Pushdown and P...
Improving SparkSQL Performance by 30%: How We Optimize Parquet Pushdown and P...Improving SparkSQL Performance by 30%: How We Optimize Parquet Pushdown and P...
Improving SparkSQL Performance by 30%: How We Optimize Parquet Pushdown and P...Databricks
 
Full-on Hypermedia APIs with Hydra
Full-on Hypermedia APIs with HydraFull-on Hypermedia APIs with Hydra
Full-on Hypermedia APIs with HydraMarkus Lanthaler
 
Apache Spark for RDBMS Practitioners: How I Learned to Stop Worrying and Lov...
 Apache Spark for RDBMS Practitioners: How I Learned to Stop Worrying and Lov... Apache Spark for RDBMS Practitioners: How I Learned to Stop Worrying and Lov...
Apache Spark for RDBMS Practitioners: How I Learned to Stop Worrying and Lov...Databricks
 
A Deep Dive into Query Execution Engine of Spark SQL
A Deep Dive into Query Execution Engine of Spark SQLA Deep Dive into Query Execution Engine of Spark SQL
A Deep Dive into Query Execution Engine of Spark SQLDatabricks
 
Elassandra: Elasticsearch as a Cassandra Secondary Index (Rémi Trouville, Vin...
Elassandra: Elasticsearch as a Cassandra Secondary Index (Rémi Trouville, Vin...Elassandra: Elasticsearch as a Cassandra Secondary Index (Rémi Trouville, Vin...
Elassandra: Elasticsearch as a Cassandra Secondary Index (Rémi Trouville, Vin...DataStax
 
Project Tungsten: Bringing Spark Closer to Bare Metal
Project Tungsten: Bringing Spark Closer to Bare MetalProject Tungsten: Bringing Spark Closer to Bare Metal
Project Tungsten: Bringing Spark Closer to Bare MetalDatabricks
 
Introduction to Spark with Python
Introduction to Spark with PythonIntroduction to Spark with Python
Introduction to Spark with PythonGokhan Atil
 
Hive and Apache Tez: Benchmarked at Yahoo! Scale
Hive and Apache Tez: Benchmarked at Yahoo! ScaleHive and Apache Tez: Benchmarked at Yahoo! Scale
Hive and Apache Tez: Benchmarked at Yahoo! ScaleDataWorks Summit
 
Hoodie: Incremental processing on hadoop
Hoodie: Incremental processing on hadoopHoodie: Incremental processing on hadoop
Hoodie: Incremental processing on hadoopPrasanna Rajaperumal
 
Apache Spark Core – Practical Optimization
Apache Spark Core – Practical OptimizationApache Spark Core – Practical Optimization
Apache Spark Core – Practical OptimizationDatabricks
 
Internals of Speeding up PySpark with Arrow
 Internals of Speeding up PySpark with Arrow Internals of Speeding up PySpark with Arrow
Internals of Speeding up PySpark with ArrowDatabricks
 
Hyperspace for Delta Lake
Hyperspace for Delta LakeHyperspace for Delta Lake
Hyperspace for Delta LakeDatabricks
 
Sparser: Faster Parsing of Unstructured Data Formats in Apache Spark with Fir...
Sparser: Faster Parsing of Unstructured Data Formats in Apache Spark with Fir...Sparser: Faster Parsing of Unstructured Data Formats in Apache Spark with Fir...
Sparser: Faster Parsing of Unstructured Data Formats in Apache Spark with Fir...Databricks
 
Hyperspace: An Indexing Subsystem for Apache Spark
Hyperspace: An Indexing Subsystem for Apache SparkHyperspace: An Indexing Subsystem for Apache Spark
Hyperspace: An Indexing Subsystem for Apache SparkDatabricks
 
Spark Shuffle Deep Dive (Explained In Depth) - How Shuffle Works in Spark
Spark Shuffle Deep Dive (Explained In Depth) - How Shuffle Works in SparkSpark Shuffle Deep Dive (Explained In Depth) - How Shuffle Works in Spark
Spark Shuffle Deep Dive (Explained In Depth) - How Shuffle Works in SparkBo Yang
 
Inno Db Internals Inno Db File Formats And Source Code Structure
Inno Db Internals Inno Db File Formats And Source Code StructureInno Db Internals Inno Db File Formats And Source Code Structure
Inno Db Internals Inno Db File Formats And Source Code StructureMySQLConference
 
Apache Calcite: One planner fits all
Apache Calcite: One planner fits allApache Calcite: One planner fits all
Apache Calcite: One planner fits allJulian Hyde
 

What's hot (20)

Improving SparkSQL Performance by 30%: How We Optimize Parquet Pushdown and P...
Improving SparkSQL Performance by 30%: How We Optimize Parquet Pushdown and P...Improving SparkSQL Performance by 30%: How We Optimize Parquet Pushdown and P...
Improving SparkSQL Performance by 30%: How We Optimize Parquet Pushdown and P...
 
Full-on Hypermedia APIs with Hydra
Full-on Hypermedia APIs with HydraFull-on Hypermedia APIs with Hydra
Full-on Hypermedia APIs with Hydra
 
Apache Spark for RDBMS Practitioners: How I Learned to Stop Worrying and Lov...
 Apache Spark for RDBMS Practitioners: How I Learned to Stop Worrying and Lov... Apache Spark for RDBMS Practitioners: How I Learned to Stop Worrying and Lov...
Apache Spark for RDBMS Practitioners: How I Learned to Stop Worrying and Lov...
 
A Deep Dive into Query Execution Engine of Spark SQL
A Deep Dive into Query Execution Engine of Spark SQLA Deep Dive into Query Execution Engine of Spark SQL
A Deep Dive into Query Execution Engine of Spark SQL
 
Elassandra: Elasticsearch as a Cassandra Secondary Index (Rémi Trouville, Vin...
Elassandra: Elasticsearch as a Cassandra Secondary Index (Rémi Trouville, Vin...Elassandra: Elasticsearch as a Cassandra Secondary Index (Rémi Trouville, Vin...
Elassandra: Elasticsearch as a Cassandra Secondary Index (Rémi Trouville, Vin...
 
Project Tungsten: Bringing Spark Closer to Bare Metal
Project Tungsten: Bringing Spark Closer to Bare MetalProject Tungsten: Bringing Spark Closer to Bare Metal
Project Tungsten: Bringing Spark Closer to Bare Metal
 
Introduction to Spark with Python
Introduction to Spark with PythonIntroduction to Spark with Python
Introduction to Spark with Python
 
Hive and Apache Tez: Benchmarked at Yahoo! Scale
Hive and Apache Tez: Benchmarked at Yahoo! ScaleHive and Apache Tez: Benchmarked at Yahoo! Scale
Hive and Apache Tez: Benchmarked at Yahoo! Scale
 
Hoodie: Incremental processing on hadoop
Hoodie: Incremental processing on hadoopHoodie: Incremental processing on hadoop
Hoodie: Incremental processing on hadoop
 
Apache Spark Core – Practical Optimization
Apache Spark Core – Practical OptimizationApache Spark Core – Practical Optimization
Apache Spark Core – Practical Optimization
 
Spark
SparkSpark
Spark
 
Internals of Speeding up PySpark with Arrow
 Internals of Speeding up PySpark with Arrow Internals of Speeding up PySpark with Arrow
Internals of Speeding up PySpark with Arrow
 
Introduction to NoSQL
Introduction to NoSQLIntroduction to NoSQL
Introduction to NoSQL
 
Hyperspace for Delta Lake
Hyperspace for Delta LakeHyperspace for Delta Lake
Hyperspace for Delta Lake
 
Sparser: Faster Parsing of Unstructured Data Formats in Apache Spark with Fir...
Sparser: Faster Parsing of Unstructured Data Formats in Apache Spark with Fir...Sparser: Faster Parsing of Unstructured Data Formats in Apache Spark with Fir...
Sparser: Faster Parsing of Unstructured Data Formats in Apache Spark with Fir...
 
NoSQL
NoSQLNoSQL
NoSQL
 
Hyperspace: An Indexing Subsystem for Apache Spark
Hyperspace: An Indexing Subsystem for Apache SparkHyperspace: An Indexing Subsystem for Apache Spark
Hyperspace: An Indexing Subsystem for Apache Spark
 
Spark Shuffle Deep Dive (Explained In Depth) - How Shuffle Works in Spark
Spark Shuffle Deep Dive (Explained In Depth) - How Shuffle Works in SparkSpark Shuffle Deep Dive (Explained In Depth) - How Shuffle Works in Spark
Spark Shuffle Deep Dive (Explained In Depth) - How Shuffle Works in Spark
 
Inno Db Internals Inno Db File Formats And Source Code Structure
Inno Db Internals Inno Db File Formats And Source Code StructureInno Db Internals Inno Db File Formats And Source Code Structure
Inno Db Internals Inno Db File Formats And Source Code Structure
 
Apache Calcite: One planner fits all
Apache Calcite: One planner fits allApache Calcite: One planner fits all
Apache Calcite: One planner fits all
 

Viewers also liked

MyUnfold Infographic
MyUnfold InfographicMyUnfold Infographic
MyUnfold InfographicMyUnfold
 
Anatomy of a Modern PHP Application Architecture
Anatomy of a Modern PHP Application Architecture Anatomy of a Modern PHP Application Architecture
Anatomy of a Modern PHP Application Architecture AppDynamics
 
Top 10 Lessons Learned from the Netflix API - OSCON 2014
Top 10 Lessons Learned from the Netflix API - OSCON 2014Top 10 Lessons Learned from the Netflix API - OSCON 2014
Top 10 Lessons Learned from the Netflix API - OSCON 2014Daniel Jacobson
 
Microservices architecture overview v2
Microservices architecture overview v2Microservices architecture overview v2
Microservices architecture overview v2Dmitry Skaredov
 

Viewers also liked (7)

REST Presentation
REST PresentationREST Presentation
REST Presentation
 
MyUnfold Infographic
MyUnfold InfographicMyUnfold Infographic
MyUnfold Infographic
 
Anatomy of a Modern PHP Application Architecture
Anatomy of a Modern PHP Application Architecture Anatomy of a Modern PHP Application Architecture
Anatomy of a Modern PHP Application Architecture
 
Top 10 Lessons Learned from the Netflix API - OSCON 2014
Top 10 Lessons Learned from the Netflix API - OSCON 2014Top 10 Lessons Learned from the Netflix API - OSCON 2014
Top 10 Lessons Learned from the Netflix API - OSCON 2014
 
Microservices architecture overview v2
Microservices architecture overview v2Microservices architecture overview v2
Microservices architecture overview v2
 
RESTful Web Services
RESTful Web ServicesRESTful Web Services
RESTful Web Services
 
Build Features, Not Apps
Build Features, Not AppsBuild Features, Not Apps
Build Features, Not Apps
 

Similar to HTTP Requests and Responses Explained

Varnish Cache and Django (Falcon, Flask etc)
Varnish Cache and Django (Falcon, Flask etc)Varnish Cache and Django (Falcon, Flask etc)
Varnish Cache and Django (Falcon, Flask etc)Данил Иванов
 
Python tools for testing web services over HTTP
Python tools for testing web services over HTTPPython tools for testing web services over HTTP
Python tools for testing web services over HTTPMykhailo Kolesnyk
 
DEF CON 27- ALBINOWAX - http desync attacks
DEF CON 27- ALBINOWAX - http desync attacksDEF CON 27- ALBINOWAX - http desync attacks
DEF CON 27- ALBINOWAX - http desync attacksFelipe Prado
 
Under the Covers with the Web
Under the Covers with the WebUnder the Covers with the Web
Under the Covers with the WebTrevor Lohrbeer
 
Elegant Rest Design Webinar
Elegant Rest Design WebinarElegant Rest Design Webinar
Elegant Rest Design WebinarStormpath
 
ReST-ful Resource Management
ReST-ful Resource ManagementReST-ful Resource Management
ReST-ful Resource ManagementJoe Davis
 
PuppetConf 2015: Puppet API Roundup
PuppetConf 2015: Puppet API RoundupPuppetConf 2015: Puppet API Roundup
PuppetConf 2015: Puppet API RoundupJeremy Adams
 
Design Web Service API by HungerStation
Design Web Service API by HungerStationDesign Web Service API by HungerStation
Design Web Service API by HungerStationArabNet ME
 
REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011Alessandro Nadalin
 
Using an API
Using an APIUsing an API
Using an APIAdam Culp
 
Ruby HTTP clients comparison
Ruby HTTP clients comparisonRuby HTTP clients comparison
Ruby HTTP clients comparisonHiroshi Nakamura
 
Introduction to REST and Hypermedia
Introduction to REST and HypermediaIntroduction to REST and Hypermedia
Introduction to REST and HypermediaNordic APIs
 
WordPress APIs
WordPress APIsWordPress APIs
WordPress APIsmdawaffe
 
Implementing Comet using PHP
Implementing Comet using PHPImplementing Comet using PHP
Implementing Comet using PHPKing Foo
 
When RSS Fails: Web Scraping with HTTP
When RSS Fails: Web Scraping with HTTPWhen RSS Fails: Web Scraping with HTTP
When RSS Fails: Web Scraping with HTTPMatthew Turland
 
HTTP Caching and PHP
HTTP Caching and PHPHTTP Caching and PHP
HTTP Caching and PHPDavid de Boer
 
Talking Heads - writing an API does not need to be a "psycho killer"
Talking Heads - writing an API does not need to be a "psycho killer"Talking Heads - writing an API does not need to be a "psycho killer"
Talking Heads - writing an API does not need to be a "psycho killer"Theo van Hoesel
 

Similar to HTTP Requests and Responses Explained (20)

Varnish Cache and Django (Falcon, Flask etc)
Varnish Cache and Django (Falcon, Flask etc)Varnish Cache and Django (Falcon, Flask etc)
Varnish Cache and Django (Falcon, Flask etc)
 
Python tools for testing web services over HTTP
Python tools for testing web services over HTTPPython tools for testing web services over HTTP
Python tools for testing web services over HTTP
 
DEF CON 27- ALBINOWAX - http desync attacks
DEF CON 27- ALBINOWAX - http desync attacksDEF CON 27- ALBINOWAX - http desync attacks
DEF CON 27- ALBINOWAX - http desync attacks
 
Web Scraping with PHP
Web Scraping with PHPWeb Scraping with PHP
Web Scraping with PHP
 
Under the Covers with the Web
Under the Covers with the WebUnder the Covers with the Web
Under the Covers with the Web
 
Elegant Rest Design Webinar
Elegant Rest Design WebinarElegant Rest Design Webinar
Elegant Rest Design Webinar
 
ReST-ful Resource Management
ReST-ful Resource ManagementReST-ful Resource Management
ReST-ful Resource Management
 
PuppetConf 2015: Puppet API Roundup
PuppetConf 2015: Puppet API RoundupPuppetConf 2015: Puppet API Roundup
PuppetConf 2015: Puppet API Roundup
 
Design Web Service API by HungerStation
Design Web Service API by HungerStationDesign Web Service API by HungerStation
Design Web Service API by HungerStation
 
REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011REST in ( a mobile ) peace @ WHYMCA 05-21-2011
REST in ( a mobile ) peace @ WHYMCA 05-21-2011
 
Using an API
Using an APIUsing an API
Using an API
 
Caching on the Edge
Caching on the EdgeCaching on the Edge
Caching on the Edge
 
Rest
RestRest
Rest
 
Ruby HTTP clients comparison
Ruby HTTP clients comparisonRuby HTTP clients comparison
Ruby HTTP clients comparison
 
Introduction to REST and Hypermedia
Introduction to REST and HypermediaIntroduction to REST and Hypermedia
Introduction to REST and Hypermedia
 
WordPress APIs
WordPress APIsWordPress APIs
WordPress APIs
 
Implementing Comet using PHP
Implementing Comet using PHPImplementing Comet using PHP
Implementing Comet using PHP
 
When RSS Fails: Web Scraping with HTTP
When RSS Fails: Web Scraping with HTTPWhen RSS Fails: Web Scraping with HTTP
When RSS Fails: Web Scraping with HTTP
 
HTTP Caching and PHP
HTTP Caching and PHPHTTP Caching and PHP
HTTP Caching and PHP
 
Talking Heads - writing an API does not need to be a "psycho killer"
Talking Heads - writing an API does not need to be a "psycho killer"Talking Heads - writing an API does not need to be a "psycho killer"
Talking Heads - writing an API does not need to be a "psycho killer"
 

Recently uploaded

A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 

Recently uploaded (20)

A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 

HTTP Requests and Responses Explained