Foreword |
|
xvii | |
Acknowledgments |
|
xix | |
Introduction |
|
xxi | |
|
|
1 | (36) |
|
|
1 | (3) |
|
|
4 | (2) |
|
Exploring Behind the Scene |
|
|
6 | (18) |
|
Making BuzzWatch a Better Web Citizen |
|
|
24 | (4) |
|
Making BuzzWatch More Maintainable |
|
|
28 | (5) |
|
|
33 | (2) |
|
|
35 | (2) |
|
|
37 | (24) |
|
Creating Clean and Simple Pages |
|
|
37 | (5) |
|
|
38 | (2) |
|
Using Cascading Style Sheets |
|
|
40 | (1) |
|
Choosing Appropriate Elements |
|
|
41 | (1) |
|
|
42 | (5) |
|
|
43 | (1) |
|
|
43 | (1) |
|
|
44 | (1) |
|
|
45 | (2) |
|
The Document Object Model |
|
|
47 | (4) |
|
|
49 | (1) |
|
|
49 | (2) |
|
|
51 | (1) |
|
|
51 | (4) |
|
|
52 | (2) |
|
|
54 | (1) |
|
|
55 | (5) |
|
The DOM Inspector for Firefox |
|
|
55 | (2) |
|
The Web Developer Toolbar for Firefox |
|
|
57 | (1) |
|
The Internet Explorer Developer Toolbar |
|
|
58 | (1) |
|
|
59 | (1) |
|
|
60 | (1) |
|
|
61 | (22) |
|
JavaScript: Understanding Lesser-Known but Crucial Features |
|
|
61 | (8) |
|
The undefined Value and Type |
|
|
62 | (2) |
|
|
64 | (1) |
|
|
65 | (1) |
|
|
66 | (1) |
|
|
67 | (2) |
|
|
69 | (1) |
|
Reducing JavaScript Download Time |
|
|
69 | (1) |
|
Keep DOM Updates to a Minimum |
|
|
70 | (1) |
|
|
70 | (11) |
|
It's All About the User Experience |
|
|
71 | (1) |
|
|
71 | (1) |
|
|
72 | (3) |
|
|
75 | (3) |
|
|
78 | (1) |
|
|
79 | (2) |
|
|
81 | (2) |
|
|
83 | (28) |
|
|
84 | (25) |
|
|
84 | (4) |
|
|
88 | (1) |
|
|
89 | (4) |
|
Support for Down-Level Devices |
|
|
93 | (1) |
|
Accessibility Requirements and Guidelines |
|
|
94 | (15) |
|
|
109 | (2) |
|
|
111 | (56) |
|
|
111 | (13) |
|
|
112 | (2) |
|
|
114 | (3) |
|
|
117 | (2) |
|
|
119 | (3) |
|
|
122 | (2) |
|
|
124 | (18) |
|
|
126 | (4) |
|
|
130 | (2) |
|
|
132 | (10) |
|
|
142 | (19) |
|
XForms Hello World Example |
|
|
143 | (4) |
|
|
147 | (4) |
|
|
151 | (10) |
|
|
161 | (4) |
|
|
162 | (1) |
|
The WHATWG Counterproposals |
|
|
163 | (1) |
|
Comparing XHTML 2.0 and HTML 5 |
|
|
164 | (1) |
|
|
165 | (2) |
|
|
167 | (26) |
|
From Browsers to Rich Clients |
|
|
167 | (2) |
|
|
168 | (1) |
|
A Solution --- Rich Clients |
|
|
169 | (1) |
|
|
169 | (1) |
|
Comparing Rich Client Frameworks |
|
|
169 | (21) |
|
|
170 | (9) |
|
|
179 | (7) |
|
|
186 | (4) |
|
|
190 | (3) |
|
|
193 | (28) |
|
|
193 | (1) |
|
Web 1.0: HTML, URLs, and HTTP |
|
|
194 | (6) |
|
|
195 | (1) |
|
|
196 | (3) |
|
|
199 | (1) |
|
What Does a Web Server Really Do? |
|
|
199 | (1) |
|
|
200 | (1) |
|
|
200 | (4) |
|
|
201 | (1) |
|
|
201 | (1) |
|
|
202 | (1) |
|
Transfer: Using HTTP Methods |
|
|
203 | (1) |
|
Considerations for Building an HTTP Service |
|
|
204 | (4) |
|
|
205 | (1) |
|
|
205 | (1) |
|
|
206 | (1) |
|
|
207 | (1) |
|
|
208 | (4) |
|
|
208 | (1) |
|
|
208 | (4) |
|
|
212 | (7) |
|
|
214 | (1) |
|
Watching Messages with HTTPTracet |
|
|
215 | (4) |
|
|
219 | (2) |
|
|
221 | (22) |
|
|
221 | (14) |
|
|
221 | (4) |
|
|
225 | (2) |
|
Unicode and Character Encodings |
|
|
227 | (2) |
|
|
229 | (1) |
|
Features of XML You Usually Won't Need |
|
|
230 | (1) |
|
|
231 | (1) |
|
|
232 | (1) |
|
|
233 | (1) |
|
|
234 | (1) |
|
Existing Data Formats and Protocols |
|
|
235 | (1) |
|
|
235 | (1) |
|
|
235 | (6) |
|
|
236 | (2) |
|
|
238 | (1) |
|
|
238 | (2) |
|
|
240 | (1) |
|
|
241 | (2) |
|
|
243 | (22) |
|
|
243 | (3) |
|
|
244 | (1) |
|
|
244 | (2) |
|
|
246 | (1) |
|
|
246 | (17) |
|
|
247 | (4) |
|
RSS 1.0: Resource Description |
|
|
251 | (5) |
|
RSS 1.0 Specifications and Modules |
|
|
256 | (1) |
|
Atom: Best of Both Worlds? |
|
|
257 | (4) |
|
Atom Specifications and Extensions |
|
|
261 | (1) |
|
Comparing Elements Across Formats |
|
|
261 | (1) |
|
Enclosures and Podcasting |
|
|
262 | (1) |
|
|
263 | (2) |
|
|
265 | (22) |
|
The Basics of Microformats |
|
|
266 | (9) |
|
|
267 | (2) |
|
|
269 | (1) |
|
Content, Presentation, and Data |
|
|
269 | (1) |
|
|
269 | (2) |
|
|
271 | (2) |
|
|
273 | (2) |
|
Creating Microformat Documents |
|
|
275 | (10) |
|
|
275 | (10) |
|
|
285 | (2) |
|
Combining Protocols to Build Web Services |
|
|
287 | (22) |
|
|
287 | (1) |
|
|
288 | (7) |
|
|
288 | (4) |
|
The Atom Publishing Protocol |
|
|
292 | (1) |
|
REST Services in the Wild |
|
|
292 | (2) |
|
|
294 | (1) |
|
|
295 | (8) |
|
|
295 | (4) |
|
|
299 | (2) |
|
|
301 | (2) |
|
|
303 | (4) |
|
|
303 | (1) |
|
|
304 | (1) |
|
|
305 | (2) |
|
|
307 | (2) |
|
|
309 | (24) |
|
How Is Serving HTML Different? |
|
|
309 | (1) |
|
|
309 | (1) |
|
|
310 | (1) |
|
|
310 | (1) |
|
|
310 | (2) |
|
|
312 | (16) |
|
|
312 | (1) |
|
|
313 | (4) |
|
Serving XML with ASP.NET and C# |
|
|
317 | (4) |
|
Serving XML with Ruby on Rails |
|
|
321 | (1) |
|
Serving XML with PHP, Perl, Python, and More |
|
|
322 | (1) |
|
|
322 | (3) |
|
|
325 | (3) |
|
|
328 | (4) |
|
|
329 | (2) |
|
|
331 | (1) |
|
|
332 | (1) |
|
|
332 | (1) |
|
Databases and Non-XML Sources |
|
|
333 | (38) |
|
Dealing with Non-XML Sources |
|
|
333 | (1) |
|
Converting Relational Data to XML |
|
|
334 | (24) |
|
Server-Side Transformation Using SQL Server |
|
|
339 | (4) |
|
Client-Side Transformation Using ADO.NET |
|
|
343 | (5) |
|
|
348 | (10) |
|
Converting Binary Data to XML |
|
|
358 | (12) |
|
|
358 | (5) |
|
Automating the Conversion |
|
|
363 | (7) |
|
|
370 | (1) |
|
Creating Syndication Channels |
|
|
371 | (30) |
|
|
371 | (17) |
|
|
372 | (2) |
|
|
374 | (1) |
|
|
374 | (1) |
|
|
375 | (13) |
|
|
388 | (1) |
|
Compiling and Deploying the Application |
|
|
388 | (1) |
|
Considerations for Going Live |
|
|
389 | (1) |
|
|
389 | (11) |
|
Understanding the Mail Support Architecture |
|
|
391 | (1) |
|
Setting Up a Local Mail Server |
|
|
391 | (2) |
|
Using the MailClient Class |
|
|
393 | (3) |
|
The MessageReader Interface |
|
|
396 | (1) |
|
|
396 | (4) |
|
|
400 | (1) |
|
Mashups, HTML Scraping, and Web Services |
|
|
401 | (20) |
|
Popular Examples: Mapping Mashups |
|
|
402 | (2) |
|
|
404 | (2) |
|
The Business Model of Mashups |
|
|
406 | (1) |
|
|
407 | (4) |
|
|
407 | (1) |
|
|
408 | (1) |
|
|
408 | (1) |
|
|
409 | (1) |
|
A Simple Screen Scraping Example |
|
|
410 | (1) |
|
|
411 | (4) |
|
|
414 | (1) |
|
Deploying Through an External Service |
|
|
415 | (1) |
|
|
415 | (4) |
|
|
416 | (1) |
|
|
417 | (2) |
|
|
419 | (2) |
|
Implementing and Maintaining Your URI Space |
|
|
421 | (14) |
|
Future-Proofing Your URIs |
|
|
422 | (3) |
|
|
422 | (1) |
|
Hierarchies and Collections |
|
|
423 | (1) |
|
Trailing Slashes and Location Independence |
|
|
424 | (1) |
|
Managing Change in Your URI Space |
|
|
425 | (3) |
|
The Basics of HTTP Redirection |
|
|
425 | (1) |
|
Permanently Redirecting Resources |
|
|
426 | (1) |
|
Temporarily Redirecting Resources |
|
|
426 | (1) |
|
Redirection Methods You Should Not Use |
|
|
427 | (1) |
|
|
428 | (1) |
|
|
428 | (5) |
|
|
428 | (1) |
|
Apache mod_alias and mod_rewrite |
|
|
429 | (4) |
|
|
433 | (1) |
|
|
433 | (2) |
|
Podcasting and Serving Multimedia |
|
|
435 | (24) |
|
|
436 | (18) |
|
|
436 | (11) |
|
Container and Encoding Formats |
|
|
447 | (7) |
|
|
454 | (3) |
|
|
455 | (1) |
|
|
455 | (1) |
|
|
456 | (1) |
|
|
457 | (2) |
|
|
459 | (36) |
|
|
459 | (2) |
|
|
459 | (1) |
|
|
460 | (1) |
|
Lessons Learned from History |
|
|
461 | (1) |
|
|
461 | (1) |
|
Authentication and Authorization |
|
|
462 | (5) |
|
Authentication and Authorization in IIS and ASP.NET |
|
|
462 | (2) |
|
Different Authentication Methods in IIS and ASP.NET |
|
|
464 | (2) |
|
Authentication and Authorization in Apache |
|
|
466 | (1) |
|
|
467 | (2) |
|
|
467 | (1) |
|
Public Key Infrastructure |
|
|
468 | (1) |
|
|
469 | (1) |
|
|
469 | (1) |
|
|
470 | (9) |
|
The Stages of in an SSL Communication |
|
|
471 | (1) |
|
|
471 | (4) |
|
|
475 | (4) |
|
|
479 | (3) |
|
|
479 | (3) |
|
|
482 | (12) |
|
Using Web Services Security |
|
|
483 | (2) |
|
How the Web Service Works |
|
|
485 | (1) |
|
|
486 | (1) |
|
Adding the Custom Authentication |
|
|
487 | (3) |
|
|
490 | (3) |
|
|
493 | (1) |
|
|
494 | (1) |
Index |
|
495 | |